rest_framework 解析器

2020-03-03  本文已影响0人  eeert2

一、什么是解析器。

http请求中,根据请求头的Content-Type
将请求的内容转换为合适的格式就是解析器的工作。

django的解析器太过简单,不能完全满足我们的需要:

{
    "username": "李师师",
    "password": "sdf097^-sdf112233"
}
from django.http import QueryDict

class UserView(View):

    def get(self, request):
        pass
        
    def put(self, request):
        data = QueryDict(request.body)
        ……

        return JsonResponse(data, safe=False)

针对以上原因,rest_framework对解析器做了进一步的加强。
使用rest_framework的解析器后:

二、如何设置rest_framework解析器工作

1. 在单一视图中起作用:

from rest_framework.parsers import JSONParser
from rest_framework.response import Response
from rest_framework.views import APIView

class ExampleView(APIView):
    """
    A view that can accept POST requests with JSON content.
    """

    # 传入多少个解析器,就支持多少中数据输入,最终都是将数据转换成 `dict`
    parser_classes = [JSONParser] 

    def post(self, request, format=None):
        return Response({'received data': request.data})

2. 在全局中配置默认解析器

在每一个视图中都写一次解析器是很麻烦的事情,特别是当我们后续新增某种数据格式的支持,则需要对以前所有的视图都添加这一解析器。

在全局配置是比较常用的方法,如果没有指定解析器,则默认使用全局配置的解析器。一旦在视图中指定解析器,则使用视图指定的解析器。

settings.py中追加以下内容即可完成配置

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        # 这里添加支持的数据解析
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ]
}

三、rest_framework自带的解析器

上一篇 下一篇

猜你喜欢

热点阅读