@classonlymethoddefas_view(cls,**initkwargs):"""Main entry point for a request-response process."""forkeyininitkwargs:ifkeyincls.http_method_names:raiseTypeError("You tried to pass in the %s method name as a ""keyword argument to %s(). Don't do that."%(key,cls.__name__))ifnothasattr(cls,key):raiseTypeError("%s() received an invalid keyword %r. as_view ""only accepts arguments that are already ""attributes of the class."%(cls.__name__,key))defview(request,*args,**kwargs):self=cls(**initkwargs)ifhasattr(self,'get')andnothasattr(self,'head'):self.head=self.getself.request=requestself.args=argsself.kwargs=kwargsreturnself.dispatch(request,*args,**kwargs)view.view_class=clsview.view_initkwargs=initkwargs# take name and docstring from classupdate_wrapper(view,cls,updated=())# and possible attributes set by decorators# like csrf_exempt from dispatchupdate_wrapper(view,cls.dispatch,assigned=())returnview
80
81
82
83
84
85
86
87
88
defdispatch(self,request,*args,**kwargs):# Try to dispatch to the right method; if a method doesn't exist,# defer to the error handler. Also defer to the error handler if the# request method isn't on the approved list.ifrequest.method.lower()inself.http_method_names:handler=getattr(self,request.method.lower(),self.http_method_not_allowed)else:handler=self.http_method_not_allowedreturnhandler(request,*args,**kwargs)
If the form is invalid, render the invalid form.
59
60
61
defform_invalid(self,form):"""If the form is invalid, render the invalid form."""returnself.render_to_response(self.get_context_data(form=form))
If the form is valid, redirect to the supplied URL.
55
56
57
defform_valid(self,form):"""If the form is valid, redirect to the supplied URL."""returnHttpResponseRedirect(self.get_success_url())
Handle GET requests: instantiate a blank version of the form.
131
132
133
defget(self,request,*args,**kwargs):"""Handle GET requests: instantiate a blank version of the form."""returnself.render_to_response(self.get_context_data())
FormMixin
Insert the form into the context dict.
63
64
65
66
67
defget_context_data(self,**kwargs):"""Insert the form into the context dict."""if'form'notinkwargs:kwargs['form']=self.get_form()returnsuper().get_context_data(**kwargs)
Return an instance of the form to be used in this view.
29
30
31
32
33
defget_form(self,form_class=None):"""Return an instance of the form to be used in this view."""ifform_classisNone:form_class=self.get_form_class()returnform_class(**self.get_form_kwargs())
Return the form class to use.
25
26
27
defget_form_class(self):"""Return the form class to use."""returnself.form_class
Return the keyword arguments for instantiating the form.
35
36
37
38
39
40
41
42
43
44
45
46
defget_form_kwargs(self):"""Return the keyword arguments for instantiating the form."""kwargs={'initial':self.get_initial(),'prefix':self.get_prefix(),}ifself.request.methodin('POST','PUT'):kwargs.update({'data':self.request.POST,'files':self.request.FILES,})returnkwargs
Return the initial data to use for forms on this view.
17
18
19
defget_initial(self):"""Return the initial data to use for forms on this view."""returnself.initial.copy()
Return the prefix to use for forms.
21
22
23
defget_prefix(self):"""Return the prefix to use for forms."""returnself.prefix
Return the URL to redirect to after processing a valid form.
49
50
51
52
53
defget_success_url(self):"""Return the URL to redirect to after processing a valid form."""ifnotself.success_url:raiseImproperlyConfigured("No URL to redirect to. Provide a success_url.")returnstr(self.success_url)# success_url may be lazy
90
91
92
93
94
95
defhttp_method_not_allowed(self,request,*args,**kwargs):logger.warning('Method Not Allowed (%s): %s',request.method,request.path,extra={'status_code':405,'request':request})returnHttpResponseNotAllowed(self._allowed_methods())
Обрабатывает ответы на запросы для запроса HTTP OPTIONS.
97
98
99
100
101
102
defoptions(self,request,*args,**kwargs):"""Handle responding to requests for the OPTIONS HTTP verb."""response=HttpResponse()response['Allow']=', '.join(self._allowed_methods())response['Content-Length']='0'returnresponse
Обработчик POST-запросов. Создает экземпляр формы из переданных POST переменных и проверяет их.
135
136
137
138
139
140
141
142
143
144
defpost(self,request,*args,**kwargs):""" Handle POST requests: instantiate a form instance with the passed POST variables and then check if it's valid. """form=self.get_form()ifform.is_valid():returnself.form_valid(form)else:returnself.form_invalid(form)
Конструктор. Вызывается в URLconf; может содержать полезные дополнительные ключевые аргументы и другие вещи.
38
39
40
41
42
43
44
45
46
def__init__(self,**kwargs):""" Constructor. Called in the URLconf; can contain helpful extra keyword arguments, and other things. """# Go through keyword arguments, and either save their values to our# instance, or raise an error.forkey,valueinkwargs.items():setattr(self,key,value)