是通過請求的Accept頭部來判斷采用的響應(yīng)體的內(nèi)容類型睡扬,也可通過路由中顯示指明的文件后綴名稱來判斷。
可以通過DEFAULT_RENDERER_CLASSES來設(shè)置默認(rèn)的render刺覆,也可以針對每個(gè)view來設(shè)置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
之后嘗試根據(jù)response或view中獲得模板史煎,在發(fā)生異常的情況會獲取特殊的異常模板并多傳入一個(gè)context["status_code"]
調(diào)用獲得的模板的render
調(diào)用流程
finalize_response --> view
在view中通過協(xié)商器獲得并設(shè)置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的參數(shù),response為drf的Response篇梭,view應(yīng)為drf的APIView氢橙,request為drf的Request
之后調(diào)用template.render(context, request=request)
其中context為data再加上status_code