1 2 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 47 48 49
| ''' 1 path的第二个参数是:APIView类的as_view内部是用了View的as_view内的view闭包函数 2 一旦有请求来了,匹配test路径成功 3 执行第二个参数view函数内存地址(requset),还是执行View的as_view内的view闭包函数,但是加了个csrf_exempt装饰器 4 所以,继承了APIView的所有接口,都没有csrf的校验了 (*****************) 5 执行self.dispatch(request)----》APIView类的 def dispatch(self, request, *args, **kwargs): # 以后所有的request对象,都是****新的request对象***,它是drf的Request类的对象 request = self.initialize_request(request, *args, **kwargs) self.request = request try: #整个drf的执行流程内的权限,频率,认证 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 '''
def initialize_request(self, request, *args, **kwargs): return Request( request, parsers=self.get_parsers(), authenticators=self.get_authenticators(), negotiator=self.get_content_negotiator(), parser_context=parser_context )
所有的csrf都不校验了 request对象变成了新的request对象,drf的request对象 执行了权限,频率,认证 捕获了全局异常(统一处理异常) 处理了response对象,如果浏览器访问是一个样,postman访问又一个样 以后,在视图类中使用的request对象已经不是原来的request对象了,现在都是drf的request对象了
|