Views

APIView是django的原生(View)[https://www.jianshu.com/p/327b40458a1f]的子类

通过重载as_view和dispatch

类变量

renderer_classes
parser_classes
authentication_class
throttle_classes
permission_class
content_negotiation_class
metadata_class
versioning_class

方法

as_view

另外设置了view函数的cls initkwargs

dispatch

设置了对象的变量 'args', 'kwargs', 'request'
调用initialize_request
设置了对象的变量 request headers
调用initial
调用用户函数,获取response
调用finalize_response,设置response到对象变量并返回

initialize_request

所接收的是django原生request

构建Request,接收参数有request,parsers,authenticators,negotiator,parser_context
分别对应parser_classes authentication_classes content_negotiation_class和一个包含了view args kwargs的parser_context

initial

所接收的是通过initialize_request构建好的Request

获取format_kwarg,从url中捕获得到,默认为format名称参数
进行内容协商,设置request的accepted_renderer accepted_media_type
获取version,设置request的version versioning_scheme
进行认证
校验权限
校验流量

finalize_response

如果返回的是Response,则确保设置了accepted_renderer accepted_media_type renderer_context
更新头部信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容