[Python自学] restframework (解析器)

Posted 风间悠香

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python自学] restframework (解析器)相关的知识,希望对你有一定的参考价值。

一、数据解析器

1.Django默认的数据解析

在我们使用django框架时,浏览器如果发送以下类型的POST数据:

Content-Type=application/x-www-form-urlencoded
Content-Type=application/form-data

则django会自动帮我们将请求体中的数据转换为字典,保存在request.POST中。

但是,如果浏览器发送的是json数据:

Content-Type=application/json

则django无法为我们转换,我们只能从request.body中获取原始数据,自己进行转换。

2.restframework提供的解析器

如果我们使用restframework,他给我们提供了几个常用的数据解析器,列表如下:

from rest_framework import parsers

# 处理json数据,media_type = ‘application/json‘
parsers.JSONParser
# 处理x-www-form-urlencoded数据,media_type = ‘application/x-www-form-urlencoded‘
parsers.FormParser
# 处理multipart/form-data数据,media_type = ‘multipart/form-data‘
parsers.MultiPartParser
# 处理所有数据,media_type = ‘*/*‘
parsers.FileUploadParser

如果我们在视图类中不指定需要使用的解析器,则默认会使用三种:

在APIView类中可以看到:

class APIView(View):

    # The following policies may be set at either globally, or per-view.
    renderer_classes = api_settings.DEFAULT_RENDERER_CLASSES
    parser_classes = api_settings.DEFAULT_PARSER_CLASSES
    authentication_classes = api_settings.DEFAULT_AUTHENTICATION_CLASSES
    ...
    ...

在DEFAULTS中找到 DEFAULT_PARSER_CLASSES :

DEFAULT_PARSER_CLASSES: [
    rest_framework.parsers.JSONParser,
    rest_framework.parsers.FormParser,
    rest_framework.parsers.MultiPartParser
],

默认使用了JSONParser、FormParser和MultiPartParser三种解析器。

3.在视图类中指定可以使用的解析器

class LoginView(APIView):
    authentication_classes = []
    parser_classes = [parsers.JSONParser,parsers.FormParser]
    ...
    ...

我们可以在视图类中使用parser_classes列表来指定该视图类可以使用的解析器。

当然,我们也可以仿造JSONParser等解析器实现自己的解析器。

 

66

 

以上是关于[Python自学] restframework (解析器)的主要内容,如果未能解决你的问题,请参考以下文章

[Python自学] restframework (解析器)

在python中验证restframework用户

python_restframework(认证组件)

python_restframework(序列化)

python 为Django restframework生成JWT(JSON WEB TOKEN)

RESTFramework(DRF)进阶篇GenericAPIview-ViewSet类