django写接口状态码封装,有更好的方案?

作者站长头像
站长
· 阅读数 5
import json
from enum import Enum


class Status(Enum):
    SUCCESS = (200000, 'success')
    NO_AUTH = (300001, 'No authorization!')


class Utils:

    @staticmethod
    def json_dumps(res: Status, data):
        return json.dumps({'code': res.value[0], 'data': data, 'info': res.value[0]})


print(Utils.json_dumps(Status.SUCCESS, {'age': 100}))
回复
1个回答
avatar
test
2024-06-24
import json

from enum import Enum
from dataclasses import dataclass, asdict
from typing import Any


@dataclass
class StatusItem:
    code: int
    msg: str


class Status(Enum):
    SUCCESS = StatusItem(200000, "success")
    NO_AUTH = StatusItem(300001, "No authorization!")


class EnumEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Status):
            return asdict(obj.value)

        return json.JSONEncoder.default(self, obj)


@dataclass
class Response:
    status: Status
    data: Any

    def json(self) -> str:
        return json.dumps(asdict(self), cls=EnumEncoder)


print(Response(Status.SUCCESS, {"age": 100}).json())

之后的所有响应都直接调用json()方法即可。

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容