一、知识储备
1 APIview的as_view -内部还是执行了View的闭包函数view -禁用掉了csrf -一切皆对象,函数也是对象 函数地址.name=lili2 原生View类中过的as_view中的闭包函数view -本质执行了self.dispatch(request, *args, **kwargs),执行的是APIView的dispatch
二、APIView的源码分析
# drf:APIView的源码分析 def as_view(cls, **initkwargs): # 这句话执行完成返回 view闭包函数的内存地址 view = super().as_view(**initkwargs) # 调用父类(View)的as_view view.cls = cls view.initkwargs = initkwargs view=csrf_exempt(view) # 局部禁用csrf return view # 装饰器的使用方式@csrf_exempt ====>view=csrf_exempt(view)def view(): pass# 请求来了,会执行上面返回的view()---->self.dispatch(APIView的dispatch)
三、APIView的dispatch源码分析
# APIView的dispatch源码分析 def dispatch(self, request, *args, **kwargs): # 把原生的request,封装进新的Request对象(drf的Request) # DRF的Request类的对象,内部有request._request,它就是原生request request = self.initialize_request(request, *args, **kwargs) self.request = request try: self.initial(request, *args, **kwargs) ''' #认证,权限,频率 self.perform_authentication(request) self.check_permissions(request) self.check_throttles(request) ''' 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 # 这个request新的requst,是drf中Request对象 # response是原生response response = handler(request, *args, **kwargs) except Exception as exc: # 全局的异常捕获 response = self.handle_exception(exc) # 把视图函数(类)返回的response,又包装了一下 self.response = self.finalize_response(request, response, *args, **kwargs) return self.response
四、Request类分析
Request类 -request._request:原生request -request.data : post请求提交的数据(urlencoded,json,formdata) -request.user :不是原生的user了 -request.query_params :原生的request.GET,为了遵循restful规范 -requset.FILES :新的 -重写了__getattr__,新的request.原来所有的属性和方法,都能直接拿到 def __getattr__(self, attr): return getattr(self._request, attr)
原文转载:http://www.shaoqun.com/a/488112.html
雨果:https://www.ikjzd.com/w/1307
折扣网站:https://www.ikjzd.com/w/74
关键词分析工具:https://www.ikjzd.com/w/1968
一、知识储备1APIview的as_view-内部还是执行了View的闭包函数view-禁用掉了csrf-一切皆对象,函数也是对象函数地址.name=lili2原生View类中过的as_view中的闭包函数view-本质执行了self.dispatch(request,*args,**kwargs),执行的是APIView的dispatch二、APIView的源码分析#drf:APIView的源码
走秀网:https://www.ikjzd.com/w/2427
二类电商:https://www.ikjzd.com/w/1457
关键词数据分析:https://www.kjyunke.com/courses/550
珠海庙湾岛在哪里?珠海庙湾岛好玩吗?:http://tour.shaoqun.com/a/3789.html
【泰国清迈旅游购物必买】--清迈购物攻略:http://tour.shaoqun.com/a/66861.html
没有评论:
发表评论