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