【Django-ninja】在django ninja中处理异常

1. 直接抛内置异常

Django ninja内置了一些常用异常类。

python 复制代码
from ninja.errors import HttpError

@api.get("/some/resource")
def some_operation(request):
    if True:
        raise HttpError(503, "Service Unavailable. Please retry later.")

2. 覆写异常类

可以覆写内置异常类的handler,改变返回结果的内容。

python 复制代码
from ninja.errors import ValidationError
...

@api.exception_handler(ValidationError)
def validation_errors(request, exc):
    return HttpResponse("Invalid input", status=422)

3. 自定义异常类

以创建一个500服务不可用异常类为例。

要实现这一点,你需要:

  1. 自定义一个ServiceUnavailableError
  2. 使用 api.exception_handler 为ServiceUnavailableError异常添加一个处理函数
python 复制代码
api = NinjaAPI()

class ServiceUnavailableError(Exception):
    pass


# initializing handler

@api.exception_handler(ServiceUnavailableError)
def service_unavailable(request, exc):
    return api.create_response(
        request,
        {"message": "Please retry later"},
        status=503,
    )


# some logic that throws exception

@api.get("/service")
def some_operation(request):
    if random.choice([True, False]):
        raise ServiceUnavailableError()
    return {"message": "Hello"}
相关推荐
虎子_layor3 分钟前
告别Redis瓶颈:Caffeine本地缓存优化实战指南
java·后端
q***98526 分钟前
什么是Spring Boot 应用开发?
java·spring boot·后端
码一行9 分钟前
从0到1用Go撸一个AI应用?Eino框架让你效率翻倍!
后端·go
掘金一周21 分钟前
大部分人都错了!这才是chrome插件多脚本通信的正确姿势 | 掘金一周 11.27
前端·人工智能·后端
bcbnb25 分钟前
苹果App上架全流程指南:从注册到审核通过,一文读懂
后端
aiopencode25 分钟前
在 Windows 环境完成 iOS 上架,跨平台发布体系的落地实践
后端
疯狂的程序猴30 分钟前
Fiddler抓包配置与使用教程,HTTPHTTPS抓包、代理设置与接口调试完整指南
后端
每天进步一点_JL1 小时前
事务与消息中间件:分布式系统中的可见性边界问题
分布式·后端
bcbnb1 小时前
Ipa Guard 集成到 CICD 流程,让 iOS 加固进入自动化时代的完整工程方案
后端
该用户已不存在1 小时前
2025 年 8 款最佳远程协作工具
前端·后端·远程工作