- Title(EN): Django REST Framework Learning Notes (3): the renders module
- Author: dog2
用DRF做测试会发现,用浏览器请求API返回DRF定制的页面,对开发者相当友好,如下图:

而若使用python第三方模块requests或者postman等工具,这则返回的是原生的json数据。
实现这种差别响应的,正是本节的主角——(响应)渲染模块。
基本信息
源码分析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| self.response = self.finalize_response(request, response, *args, **kwargs)
neg = self.perform_content_negotiation(request, force=True)
renderers = self.get_renderers()
return [renderer() for renderer in self.renderer_classes]
renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ],
|
总结
调用链如下:
- 自己视图类的类属性(局部配置)
APIView类的类属性设置
- 自己配置文件的
DEFAULT_RENDERER_CLASSES(全局配置)
- drf配置文件的
DEFAULT_RENDERER_CLASSES
用法示例
自定义全局配置
所有视图类统一处理,在项目的settings.py中
1 2 3 4 5 6 7
| REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': [ 'rest_framework.renderers.JSONRenderer', 'rest_framework.renderers.BrowsableAPIRenderer', ], }
|
自定义局部配置
某一个或一些实体类单独处理,在views.py视图类中提供对应的类属性
1 2 3 4 5 6 7 8 9 10 11
|
from rest_framework.renderers import JSONRenderer class Test2(APIView): renderer_classes = [JSONRenderer] def get(self, request, *args, **kwargs): return Response('drf get ok 2')
def post(self, request, *args, **kwargs): return Response('drf post ok 2')
|