【1119 | Day62】drf之渲染模块

一、渲染模块

根据用户请求URL用户可接受的类型,筛选出合适的渲染组件。

用户请求URL

http://127.0.0.1:8000/test/?format=json 
http://127.0.0.1:8000/test.json  

二、内置渲染器

通过源码,我们可以知道渲染内容主要是JSONRendererBrowsableAPIRenderer

//导入
from rest_framework.renderers import JSONRenderer 
from rest_framework.renderers import BrowsableAPIRenderer

JSONRenderer:

  • 显示json格式
  • 访问URL
    http://127.0.0.1:8000/test/?format=json
    http://127.0.0.1:8000/test.json 
    http://127.0.0.1:8000/test/  
    

BrowsableAPIRenderer:

  • 默认显示格式,可以修改它的html文件
  • 访问URL
    http://127.0.0.1:8000/test/?format=api
    http://127.0.0.1:8000/test.api
    http://127.0.0.1:8000/test/  
    

三、局部渲染

局部配置:

可以在视图类中通过renderer_classes类属性对该视图的数据响应渲染做配置。

在我们定义基础APIView的类添加renderer_classes = [JSONRenderer]这样网页就不会出现渲染只显示js数据。

例如:

class UserAPIView(APIView):
  //响应的渲染模块
  renderer_classes = [JSONRenderer]

    def get(self, request, *args, **kwargs):
        print(request.query_params)
        data = {
            'status': 0,
            'msg': 'get ok',
            'results': [],
            'token': '123.12321.231'
        }
        return Response(
            data=data,
            status=status.HTTP_200_OK,
            headers={'Token': '123as.masd21.asd213sd'},
            content_type='application/json'  # 默认就是application/json
        )

四、全局渲染

全局配置:在settings.py

可以在项目配置文件的drf配置中通过DEFAULT_RENDERER_CLASSES对该视图的数据响应渲染做配置。

例如:

# drf配置
REST_FRAMEWORK = {
    # 响应的渲染模块
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',  # 'application/json'
        'rest_framework.parsers.FormParser',  # 'application/x-www-form-urlencoded'
        'rest_framework.parsers.MultiPartParser'  # multipart/form-data
    ],
}

注意:

如果一个视图类在有全局配置下,还进行了局部配置,优先走自己的局部配置。

核心:

可以全局和局部配置视图类支持的结果渲染:默认可以json和页面渲染,学习该模块的目的是开发可以全局只配置json方式渲染。

原文地址:https://www.cnblogs.com/fxyadela/p/11892035.html