• rest framework 解析器,渲染器


     解析器

    解析器的作用

    解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。

    请求体相关字段:

    • Accept:指定了接收的数据类型
    • ContentType:指定了传递的数据类型

    解析器工作原理的就是拿到请求的ContentType来判断前端给我的数据类型是什么,然后我们在后端使用相应的解析器去解析数据。

    ps:

      django 原生是不支持 json 类型的数据,数据通过request.get 是拿不到的,只能在 request.body 全部请求体中自己去拿

    解析器配置

    配置之前先看下DRF 原生支持多少类型

     默认使用的解析器

    如果想更改,可在单个视图或者全局的settings.py中配置要使用的解析器。

    单个视图配置

    class BookViewSet(ModelViewSet):
        queryset = models.Book.objects.all()
        serializer_class = BookModelSerializer
        parser_classes = [JSONParser, ]

    全局配置

    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': (
            'rest_framework.parsers.JSONParser',
        )
    }

    注意:当你的项目中只配置了 JSONParser 解析器时,你的项目现在就只能解析JSON格式的数据了,客户端如果使用浏览器提交,那么你将无法解析。

    注意:在视图类中定义的配置项的优先级要高于全局配置中的配置项。

    渲染器

    渲染器同解析器相反,它定义了框架按照content_type来返回不同的响应。

    默认渲染器

    DRF提供的渲染器有很多,默认是

     'DEFAULT_RENDERER_CLASSES': (
            'rest_framework.renderers.JSONRenderer',
            'rest_framework.renderers.BrowsableAPIRenderer',
        ),

    我们也可以在视图中局部设置也可以在全局的settings.py中进行设置:

    局部设置

    class PublisherViewSet(ModelViewSet):
        queryset = models.Publisher.objects.all()
        serializer_class = PublisherModelSerializer
        renderer_classes = [JSONRenderer, ]

    这样设置后就只能返回JSON格式的数据了,并不会像之前一样提供一个阅读友好的web页面。

    全局设置

    REST_FRAMEWORK = {
        'DEFAULT_RENDERER_CLASSES': (
            'rest_framework.renderers.JSONRenderer',
        ),
    }
    REST_FRAMEWORK = {
        # 关闭渲染器,只用json 的格式显示在当前页面
        # "DEFAULT_RENDERER_CLASSES": 'rest_framework.renderers.JSONRenderer',
        
        # 打开渲染器,
        "DEFAULT_RENDERER_CLASSES": ['rest_framework.renderers.JSONRenderer',
                                     'rest_framework.renderers.BrowsableAPIRenderer'],
    }
  • 相关阅读:
    Cheatsheet: 2018 11.01 ~ 2019 02.28
    Cheatsheet: 2018 08.01 ~ 2018 10.31
    Cheatsheet: 2018 05.01 ~ 07.31
    Cheatsheet: 2018 04.01 ~ 04.30
    stb_image multiple definition of first defined here 多文件包含问题
    NanoPi arm架构下的程序 ./ 运行黑屏 Qt环境可运行
    opencv3.4.9 + armv7 + arm-linux-gnueabihf交叉编译
    NIVIDIA Tegra K1 QWT安装使用问题和解决办法
    7.17日报
    7.16日报
  • 原文地址:https://www.cnblogs.com/shijieli/p/10354374.html
走看看 - 开发者的网上家园