是通过请求的Accept头部来判断采用的响应体的内容类型,也可通过路由中显示指明的文件后缀名称来判断。
可以通过DEFAULT_RENDERER_CLASSES来设置默认的render,也可以针对每个view来设置renderer_classes。
JSONRenderer
TemplateHTMLRenderer
StaticHTMLRenderer
BrowableAPIRenderer
AdminRenderer
HTMLFormRenderer
MultiPartRenderer
CustomRenderer
TemplateHTMLRenderer
render(self, data, accepted_media_type=None, renderer_context=None)
把data封装为HTML形式
传入的renderer_context有:
view
request
response
之后尝试根据response或view中获得模板,在发生异常的情况会获取特殊的异常模板并多传入一个context["status_code"]
调用获得的模板的render
调用流程
finalize_response --> view
在view中通过协商器获得并设置response的accepted_renderer accepted_media_type renderer_context,在renderer_context中有view args kwargs request
rendered_content --> response
在Response中的rendered_content另外增加了renderer_context["response"]
render --> TemplateHTMLRenderer
可见最终传递到Template中的context有:
view
args
kwargs
request
response
其中args kwargs是原生的django的参数,response为drf的Response,view应为drf的APIView,request为drf的Request
之后调用template.render(context, request=request)
其中context为data再加上status_code
网友评论