APIView源码分析
2020-12-27 12:27
标签:类方法 lazy 分析 ali api book django block framework url.py中使用的as_view()是APIView类的as_view方法,使用的还是django原生的当次请求的request对象。 在运行该 调用父类的as_view方法,就会返回view方法的内存地址,并加 在该dispatch方法中,通过 在 ! authentication_classes在APIView类的配置文件中,我们可以自己写该认证类。 封装完request对象后,回到dispatch方法,继续向下执行到 再次返回到dispatch方法中,就会根据当此请求的请求方式完成视图类方法内的调度 运行完dispatch方法后回到as_view方法中,最后as_view方法返回了 APIView源码运行总结: step1 通过路由与视图的对应关系,运行了APIView类中的as_view方法,调用了父类的as_view方法,APIView类中的as_view方法最终解除了请求时的csrf认证 step2 通过调用父类的as_view方法,调用了view方法并返回了APIView类中dispath的运行结果。 step3 dispath方法中重新封装了request对象 step4 dispatch方法定义了三个认证类 step5 dispatch方法通过request.method方法获得浏览器客户端请求的方式,进行视图类方法的调度 step6 最后再在django原生response的基础上,进一步封装成drf的Response APIView源码分析 标签:类方法 lazy 分析 ali api book django block framework 原文地址:https://www.cnblogs.com/Kathrine/p/13340896.htmlfrom rest_framework.views import APIView
url(r‘^books/‘, views.BookView.as_view()),
as_view
方法时,内部调用了父类(View)的as_view方法。至此request对象还是原生的request对象。()
进行调用,返回dispatch方法,注意该dispatch方法不是父类View中的dispatch方法,而是APIView类自己写的dispatch方法。request = self.initialize_request(request, *args, **kwargs)
重新封装了request对象,并重新赋值给原生的request对象。initialize_request(request, *args, **kwargs)
方法中,返回了Request类实例化的对象,其中一个参数authenticators=self.get_authenticators(),
调用了get_authenticators(),该方法是返回了一个列表,该列表中是authentication_classes类实例化得到的对象self.initial(request, *args, **kwargs)
,在该方法中会定义三个认证组件(认证组件 权限组件 限流组件)csrf_exempt(view)
,该方法的作用的就是解除了浏览器请求时的csrf认证,即以后所有的请求方法都不做csrf的认证