在Django中,可以通过编写一个统一的返回数据函数来实现返回数据的统一处理。具体实现如下:
- 在utils(或者其他命名的)应用中,创建一个response.py文件,用于编写统一返回数据的函数。
- 在response.py中,定义一个ApiResponse类,用于封装返回数据。代码如下:
pythonclass ApiResponse:
def __init__(self, code=0, message='ok', data=None):
self.code = code
self.message = message
self.data = data
def to_dict(self):
return {
'code': self.code,
'message': self.message,
'data': self.data,
}
- 在response.py中,编写一个api_response装饰器,用于将视图函数的返回值转换为ApiResponse对象。代码如下:
pythonfrom functools import wraps
from django.http import JsonResponse
def api_response(func):
@wraps(func)
def wrapper(request, *args, **kwargs):
try:
data = func(request, *args, **kwargs)
response = ApiResponse(data=data)
except Exception as e:
response = ApiResponse(code=500, message=str(e))
return JsonResponse(response.to_dict())
return wrapper
- 在视图函数中,使用api_response装饰器来处理返回值。例如:
python@api_response
def my_view(request):
data = {'foo': 'bar'}
return data
这样,在调用my_view时,返回的数据就会被自动封装为ApiResponse对象,并以JSON格式返回。如果发生异常,ApiResponse对象的code属性会被设置为500,message属性会被设置为异常信息。