解析器
REST framework 包含许多内置的解析器类,允许接受各种媒体类型(media types)的请求。还支持自定义解析器,
- 可以使用 DEFAULT_PARSER_CLASSES 设置默认的全局解析器。例如,以下设置将只允许带有 JSON 内容的请求,而不是默认的 JSON 或表单数据。
setting.py
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
)
}
- 还可以在基于类(APIView )的视图上设置单个视图或视图集的解析器。
- 在request.data中取数据
class RequestView(APIView):
parser_classes = (JSONParser,)
def get(self, request):
print(request.data)
return Response({'msg': 'request'})
Request
- request.data 返回请求主题的解析内容。这跟标准的 request.POST 和 request.FILES 类似。
- request.query_params 等同于 request.GET。
- .parsers 属性。
APIView 类或者 @api_view 装饰器将根据视图上设置的 parser_classes 或 settings 文件中的 DEFAULT_PARSER_CLASSES 设置来确保此属性(.parsers)自动设置为 Parser 实例列表。
class RequestView(APIView):
parser_classes = (JSONParser,)
def get(self, request):
# 非GET传参
print(request.data)
# GET传参
print(request.query_params)
return Response({'msg': 'request'})
使用非GET传参,http://127.0.0.1:8000/req/ 在postman中的body定义{"name":"admin"}
使用GET传参,http://127.0.0.1:8000/req/?age=20
下方为输出结果
Starting development server at http://127.0.0.1:8000/
{'name': 'admin'}
<QueryDict: {'age': ['20']}>
Response
提供一个 Response 类来支持 HTTP 内容协商,该类允许你根据客户端请求返回不同的表现形式(如: JSON ,HTML 等)。
Response(data, status=None, template_name=None, headers=None, content_type=None)
- data: 响应的序列化数据。
- status: 响应的状态代码。默认为200。
- template_name: 选择 HTMLRenderer 时使用的模板名称。
- headers: 设置 HTTP header,字典类型。
- content_type: 响应的内容类型,通常渲染器会根据内容协商的结果自动设置,但有些时候需要手动指定。
Response 可以将内置类型转换成字符串。写到data的位置
return Response(['1', '2', '3'])
本文探讨了REST框架中解析器的作用,展示了如何通过设置解析器类处理不同媒体类型的请求,以及如何使用Response类实现HTTP内容协商,支持多种数据表现形式。
798

被折叠的 条评论
为什么被折叠?



