Renders

作者: xncode | 来源:发表于2017-08-29 16:29 被阅读0次

是通过请求的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

相关文章

网友评论

      本文标题:Renders

      本文链接:https://www.haomeiwen.com/subject/lgoodxtx.html