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
更新头部信息

你可能感兴趣的:(Views)