from rest_framework.response import Response
源码
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)
"""
pass
使用:常规实例化响应对象
# status就是解释一堆 数字 网络状态码的模块
from rest_framework import status就是解释一堆 数字 网络状态码的模块
# 一般情况下只需要返回数据,status和headers都有默认值
return Response(data={数据}, status=status.HTTP_200_OK, headers={设置的响应头})
自定义响应模块
responses.py
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=None, **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)
异常响应
from rest_framework.response import Response
from rest_framework import status
def api_error(code, msg):
err_resp = {'error_msg': msg}
return Response(err_resp, status=code)
# permission check
permission = reques.user.is_staff
if not permission:
error_msg = 'Permission denied.'
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
其他
from rest_framework import exceptions
# Token过期 退出登录
raise exceptions.AuthenticationFailed('Token has expired')
# 权限问题 退出登录
raise exceptions.PermissionDenied("Permission denied")
# 没提供身份凭证 退出登录
raise exceptions.NotAuthenticated()