| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 
 | @classmethodclass APIView(View):
 def as_view(cls, **initkwargs):
 if isinstance(getattr(cls, 'queryset', None), models.query.QuerySet):
 def force_evaluation():
 raise RuntimeError(
 'Do not evaluate the `.queryset` attribute directly, '
 'as the result will be cached and reused between requests. '
 'Use `.all()` or call `.get_queryset()` instead.'
 )
 cls.queryset._fetch_all = force_evaluation
 
 view = super().as_view(**initkwargs)
 view.cls = cls
 view.initkwargs = initkwargs
 
 return csrf_exempt(view)
 
 
 def dispatch(self, request, *args, **kwargs):
 self.args = args
 self.kwargs = kwargs
 
 request = self.initialize_request(request, *args, **kwargs)
 
 self.request = request
 self.headers = self.default_response_headers
 
 try:
 
 self.initial(request, *args, **kwargs)
 
 
 if request.method.lower() in self.http_method_names:
 handler = getattr(self, request.method.lower(),
 self.http_method_not_allowed)
 else:
 handler = self.http_method_not_allowed
 
 response = handler(request, *args, **kwargs)
 
 except Exception as exc:
 response = self.handle_exception(exc)
 
 self.response = self.finalize_response(request, response, *args, **kwargs)
 return self.response
 
 |