【Django-ninja】使用schema

 在Django Ninja中,"schema"主要是指帮助描述和规范你的API的工具,以便系统能够自动生成文档并提供验证。通俗地说,它有两个主要作用:

  1. API文档生成器: Schema 让 Django Ninja 能够自动生成互动式的API文档。就像一个自动化的说明书,告诉开发者每个API端点是什么,它需要什么样的输入,返回什么样的输出。这样,开发者可以通过查看这份文档更容易地理解和测试API。

  2. 数据验证器: Schema 也用于验证API请求和响应中的数据。它规定了输入数据的格式和类型,以及API应该如何响应请求。这确保了API的数据是符合预期的,提高了系统的健壮性和可靠性。

总的来说,Django Ninja中的Schema就像一个帮你整理和规范API的工具,使得API的开发、使用和测试更加简单和清晰。

from ninja import NinjaAPI, Field, Schema


class AddIn(Schema):
    """推理请求输入."""
    query: str = Field(default="query")
    a: float = Field(title="参数a",
                     description="加法参数a",
                     gt=10)
    b: float = Field()


class AddResponse(Schema):
    data: dict
    code: int = Field(default=200)


class AddError(Schema):
    message: str


@api.post("/add", response={200: AddResponse, 403: AddError})
def add(request, req: AddIn):
    try:
        print(f"query: {req.query}")
        return 200, AddResponse(data=dict(result=req.a + req.b))
        # return 200, {"data": dict(result=req.a + req.b)} # 这样也是可以的。
    except:
        return 403, AddError(message="error")


@api.get("/get_add")
def get_add(request, req: AddIn = Query(...)):
    return {"data": req.a + req.b}

post方法的schema

这里如果用的是return 200, {"data": dict(result=req.a + req.b)}, 后面的字典会自动通过AddResponse类格式化处理,然后输出。

所以如果@api.post中指定了response为字典,需要注意返回值应该是一个tuple,第一值是key, 第二个值是可以通过相应的schema转化的字典数据。

get方法的schema

以下代码,我是这样理解的。所有get请求中的query参数,也就是/get_add?a=12&b=1这个请求路径中的a和b以及其他可能的参数,通通都会被Query类收集起来,然后Query类会被AddIn格式化,所以最终传递到函数体内到req是一个AddIn类型。(todo可能理解不对。我消化消化)

@api.get("/get_add")
def get_add(request, req: AddIn = Query(...)):
    return {"data": req.a + req.b}

### Django-Ninja Framework Usage and Documentation Django-Ninja 是一种轻量级框架,旨在简化基于 Django 的 API 开发过程。它通过引入类似于 FastAPI 的声明式风格来增强开发体验[^1]。以下是关于如何使用 Django-Ninja 框架的一些核心概念和功能: #### 安装与配置 要开始使用 Django-Ninja,首先需要安装该库。可以通过 pip 工具完成安装: ```bash pip install django-ninja ``` 接着,在项目的 `settings.py` 文件中注册应用并启用中间件支持: ```python INSTALLED_APPS += ["ninja"] ``` #### 创建第一个 API 定义路由和视图逻辑非常简单。只需继承 `ninja.API` 类即可创建一个新的 API 实例,并将其挂载到 URL 路由上。 下面是一个基本的例子: ```python from ninja import NinjaAPI api = NinjaAPI() @api.get("/hello") def hello_world(request): return {"message": "Hello, world!"} ``` 上述代码片段展示了如何设置一个返回 JSON 响应的基础端点。 #### 数据验证 Django-Ninja 提供内置的数据校验机制,允许开发者轻松处理请求参数以及复杂数据结构的解析工作。可以利用 Pydantic 模型来进行输入数据类型的强制约束。 例如: ```python from ninja import Schema class Item(Schema): name: str description: str = None price: float tax: float = None @api.post("/items/") def create_item(request, payload: Item): return {"item": payload.dict()} ``` 这里我们定义了一个名为 `Item` 的模式类用于接收 POST 请求中的 body 参数。 #### 高效集成 JWT 认证 对于安全性需求较高的场景,Django-Ninja 支持多种身份认证方式,其中包括流行的 JSON Web Token (JWT) 方案。这使得保护敏感资源变得更为便捷高效。 实现方法如下所示: ```python from ninja.security import HttpBearer class AuthBearer(HttpBearer): def authenticate(self, request, token): if token == 'supersecret': return token authenticator = AuthBearer() api = NinjaAPI(auth=authenticator) @api.get('/protected', auth=authenticator) def protected_route(request): return {'status': 'Authorized'} ``` 此部分演示了自定义授权器的设计思路及其实际运用案例。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值