介绍
geekbing2024-02-06

Django Ninja 是一个用于构建 API 的现代、快速的 Web 框架,使用 Django 和 Python 3.6+ 并基于标准的 Python 类型提示。
关键特性:
- 简单:设计直观并易于使用。
- 快速:归功于 Pydantic 和 async support,性能非常高。
- 高效编码:类型提示和自动文档让你只需要关注业务逻辑。
- 标准化:基于 API 的相关开放标准: OpenAPI (以前被称为 Swagger) 和 JSON Schema。
- Django 友好:特别是和 Django 核心功能 及 ORM 很好的集成。
- 生产就绪:已有多家公司用于线上项目(如果你使用 Django Ninja 并希望提交你的反馈,请发送电子邮件至 ppr.vitaly@gmail.com)。
基准:

安装
pip install django-ninja
示例
启动一个新的 Django 项目(或使用已有项目)
django-admin startproject apidemo
在urls.py中
from django.contrib import admin
from django.urls import path
from ninja import NinjaAPI
api = NinjaAPI()
@api.get("/add")
def add(request, a: int, b: int):
return {"result": a + b}
urlpatterns = [
path("admin/", admin.site.urls),
path("api/", api.urls),
]
现在,像往常一样运行:
./manage.py runserver
注意:你不必将 Django Ninja 添加到已安装的应用程序中即可运行。
检查
打开你的浏览器访问 http://127.0.0.1:8000/api/add?a=1&b=2
你将会看到如下 JSON 响应:
{"result": 3}
现在你已经创建了一个具有以下功能的 API:
- 通过
/api/add路径接受 HTTP GET 请求 - 获取、验证和类型转换 GET 参数
a和b - 将结果解码为 JSON
- 为定义的操作生成 OpenAPI schem
交互式 API 文档
现在访问 http://127.0.0.1:8000/api/docs
你会看到自动生成的交互式 API 文档(由 OpenAPI / Swagger UI 或 Redoc 生成)

总结
总的来说,你就像声明函数的参数类型一样只声明了一次请求参数、请求体等类型。
你使用了标准的现代 Python 类型来完成声明。
你不需要去学习新的语法、了解特定库的方法或类,等等。
只需要使用标准的 Python 3.6 及更高版本。
举个例子,比如声明 int 类型:
a: int
或者一个更复杂的 Item模型:
class Item(Schema):
foo: str
bar: float
def operation(a: Item):
...
......在进行一次声明之后,你将获得:
- 编辑器支持,包括:
- 自动补全
- 类型检查
- 数据校验:
- 在校验失败时自动生成清晰的错误信息
- 对多层嵌套的 JSON 对象依然执行校验
- 转换 来自网络请求的输入数据为 Python 数据类型。包括以下数据:
- JSON
- 路径参数
- 查询参数
- Cookies
- 请求头
- 表单
- 文件
- 自动生成的交互式 API 文档
该项目深受 FastAPI(由 Sebastián Ramírez 开发)的启发






