Become a sponsor

说明
src/core/response.py 提供统一的 API 响应封装,所有接口返回格式为 {code, data, msg, ok}。R 对象是全局统一的响应工具类。
{
"code": 0,
"data": {},
"msg": "操作成功",
"ok": true
}| 字段 | 类型 | 说明 |
|---|---|---|
code | int | 状态码:0=成功,非0=失败 |
data | any | 响应数据 |
msg | string | 提示信息 |
ok | bool | 是否成功 |
from core import response as R
# 基本成功
R.ok(handler)
# 带数据
R.ok(handler, data={"id": 1, "name": "admin"})
# 自定义消息
R.ok(handler, msg="注册成功")
# 带分页
R.ok(handler, data={"list": [...], "total": 100})# 基本失败
R.failed(handler)
# 自定义消息
R.failed(handler, msg="用户名已存在")
# 自定义状态码
R.failed(handler, code=401, msg="未授权")# 完全自定义
R.response(handler, code=0, data={}, msg="自定义", ok=True)# src/core/response.py
from core.base_handler import BaseHandler
class R:
@staticmethod
def ok(handler: BaseHandler, data=None, msg="操作成功"):
handler.finish({
"code": Codes.SUCCESS,
"data": data,
"msg": msg,
"ok": True,
})
@staticmethod
def failed(handler: BaseHandler, msg="操作失败", code=Codes.FAILED):
handler.finish({
"code": code,
"data": None,
"msg": msg,
"ok": False,
})
@staticmethod
def response(handler: BaseHandler, code=0, data=None, msg="", ok=True):
handler.finish({
"code": code,
"data": data,
"msg": msg,
"ok": ok,
})class Codes:
SUCCESS = 0 # 成功
FAILED = 1 # 业务失败
UNAUTHORIZED = 401 # 未授权
FORBIDDEN = 403 # 无权限
NOT_FOUND = 404 # 资源不存在
SERVER_ERROR = 500 # 服务器错误class LinkDetailHandler(BaseHandler):
@permission_required("sys:link:detail")
async def get(self, id):
# Service 返回原始数据时,用 R.ok 包装
return R.ok(self, data=link_service.get_detail(id))class LinkService(BaseService):
async def add(self, handler):
# Service 返回 R 对象
# ...
return R.ok(handler, msg="添加成功")# src/core/base_handler.py
def write_error(self, status_code, **kwargs):
exc = kwargs.get("exc_info", (None, None, None))[1]
if isinstance(exc, BaseAppError):
self.finish({"code": exc.code, "data": None, "msg": exc.msg, "ok": False})| 方面 | 说明 |
|---|---|
| 响应方式 | R.ok(self, data=...) / R.failed(self, msg=...) |
| 底层实现 | self.finish(body) 写出 JSON |
| Handler 参数 | self(Handler 实例) |
R 对象是统一响应封装的核心工具,所有 API 返回 {code, data, msg, ok} 格式。成功用 R.ok(),失败用 R.failed(),自定义用 R.response()。Handler 层直接调用 R.ok(self, data=...) 完成响应。