前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DRF框架请求与响应

DRF框架请求与响应

作者头像
HammerZe
发布2022-05-09 18:29:02
2640
发布2022-05-09 18:29:02
举报
文章被收录于专栏:Hammer随笔

目录

DRF框架请求与响应

ModelSerializer序列化器实战
ModelSerializer序列化器实战

DRF 之Request

Request是包装后的request,前面源码分析过了

不会DRF?源码都分析透了确定不来看? - HammerZe - 博客园 (cnblogs.com)

前面的文章介绍到,新包装的Request对象和原来django的request对象没有什么区别,使用方法一样,只是多了request.data,当然区别也不止这一点,我们看一下目录

image
image

request常用方法

配置请求数据格式

默认的情况下,三种数据格式(urlencoded,formdata,json)都可以解析

比如当请求(post)过来要新增一条数据,那么我们可以针对该请求的数据格式做要求,比如只能提交json格式,或者允许From-data和json等···通过写接口实现,需要进行局部(views)或者全局配置(settings)

配置处理顺序

  1. 局部优先
  2. 全局其次
  3. 默认配置最后

局部配置

  • 导入:from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
  • 配置参数:parser_classes

配置在视图类里

代码语言:javascript
复制
'''views.py'''
# 作者详情视图类
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
class AuthorDetailView(APIView):

# 只处理json格式,默认三种格式都可以
    # parser_classes = [JSONParser, FormParser, MultiPartParser]
    parser_classes = [JSONParser]
    def post(self, request):
        # 获取反序列化数据
        ser = serializer.AuthorDetailSerializer(data=request.data)
        if ser.is_valid():
            # 校验通过存入数据库,不需要重写create方法了
            ser.save()
            return Response({'code': 100, 'msg': '新增成功', 'data': ser.data})
        # 校验失败
        return Response({'code': 101, 'msg': '校验未通过', 'error': ser.errors})
image
image
image
image
image
image

注意

在局部配置的时候千万注意,如果parser_classes=[],那么什么数据格式都不解析

全局配置

导入from rest_framework import settings

源码解释

代码语言:javascript
复制
'''Settings for REST framework are all namespaced in the REST_FRAMEWORK setting.
For example your project's `settings.py` file might look like this:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.TemplateHTMLRenderer',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}
'''

全局settings.py配置

代码语言:javascript
复制
from rest_framework import settings

REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser',
    ],
}

'''默认是三种数据格式都解析的,想解析哪种写哪种就行了'''

总结

  • 一般使用默认配置就可以了,如果需要搭配配置,局部和全局也可以一起使用

DRf 之 Response

导入from rest_framework.response import Response

Reponse常用参数

源码

代码语言:javascript
复制
class Response(SimpleTemplateResponse):
    def __init__(self, data=None, status=None,
                 template_name=None, headers=None,
                 exception=False, content_type=None):
        ·····

ps:上三常用,下三了解即可

  • template_name:模板名称,用浏览器访问需要,默认使用DRF提供的,可以使用自己的
  • exception:异常处理
  • content_type:响应编码格式

局部配置

导入from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer

  • JSONRenderer:json格式渲染器
  • BrowsableAPIRenderer:浏览API渲染器

通过renderer_classes配置解析格式

代码语言:javascript
复制
'''views.py'''
from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer

class PublishView(APIView):
    renderer_classes = [JSONRenderer, ]

    ····
image
image

注意

如果只配置JSONRenderer,那么浏览器访问也是json格式数据

全局配置

settings.py配置

默认两种都解析,取各自所需

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (  # 默认响应渲染类
        'rest_framework.renderers.JSONRenderer',  # json渲染器
        'rest_framework.renderers.BrowsableAPIRenderer',  # 浏览API渲染器
    )
}

总结

  • 还是一般采用默认配置即可~
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DRF框架请求与响应
  • DRF 之Request
    • request常用方法
      • 配置请求数据格式
        • 配置处理顺序
        • 局部配置
        • 全局配置
    • DRf 之 Response
      • Reponse常用参数
        • 局部配置
          • 全局配置
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档