Class Based Generic Views в Django

21
"Джанго сделал для гитары больше, чем кто-либо в джазе. Его стиль игры был не похож ни на один другой, благодаря ему джаз стал другим. Будет еще много выдающихся гитаристов, но никогда не будет другого Рейнхарда. Я просто уверен в этом". Стефан Грапелли, 1954

Transcript of Class Based Generic Views в Django

Page 1: Class Based Generic Views в Django

"Джанго сделал для гитары больше, чем кто-либо в джазе. Его стиль игры был не похож ни на один другой, благодаря ему

джаз стал другим. Будет еще много выдающихся гитаристов, но никогда не

будет другого Рейнхарда. Я просто уверен в этом".

Стефан Грапелли, 1954

Page 2: Class Based Generic Views в Django

Class Based Generic ViewsDjango meetup 3

Page 3: Class Based Generic Views в Django

def meetup_edit(request, pk): meetup = get_object_or_404(Meetup, pk = pk) if request.method == 'POST': form = MeetupForm(request.POST, request.FILES) if form.is_valid(): form.save() return HttpResponseRedirect('/thanks/') else: return render_to_response('meetup.html', {'form': form}) else: form = MeetupForm(instance = meetup) return render_to_response('meetup.html', {'form': form})

Function Based

Page 4: Class Based Generic Views в Django

class MeetupUpdateView(UpdateView): model = Meetup template_name = ‘meetup.html’ form_class = MeetupForm success_url = ‘/thanks/’

Class Based

Page 5: Class Based Generic Views в Django

Class Based Views:• TemplateView• ListView• DetailView• CreateView• UpdateView• DeleteView• RedirectView• YearArchiveView, MonthArchiveView, WeekArchiveView, DayArchiveView, TodayArchiveView

Page 6: Class Based Generic Views в Django

class TemplateView(TemplateResponseMixin, ContextMixin, View): def get(self, request, *args, **kwargs): context = self.get_context_data(params = kwargs) return self.render_to_response(context)

class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView): pass

class ListView(MultipleObjectTemplateResponseMixin,BaseListView): pass

Реализация

Page 7: Class Based Generic Views в Django

class CreateView(SingleObjectTemplateResponseMixin, BaseCreateView): template_name_suffix = '_form'

class UpdateView(SingleObjectTemplateResponseMixin, BaseUpdateView): template_name_suffix = '_form'

class DeleteView(SingleObjectTemplateResponseMixin, BaseDeleteView): template_name_suffix = '_confirm_delete'

Реализация

Page 8: Class Based Generic Views в Django

3 основных требования к view в Django:

• Должны быть callable объектом

• Должны принимать НttpRequest

• Должны возвращать HttpResponse

Page 9: Class Based Generic Views в Django

# urls.pyfrom django.conf.urls import patterns, urlfrom some_app.views import AboutView

urlpatterns = patterns('', url(r'^/', AboutView.as_view(), name=”some_app_about”),)

Page 10: Class Based Generic Views в Django

@classonlymethoddef as_view(cls, **initkwargs): def view(request, *args, **kwargs): self = cls(**initkwargs) return self.dispatch(request, *args, **kwargs) return view

Page 11: Class Based Generic Views в Django

@method_decorator(login_required) def dispatch(self, request, *args, **kwargs): handler = getattr(self, request.method.lower()) self.request = request self.args = args self.kwargs = kwargs return handler(request, *args, **kwargs)

Page 12: Class Based Generic Views в Django

def get(self, request, *args, **kwargs): context = self.get_context_data(params=kwargs) return self.render_to_response(context)

def post(self, request, *args, **kwargs): form_class = self.get_form_class() form = self.get_form(form_class) if form.is_valid(): return self.form_valid(form) else: return self.form_invalid(form)

Page 13: Class Based Generic Views в Django

def get_context_data(self, **kwargs): return kwargs

def render_to_response(self, context, **kw): return self.response_class( request = self.request, template = self.get_template_names(), context = context, **kw)

Page 14: Class Based Generic Views в Django

SUCCESS!

Page 15: Class Based Generic Views в Django

http://ccbv.co.uk/

Page 16: Class Based Generic Views в Django

TemplateView

Page 17: Class Based Generic Views в Django

as_view() исходный код

Page 19: Class Based Generic Views в Django

Class Based View GET:11.6180129051.Class Based View POST:15.6457400322.Function Based View GET:11.2678151131.Function Based View POST:15.1721260548.----------------------------------------------------------------------Ran 4 tests in 56.563s

1000 GET запросов, 1000 POST запросов:

Page 21: Class Based Generic Views в Django