Django REST framework - 解析器和渲染器

Django REST framework - 解析器和渲染器

解析器

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

在了解解析器之前,我们要先知道Accept以及ContentType请求头。

Accept是告诉对方我能解析什么样的数据,通常也可以表示我想要什么样的数据。

ContentType是告诉对方我给你的是什么样的数据类型。

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

Django中的数据解析

在视图中我们可以通过request.POST来获取前端发来的请求数据,那么Django框架是如何拿到请求体中的数据的呢?我们一起来看一下:

首先,request对象是 WSGIRequest 类的实例化对象,那我们去看一下代码:

867021-20190114170006334-1174882727.png

867021-20190114170619252-1587865906.png

此时我们回想在Django的视图中通过request.POST和request.FILES能够取到数据都是因为在这里把请求的数据解析,并赋值给request对象了。

同时我们还会发现一个问题就是,Django的解析器是不支持 ContenType为 application/json 的,也就是说无法解析json格式的数据。

DRF中的解析器

我们都知道在DRF中获取请求提交的数据是通过访问request.data,那么request.data的数据是从哪里来的呢?我们通过源码来看一下:

867021-20190114172500253-1137762559.png

867021-20190114172655326-2040873884.png

867021-20190114174051939-1403608596.png

如果没有配置解析器,DRF会使用默认的解析器:

867021-20190114174354866-1664052654.png

867021-20190114174744179-938258748.png

我们可以在单个视图或者全局的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',
    ),
}

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

转载于:https://www.cnblogs.com/konghui/p/10706370.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习 Django Rest Framework(DRF)需要掌握以下几个步骤: 1. Django 基础:首先需要了解 Django 框架的基础知识,包括 Django 的设置、路由、视图、模板等概念。 2. REST 架构:了解 REST(Representational State Transfer)架构的概念和基本原则,包括资源、路由、状态码、请求方法等。 3. DRF 安装和配置:在 Django 项目中安装 DRF,并熟悉其基本配置,包括设置路由、生成 API 文档等。 4. 创建 API 接口:使用 DRF 创建各种 API 接口,包括用户管理、博客文章管理、评论管理等。 5. 数据库操作:熟悉 Django ORM(对象关系映射)的使用,通过 ORM 进行数据库操作。 6. 过滤器和分页器:了解 DRF 的过滤器和分页器,以及如何在 API 接口中使用这些功能。 7. 安全性和认证:熟悉 DRF 的认证和安全机制,包括 Token、JWT 等认证方式,以及 CSRF 保护等安全措施。 8. 测试和调试:熟悉 DRF 的测试框架,编写测试用例并进行调试。 9. 进阶功能:了解 DRF 的进阶功能,如自定义渲染器、过滤器、视图等,以及如何使用 DRF 与其他框架集成。 学习路线可以按照以上步骤进行,具体可以参考以下建议: * 阅读 Django 和 DRF 的官方文档,了解其基本概念和用法。 * 学习 Django 中相关的第三方库,如 Django REST Auth(Django REST 的认证库)和 Django Rest Clients(用于与 API 进行交互的客户端库)。 * 通过实践案例来掌握 DRF 的使用,可以参考一些开源项目中的 API 接口,并尝试自己创建类似的接口。 * 参与社区讨论和问答平台,与其他开发者交流学习心得和解决问题。 * 参加线上或线下培训课程,获取更系统化的学习体验。 总之,学习 DRF 需要不断实践和积累经验,建议按照以上步骤逐步深入学习,并结合实际案例来加深理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值