【二十二】Django框架(Rest Framework)之解析器和渲染器

【一】解析器的作用

  • 解析器的作用就是服务端接收客户端传过来的数据
    • 把数据解析成自己可以处理的数据。
    • 本质就是对请求体中的数据进行解析。
  • 在了解解析器之前
    • 我们要先知道Accept以及ContentType请求头。
  • Accept是告诉对方我能解析什么样的数据
    • 通常也可以表示我想要什么样的数据。
  • ContentType是告诉对方我给你的是什么样的数据类型。
  • 解析器工作原理的就是拿到请求的ContentType来判断前端给我的数据类型是什么
    • 然后我们在后端使用相应的解析器去解析数据。

【二】Django中的数据解析

  • 在视图中我们可以通过request.POST来获取前端发来的请求数据
    • 那么Django框架是如何拿到请求体中的数据的呢?
    • 我们一起来看一下:
  • 首先,request对象是 WSGIRequest 类的实例化对象
    • 那我们去看一下代码:

  • 此时我们回想在Django的视图中通过request.POST和request.FILES能够取到数据都是因为在这里把请求的数据解析,并赋值给request对象了。
  • 同时我们还会发现一个问题就是,Django的解析器是不支持 ContenType为 application/json 的,也就是说无法解析json格式的数据。

【三】DRF中的解析器

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

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

  • 我们可以在单个视图或者全局的settings.py中配置要使用的解析器。

【1】单个视图配置

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

【2】全局配置

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
    )
}
  • 注意:
    • 当你的项目中只配置了 JSONParser 解析器时,你的项目现在就只能解析JSON格式的数据了
    • 客户端如果使用浏览器提交,那么你将无法解析。
  • 注意
    • 在视图类中定义的配置项的优先级要高于全局配置中的配置项。

【四】DRF中的渲染器

  • 渲染器同解析器相反
    • 它定义了框架按照content_type来返回不同的响应。
  • DRF提供的渲染器有很多,默认是
'DEFAULT_RENDERER_CLASSES': (
    'rest_framework.renderers.JSONRenderer',
    'rest_framework.renderers.BrowsableAPIRenderer',
),
  • 我们也可以在视图中局部设置也可以在全局的settings.py中进行设置:

【1】局部设置

class PublisherViewSet(ModelViewSet):
    queryset = models.Publisher.objects.all()
    serializer_class = PublisherModelSerializer
    renderer_classes = [JSONRenderer, ]
  • 这样设置后就只能返回JSON格式的数据了
  • 并不会像之前一样提供一个阅读友好的web页面。

【2】全局设置

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
    ),
}
  • 注意
    • 在视图类中定义的配置项的优先级要高于全局配置中的配置项。
  • 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、付费专栏及课程。

余额充值