Django REST Framework 学习笔记(六):响应模块 response

  • Title(EN): Django REST Framework Learning Notes (6): the response module
  • Author: dog2

基本信息

源码分析

响应类构造器:rest_framework.response.Response

1
2
3
4
5
6
7
8
9
10
11
12
class Response(SimpleTemplateResponse):
def __init__(self, data=None, status=None,
template_name=None, headers=None,
exception=False, content_type=None):
"""
:param data: 响应数据
:param status: http响应状态码
:param template_name: drf也可以渲染页面,渲染的页面模板地址(不用了解)
:param headers: 响应头
:param exception: 是否异常了
:param content_type: 响应的数据格式(一般不用处理,响应头中带了,且默认是json)
"""

用法示例

1
2
3
4
5
# status是解释一堆 数字 网络状态码的模块
from rest_framework import status

# 一般情况下只需要返回数据,status和headers都有默认值
return Response(data={数据}, status=status.HTTP_200_OK, headers={设置的响应头})

二次封装Response类

可以自定义APIResponse以便于使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from rest_framework.response import Response

class APIResponse(Response):
def __init__(self, data_status=0, data_msg='ok', results=None, http_status=None, headers=None, exception=False, **kwargs):
# data的初始状态:状态码与状态信息
data = {
'status': data_status,
'msg': data_msg,
}
# data的响应数据体
# results可能是False、0等数据,这些数据某些情况下也会作为合法数据返回
if results is not None:
data['results'] = results
# data响应的其他内容
# if kwargs is not None:
# for k, v in kwargs.items():
# setattr(data, k, v)
data.update(kwargs)

super().__init__(data=data, status=http_status, headers=headers, exception=exception) #重写父类Response的__init__方法