Slide 1

Slide 1 text

The Dumb & Lazy Guide to Class-based Views Kenneth Love (with apologies/thanks to Daniel Greenfeld)

Slide 2

Slide 2 text

Old

Slide 3

Slide 3 text

@login_required def awesome_view(request): if request.method == “POST”: form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) else: form = AwesomeForm() return render(“awesome.html”, {‘form’: form}) @login_required def awesome_view(request): form = AwesomeForm(request.POST or None) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’) return render(“awesome.html”, {‘form’: form})

Slide 4

Slide 4 text

New

Slide 5

Slide 5 text

Class MyAwesomeView(TemplateView): template_name = “awesome.html” def get(self, request): form = AwesomeForm() return self.render_to_response({‘form’: form}) def post(self, request): form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) return self.render_to_response({‘form’: form})

Slide 6

Slide 6 text

Class MyAwesomeView(TemplateView): template_name = “awesome.html” def get(self, request): form = AwesomeForm() return self.render_to_response({‘form’: form}) def post(self, request): form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) return self.render_to_response({‘form’: form})

Slide 7

Slide 7 text

Class MyAwesomeView(TemplateView): template_name = “awesome.html” def get(self, request): form = AwesomeForm() return self.render_to_response({‘form’: form}) def post(self, request): form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) return self.render_to_response({‘form’: form})

Slide 8

Slide 8 text

Class MyAwesomeView(TemplateView): template_name = “awesome.html” def get(self, request): form = AwesomeForm() return self.render_to_response({‘form’: form}) def post(self, request): form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) return self.render_to_response({‘form’: form})

Slide 9

Slide 9 text

But where’s @login_required?

Slide 10

Slide 10 text

Class MyAwesomeView(TemplateView): template_name = “awesome.html” @method_decorator(login_required) def dispatch(self, *args, **kwargs): return super(MyAwesomeView, self).dispatch(*args, **kwargs) def get(self, request): form = AwesomeForm() return self.render_to_response({‘form’: form}) def post(self, request): form = AwesomeForm(request.POST) if form.is_valid(): form.save() return HttpResponseRedirect(reverse(‘awesome’)) return self.render_to_response({‘form’: form})

Slide 11

Slide 11 text

URLs

Slide 12

Slide 12 text

from project.views import MyAwesomeView [...] url(r’^awesome/$’, MyAwesomeView.as_view(), name=”awesome”) [...]

Slide 13

Slide 13 text

Thanks! But we need more docs about class-based views.