【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"}
相关推荐
想摆烂的不会研究的研究生6 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
毕设源码-郭学长7 小时前
【开题答辩全过程】以 基于SpringBoot技术的美妆销售系统为例,包含答辩的问题和答案
java·spring boot·后端
梨落秋霜7 小时前
Python入门篇【文件处理】
android·java·python
Java 码农7 小时前
RabbitMQ集群部署方案及配置指南03
java·python·rabbitmq
追逐时光者7 小时前
精选 10 款 .NET 开源免费、功能强大的 Windows 效率软件
后端·.net
追逐时光者7 小时前
一款开源、免费的 WPF 自定义控件集
后端·.net
S***q3778 小时前
Spring Boot管理用户数据
java·spring boot·后端
毕设源码-郭学长8 小时前
【开题答辩全过程】以 基于SpringBoot框架的民俗文化交流与交易平台的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
张登杰踩8 小时前
VIA标注格式转Labelme标注格式
python
l***21789 小时前
SpringBoot Maven快速上手
spring boot·后端·maven