(1)dispatch方法详解----封装原有的request对象

(原request中的方法和属性均可直接在封装后的request中调用,或者使用request._request也可,如:request.user == request._request.user

def dispatch(self, request, *args, **kwargs):
    """
    `.dispatch()` is pretty much the same as Django's regular dispatch,
    but with extra hooks for startup, finalize, and exception handling.
    """
    self.args = args
    self.kwargs = kwargs
    #1.对原来的request进行进一步封装
    request = self.initialize_request(request, *args, **kwargs)
    self.request = request#(2)request已经是经过进一步封装的
    self.headers = self.default_response_headers  # deprecate?
 
    try:
#2.增加对request的调用
        self.initial(request, *args, **kwargs)#(3)比View中多的执行的方法,使用封装过后的request进行调用
 
        # Get the appropriate handler method
        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)#(4)对原响应对象进行进一步封装
    return self.response
dispatch方法重写

相关文章:

  • 2022-12-23
  • 2021-06-05
  • 2021-07-04
  • 2021-08-03
  • 2021-07-10
猜你喜欢
  • 2022-12-23
  • 2021-09-03
  • 2022-12-23
  • 2021-11-04
  • 2022-12-23
  • 2021-10-19
  • 2022-12-23
相关资源
相似解决方案