【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"}
相关推荐
Livingbody2 小时前
基于【ERNIE-4.5-VL-28B-A3B】模型的图片内容分析系统
后端
失败又激情的man3 小时前
python之requests库解析
开发语言·爬虫·python
打酱油的;3 小时前
爬虫-request处理get
爬虫·python·django
你的人类朋友3 小时前
🍃Kubernetes(k8s)核心概念一览
前端·后端·自动化运维
追逐时光者4 小时前
面试第一步,先准备一份简洁、优雅的简历模板!
后端·面试
慕木兮人可5 小时前
Docker部署MySQL镜像
spring boot·后端·mysql·docker·ecs服务器
发粪的屎壳郎5 小时前
ASP.NET Core 8 轻松配置Serilog日志
后端·asp.net·serilog
用什么都重名5 小时前
MinerU:高效智能PDF文档解析工具完全指南
人工智能·python·pdf·mineru·makedown
倔强青铜三6 小时前
苦练Python第4天:Python变量与数据类型入门
前端·后端·python
这我可不懂6 小时前
Python 项目快速部署到 Linux 服务器基础教程
linux·服务器·python