Become a sponsor

全局异常与响应
定义了统一的响应格式和全局异常处理机制。所有 API 返回 {code, data, msg, ok} 标准格式。响应函数位于 utils/R.py。
utils/R.py 提供统一的响应生成函数:
from utils import R
# 成功响应
R.ok(data={"id": 1}, msg="操作成功")
# {"code": 0, "data": {"id": 1}, "msg": "操作成功", "ok": true}
# 失败响应
R.failed(msg="参数错误")
# {"code": 1, "data": null, "msg": "参数错误", "ok": false}
# 带扩展参数的响应
R.ok(data=list, total=100)
# {"code": 0, "data": [...], "msg": "操作成功", "ok": true, "total": 100}| 函数 | 说明 | code | ok |
|---|---|---|---|
R.ok() | 成功响应 | 0 | true |
R.failed() | 失败响应 | 1 | false |
R.response() | 通用响应 | 自定义 | 自定义 |
函数签名:
def ok(data=None, msg="操作成功", code=0, **kwargs) -> JsonResponse:
"""生成成功响应,支持通过 kwargs 添加额外字段(如 total)"""
def failed(msg="操作失败", code=1, data=None, **kwargs) -> JsonResponse:
"""生成失败响应"""
def response(data=None, msg="操作成功", code=0, success=True, **kwargs) -> JsonResponse:
"""通用响应生成器(高级用法),允许完全自定义字段"""分页数据通过 R.ok() 传递:
# application/level/services.py
def get_level_page(request):
# ... 分页查询逻辑 ...
return R.ok(data={
"records": records,
"total": total,
"size": size,
"current": current,
"pages": pages
})# utils/R.py
class Codes:
SUCCESS = 0
FAILED = 1
UNAUTHORIZED = 401 # 未认证
FORBIDDEN = 403 # 无权限
NOT_FOUND = 404 # 资源不存在
VALIDATE_ERROR = 422 # 验证错误
SERVER_ERROR = 500 # 服务器错误在 service 层使用 try/except 捕获异常:
# application/level/services.py
def add_level(request):
try:
data = parse_request_body(request)
form = LevelForm(data)
if not form.is_valid():
return R.failed(msg=regular.get_err(form))
# 业务逻辑...
Level.objects.create(**form.cleaned_data)
return R.ok(msg="添加成功")
except Exception as e:
logger.error(f"添加职级失败: {str(e)}")
return R.failed(msg="添加失败")Django 通过中间件处理全局异常:
# middleware/exception_middleware.py
class ExceptionMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
try:
response = self.get_response(request)
return response
except Exception as e:
logger.error(f"系统异常: {str(e)}")
return R.failed(msg="服务器内部错误", code=500)全局异常与响应模块具备以下特点:
1. 统一格式:所有 API 返回 {code, data, msg, ok} 标准格式
2. R.ok()/R.failed():简洁的响应生成函数
3. Codes 常量:定义常用状态码
4. kwargs 扩展:支持通过 kwargs 添加额外字段
5. Services try/except:在 service 层捕获异常,返回友好提示
6. 全局异常:中间件捕获未处理异常,返回统一格式