【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"}
相关推荐
woniu_maggie22 分钟前
SAP MDG主数据治理实战:从架构原理到项目实施全解析
后端
xiaoqiMikko26 分钟前
Redis 实战(一):内存满了 —— 拒写、淘汰、被系统杀掉,以及删了 key 内存为什么不降(6.2.4 实测)
redis·后端
ch62329 分钟前
《AI 辅助编程实战:从零跑通一个 Excel 报表生成脚本的踩坑与复盘》
人工智能·python
工程师小爱1 小时前
电芯尺寸合格,不等于电池包尺寸合格
后端
geovindu1 小时前
rust:Memento Pattern(续)
开发语言·后端·设计模式·rust·行为模式·备忘录模
闲云lazycloud1 小时前
第 1 课:Harness 与 Agent 运行时
人工智能·后端
import_random1 小时前
[python]conda和pip(区别和联系2)
python
熊哈哈O_o1 小时前
260+异构同步链路:DDL语法自动翻译在大规模数据同步中的实现原理
后端
Aurorar0rua1 小时前
CS50 x 2024 Notes Python - 01
开发语言·python·学习方法