介绍

geekbing2024-02-06

Django Ninja

Django Ninja 是一个用于构建 API 的现代、快速的 Web 框架,使用 Django 和 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

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

基准open in new window:

Django Ninja REST Framework

安装

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=2open in new window

你将会看到如下 JSON 响应:

{"result": 3}

现在你已经创建了一个具有以下功能的 API:

  • 通过/api/add路径接受 HTTP GET 请求
  • 获取、验证和类型转换 GET 参数ab
  • 将结果解码为 JSON
  • 为定义的操作生成 OpenAPI schem

交互式 API 文档

现在访问 http://127.0.0.1:8000/api/docsopen in new window

你会看到自动生成的交互式 API 文档(由 OpenAPI / Swagger UIopen in new windowRedocopen in new window 生成)

Swagger UI

总结

总的来说,你就像声明函数的参数类型一样只声明了一次请求参数、请求体等类型。

你使用了标准的现代 Python 类型来完成声明。

你不需要去学习新的语法、了解特定库的方法或类,等等。

只需要使用标准的 Python 3.6 及更高版本

举个例子,比如声明 int 类型:

a: int

或者一个更复杂的 Item模型:

class Item(Schema):
    foo: str
    bar: float

def operation(a: Item):
    ...

......在进行一次声明之后,你将获得:

  • 编辑器支持,包括:
    • 自动补全
    • 类型检查
  • 数据校验:
    • 在校验失败时自动生成清晰的错误信息
    • 对多层嵌套的 JSON 对象依然执行校验
  • 转换 来自网络请求的输入数据为 Python 数据类型。包括以下数据:
    • JSON
    • 路径参数
    • 查询参数
    • Cookies
    • 请求头
    • 表单
    • 文件
  • 自动生成的交互式 API 文档

该项目深受 FastAPIopen in new window(由 Sebastián Ramírezopen in new window 开发)的启发

上次更新 12/20/2025, 8:24:27 AM
What do you think?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
Comments
  • Latest
  • Oldest
  • Hottest
Powered by Waline v2.15.8