
















{
"code": 200,
"msg": "ok",
"data": { some data }
}
{
"code": 404,
"msg": "http not found",
"data": null
}
我说一下我之前的实现,这种实现我认为很怪,而且并不能完美封装一些 500 错误,想请教一下有没有什么可以优雅的方式。
首先我使用一个 dataclasses.dataclass 进行定义返回数据结构(code,msg,data)
from dataclasses import dataclass
from typing import Any
@dataclass
class Result:
code: int
msg: str
data: Any
后面我需要打各种补丁
from dataclasses import asdict
from django.http import JsonResponse
from rest_framework import views
class SomeApiView(views.APIView):
def get(, request, *args, **kwargs) -> JsonResponse:
# do something
return JsonResponse(asdict(Result(200, 'ok', null)))
from dataclasses import asdict
from django.http import JsonResponse
from rest_framework import status, mixins
class MyRetrieveModelMixin(mixins.RetrieveModelMixin):
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return JsonResponse(asdict(Result(200, 'ok', serializer.data)))
# 配置
REST_FRAMEWORK = {
# ...
# 异常处理(统一封装为 code msg data 格式)
'EXCEPTION_HANDLER': 'utils.result_handler.custom_exception_handler',
# ...
}
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response is not None:
# logger
# 进行一些处理 处理成 Result(code, msg, data)
# 这里对很多处理,尤其 serializer 中的处理 特别烦!
# 比如手机号唯一约束,前端就想要 code:400 msg:"该手机号已被使用"
return JsonResponse(...)
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。