Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Class  Based  Generic  Views   Django  meetup  3  

Slide 3

Slide 3 text

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  HKpResponseRedirect('/thanks/')                else:                        return  render_to_response('meetup.html',  {'form':  form})        else:                form  =  MeetupForm(instance  =  meetup)        return  render_to_response('meetup.html',  {'form':  form})   FuncQon  Based  

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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(MulQpleObjectTemplateResponseMixin,BaseListView):        pass   Реализация  

Slide 7

Slide 7 text

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'   Реализация  

Slide 8

Slide 8 text

3  основных  требования  к  view  в  Django:     •   Должны  быть  callable  объектом     •   Должны  принимать  НNpRequest   •   Должны  возвращать  HNpResponse  

Slide 9

Slide 9 text

#  urls.py   from  django.conf.urls  import  paKerns,  url   from  some_app.views  import  AboutView     urlpaKerns  =  paKerns('',        url(r'^/',  AboutView.as_view(),  name=”some_app_about”),   )  

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

       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)  

Slide 13

Slide 13 text

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)  

Slide 14

Slide 14 text

SUCCESS!  

Slide 15

Slide 15 text

h?p://ccbv.co.uk/  

Slide 16

Slide 16 text

TemplateView  

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

h?ps://github.com/FZambia/django-­‐class-­‐ based-­‐vs-­‐funcYon-­‐based      

Slide 19

Slide 19 text

Class  Based  View  GET:   11.6180129051   .   Class  Based  View  POST:   15.6457400322   .   FuncYon  Based  View  GET:   11.2678151131   .   FuncYon  Based  View  POST:   15.1721260548   .   -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐   Ran  4  tests  in  56.563s   1000  GET  запросов,  1000  POST  запросов:  

Slide 20

Slide 20 text

Полезные  ссылки:     • hKps://github.com/django/django/tree/master/django/views/ generic   •   hKp://habrahabr.ru/post/136784/   •   hKp://habrahabr.ru/post/137168/   •    hKp://so…waremaniacs.org/blog/2011/10/06/class-­‐based-­‐ generic-­‐views/   •   hKp://kimavr.name/blog/2011/9/2/7/   •   hKps://github.com/brack3t/django-­‐braces     •   hKps://github.com/lig/django-­‐supergeneric   •   hKps://code.djangoproject.com/Qcket/6735  

Slide 21

Slide 21 text

No content