DC's blog DC's blog
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)

DC

愿我一生欢喜,不为世俗所及.
首页
  • 计算机基础
  • linux基础
  • mysql
  • git
  • 数据结构与算法
  • axure
  • english
  • docker
  • opp
  • oop
  • 网络并发编程
  • 不基础的py基础
  • 设计模式
  • html
  • css
  • javascript
  • jquery
  • UI
  • 第一次学vue
  • 第二次学vue
  • Django
  • drf
  • drf_re
  • 温故知新
  • flask
  • 前后端不分离

    • BBS
    • 订单系统
    • CRM
  • 前后端部分分离

    • pear-admin-flask
    • pear-admin-django
  • 前后端分离

    • 供应链系统
  • 理论基础
  • py数据分析包
  • 机器学习
  • 深度学习
  • 华中科大的网课
  • cursor
  • deepseek
  • 杂文
  • 罗老师语录
  • 关于我

    • me
  • 分类
  • 归档
GitHub (opens new window)
  • Django

  • 第一次学drf

    • Postman和restful
    • APIView
    • Serializer
    • ModelSerializer
    • drf的请求与响应
      • Request
        • 常用属性
        • 接口支持的编码
        • 局部配置
        • 全局配置
      • Response
        • 构造方式
        • 响应显示格式
        • 局部配置
        • 全局配置
    • drf的视图组件
    • drf的路由组件
    • 认证权限频率
    • 过滤排序分页异常
    • 源码分析
    • jwt
    • 大回顾
    • 零散的知识点
  • 第二次学drf

  • 温故知新

  • flask

  • 后端
  • 第一次学drf
DC
2022-12-21
目录

drf的请求与响应

# Request

首先, 提醒一点, REST framework 传入视图的request对象不再是Django默认的HttpRequest对象
而是 REST framework提供的扩展了HttpRequest类的Request类的对象!!
在前面有对Request类进行过分析!!详情请到 APIView.md中查看!

# 常用属性

Request类的实例化对象 (此处是request) 的常用属性

1> request.data 包含了对POST、PUT、PATCH请求方式解析后的数据..
     type(request.data)的结果取决于前端编码的格式. urlencoded、formdata --> querydict ; json --> dict
这一点不是很重要,管它什么格式,request.data拿到后, 直接当作字典用就行啦 !!
2> request.query_params 与Django标准的request.GET相同,只是更换了更正确的名称而已

# 接口支持的编码

可以通过配置, 设置后端接口 支持/能够解析 的编码格式, 默认情况三种编码格式都支持!!

查找顺序/优先级: 视图类局部 -- 项目配置文件 -- drf的配置文件 
因为有优先级存在,可以局部和全局配置结合着使用!!

# 局部配置

在视图类中写类属性 parser_classes

from rest_framework.views import APIView
from rest_framework.response import Response
"""
JSONParser -- 解析json格式 'application/json'
FormParser -- 解析from表单格式 'application/x-www-form-urlencoded'
MultiPartParser -- 解析文件格式 'multipart/form-data'
"""
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser


class IndexView(APIView):
    # 需求:想要后端视图类IndexView中post/put/patch请求类型的接口只 支持/接收 前端json编码的数据!!  
    parser_classes = [JSONParser, ]

    def get(self, request):
        return Response('get')

    def post(self, request):
        return Response(request.data)


# 不符合,返回前端的报错信息.      
# {
#     "detail": "Unsupported media type \"application/x-www-form-urlencoded\" in request."
# }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 全局配置

在项目的settings.py中配置

REST_FRAMEWORK = {
    # -- 全局解析的编码格式 全局生效,所有接口都支持
    #    只不过是在自己项目的settings.py文件覆盖了drf内置配置文件settings.py里这部分的配置
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        # 'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser'
    )
}
1
2
3
4
5
6
7
8
9

# Response

drf的Response类的父类继承了Django的HttpResponse!!
以后我们接口返回的都是Response类的实例化对象!

# 构造方式

Response实例化对象的属性:
Response(data, status=None, template_name=None, headers=None, exception=False, content_type=None)

△ data:
          要返回的数据,放到了Http响应的响应体中!
          若传列表、字典,会序列化成json格式返回、若传字符串返回的也是字符串,不变.
△ status:
          http响应的状态码,默认为200.
          drf将所有的http状态码都定义成了常量,放到了rest_framework.status下 from rest_framework import status
△ headers:
          用于往http响应头里写k-v的数据,是个字典
△ content_type:
          响应的编码格式,此参数无需传递,REST framework会根据前端所需类型数据来自动设置该参数.
Ps: template_name、exception不用管.

原生的Django往响应头里写k-v数据,怎么做的?
def index(request):
    res = HttpResponse('ok')
    res['name'] = 'lqz'  # -- 往响应头里写入name=lqz 
    return res

信息告知 - 1xx
成功 - 2xx
重定向 - 3xx
   301 永久重定向
   302 临时重定向
客户端错误 - 4xx
服务器错误 - 5xx
1
2
3
4
5
6
7
8
9
10
11
12
13

# 响应显示格式

响应数据回去后,是显示浏览器里drf提供的那个好看的页面,还是postman里的json格式,可以进行配置.

# 局部配置

在视图类中写类属性 renderer_classes

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
from rest_framework.renderers import JSONOpenAPIRenderer, BrowsableAPIRenderer


class IndexView(APIView):
    parser_classes = [JSONParser, ]
    renderer_classes = [JSONOpenAPIRenderer, ]

    def get(self, request):
        return Response('get')

    def post(self, request):
        return Response(request.data)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 全局配置

和配置前端数据的编码格式一样,在项目的settings.py中配置

REST_FRAMEWORK = {
    # -- 前端数据编码格式/后端解析数据的格式
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        # 'rest_framework.parsers.FormParser',
        # 'rest_framework.parsers.MultiPartParser'
    )
    # -- 默认响应渲染类
    #    若想浏览器访问也是json的话,把BrowsableAPIRenderer那行代码注释点即可.
    'DEFAULT_RENDERER_CLASSES': (  
        'rest_framework.renderers.JSONRenderer',  # -- json渲染器
        'rest_framework.renderers.BrowsableAPIRenderer',  # -- 浏览API渲染器
    )
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

ModelSerializer
drf的视图组件

← ModelSerializer drf的视图组件→

最近更新
01
deepseek本地部署+知识库
02-17
02
实操-微信小程序
02-14
03
教学-cursor深度探讨
02-13
更多文章>
Theme by Vdoing | Copyright © 2023-2025 DC | One Piece
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式