DRF 请求与响应
请求与响应
【1】Request对象
(1)常用属性
request._request
- request之前的所有属性和方法,是被完美继承的,老的东西任然可以使用
- 就是老的request
request.data
:- 将请求体中的数据(无论是什么方法,还是什么格式的数据)都将放在一个字典中
request.query_params
:- 将访问请求的查询参数分装在这个属性中,方便提取URL参数,贴合restful规范
(2)限制请求数据编码格式
- 我们常用的编码格式
urlencoded
、form-data
、json
- 但是如果我们想要限制前端发送的请求格式(比如只让发送Json等),有三种方法
- 方法一:中间件
- 依据:在每次发送请求进入视图函数之前都会进行中间件的判断,所以这个方法可行
class InfoMiddleWare(MiddlewareMixin):
def process_request(self, request):
content_type = request.META.get("CONTENT_TYPE")
print(content_type) # application/json
if 'json' not in content_type:
return JsonResponse({"error": "只能接收json格式"}, status=400)
-
小补充:
- 如何找到那些REST_FRAMEWORK的默认配置
from rest_framework import settings
- 进入rest_framework的settings文件就可以看到
-
方法二:全局配置
- rest_framework提供了配置,可以直接将所有的请求编码格式添加要求
# settings.py文件中
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser',
],
}
- 方法三:局部配置
- 如果想要限制某个视图类的请求编码格式,那么在这个视图类中添加类变量
parser_classes
- 如果同时配置了全局配置和局部配置,那么会生效局部的,按照就近原则,就近的会进行属性重写
- 如果想要限制某个视图类的请求编码格式,那么在这个视图类中添加类变量
from rest_framework.parsers import JSONParser, DjangoMultiPartParser, FormParser
# 只能传递json编码格式
class AuthorAPIView(APIView):
parser_classes = [JSONParser]
- 他们之间的对应关系
JSONParser
-----application/json
DjangoMultiPartParser
-----multipart/form-data
FormParser
-----application/x-www-form-urlencoded
(3)限制请求方法
- 方法一:中间件
- 在
request.method
中可以拿到当前请求的请求方法,根据这个判断就可以
- 在
- 方法二:根据源码来
- 在源码分析中
dispach
方法会进行一个判断if request.method.lower() in self.http_method_names:
- 其中有这么个属性
http_method_names
,里面放的时允许的请求方式 - 所以在视图类中重写这个属性就可以限制访问的方法
- 在源码分析中
class AuthorAPIView(APIView):
# 只允许发送get请求
http_method_names = [’get']
【2】Response对象
(1)简介
- DRF的
Response
类是专门为构建RESTful API设计的,它不仅仅是一个简单的JSON响应,而是包含了一系列与RESTful API交互有关的功能。- 内容类型协商:DRF的
Response
类能够自动处理内容类型协商,根据客户端的请求头(如Accept
)来返回适当的媒体类型。 - 渲染器:DRF提供了多种渲染器,可以将响应数据渲染为不同的格式(如JSON、XML等)。
Response
类会根据请求的内容类型选择适当的渲染器。 - 状态码:DRF的
Response
类可以轻松设置HTTP状态码,以表示API请求的成功或失败。 - 头信息:可以使用
Response
类来设置HTTP响应的头信息。 - 数据序列化:DRF的序列化器与
Response
类紧密集成,使得从数据库模型到JSON响应的转换变得简单。
- 内容类型协商:DRF的
(2)参数
- data
- 这个参数是响应体中要包含的数据。它可以是任何可以被序列化为JSON的对象(例如字典、列表、模型实例等)
- status
- 这个参数指定了HTTP响应的状态码。它应该是一个有效的HTTP状态码,如
200
(成功)、404
(未找到)或500
(服务器内部错误),还可以使用它提供的状态码常量,如status.HTTP_200_OK
- 这个参数指定了HTTP响应的状态码。它应该是一个有效的HTTP状态码,如
- template_name
- 这个参数在Django REST framework中不常用,但在标准的Django视图中,它用于指定要渲染的模板的名称
- headers
- 这个参数允许你设置自定义的HTTP响应头。它是一个字典,其中键是头字段的名称,值是头字段的值
- exception
- 这个参数通常不直接由开发者设置。
- content_type
- 这个参数用于指定响应的
Content-Type
。虽然通常可以通过设置headers
参数中的Content-Type
来达到同样的效果,但content_type
参数提供了一种更直接的方式来设置它
- 这个参数用于指定响应的
(3)执行响应格式
- 方式一:全局配置
# settings配置文件
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': [
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.TemplateHTMLRenderer',
],
}
- 方式二:局部配置
from rest_framework.renderers import JSONRenderer, BrowsableAPIRenderer
# BrowsableAPIRenderer
# 返回浏览器页面格式,postman将无法正常显示
class AuthorAPIView(APIView):
renderer_classes = [BrowsableAPIRenderer]
原文地址:https://blog.csdn.net/weixin_48183870/article/details/137980960
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!