examtest/test_server/utils/response.py

63 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from rest_framework.renderers import JSONRenderer
class BaseResponse(object):
"""
封装的返回信息类
"""
def __init__(self):
self.code = 200
self.data = None
self.msg = None
@property
def dict(self):
return self.__dict__
class FitJSONRenderer(JSONRenderer):
"""
自行封装的渲染器
"""
def render(self, data, accepted_media_type=None, renderer_context=None):
"""
如果使用这个render
普通的response将会被包装成
{"code":200,"data":"X","msg":"X"}
这样的结果
使用方法:
- 全局
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': ('utils.yg_response.FitJSONRenderer', ),
}
- 局部
class UserCountView(APIView):
renderer_classes = [FitJSONRenderer]
:param data: {"msg":"X"}
:param accepted_media_type:
:param renderer_context:
:return: {"code":200,"data":"X","msg":"X"}
"""
response_body = BaseResponse()
response = renderer_context.get("response")
response_body.code = response.status_code
if response_body.code >= 400: # drf异常
response_body.data = data
if isinstance(data, dict):
data = data[list(data.keys())[0]]
if isinstance(data, list):
data = data[0]
if not isinstance(data, str):
data = '请求错误'
response_body.msg = data
elif data and 'error' in data and data['error']:# 自传异常,key为error
response_body.code = data.get("code",400)
response_body.msg = data.get("error", "")
else:
response_body.data = data
renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分
return super(FitJSONRenderer, self).render(response_body.dict, accepted_media_type, renderer_context)