Django Modern REST:面向 Django 的高性能现代化 API 框架
Django Modern REST(DMR)是专为 Django 打造的新一代 REST API 框架,在性能与灵活性上全面超越 Django REST Framework(DRF)和 django-ninja。其运行速度可达 FastAPI(不含数据库查询)的 70% 以上。DMR 原生支持 Pydantic v2、msgspec、attrs、dataclasses、TypedDict 和 NamedTuple 等多种序列化模型,提供完整的类型安全、符合 OpenAPI 3.1/3.2 标准的接口文档,以及开箱即用的同步/异步双模式支持。
核心特性
DMR 深度兼容 Django 生态:控制器继承自 Django 原生 View 类,所有标准 Django 插件均可无缝集成。内置内容协商(JSON/msgpack)、服务端事件(SSE)与 JSON Lines 流式响应,并在开发模式下强制执行响应结构校验。
- 极致性能:基准测试证实 DMR 是当前所有 Django 生态框架中最快的。
- 序列化自由:可在控制器粒度灵活选用序列化器,亦可按需复用 DRF 序列化器。
- 强类型保障:请求体与响应体均实现零妥协的完整类型推导与校验。
- OpenAPI 原生支持:自动生成符合 OpenAPI 3.1/3.2 规范的最新版接口文档。
- 开箱即测:深度集成 schemathesis、polyfactory 及专用 pytest 插件,支持属性驱动的自动化 API 测试。
基于类的控制器设计显著提升代码复用性与插件扩展能力。
最小可用应用示例
仅需 71 行代码即可构建一个功能完备的 API:
import secrets
import sys
import uuid
import pydantic
from django.conf import settings
from django.core.management import execute_from_command_line
from django.urls import include
from dmr import Body, Controller
from dmr.openapi import build_schema
from dmr.openapi.views import OpenAPIJsonView, SwaggerView
from dmr.plugins.pydantic import PydanticSerializer
from dmr.routing import Router, path
if not settings.configured:
settings.configure(
ROOT_URLCONF=__name__,
ALLOWED_HOSTS='*',
DEBUG=True,
INSTALLED_APPS=['dmr', 'django.contrib.staticfiles'],
STATIC_URL='/static/',
STATICFILES_FINDERS=[
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
],
TEMPLATES=[
{
'APP_DIRS': True,
'BACKEND': 'django.template.backends.django.DjangoTemplates',
},
],
SECRET_KEY=secrets.token_hex(),
)
class UserCreateModel(pydantic.BaseModel):
email: str
class UserResponseModel(UserCreateModel):
uid: uuid.UUID
class UserController(Controller[PydanticSerializer]):
async def post(
self,
parsed_body: Body[UserCreateModel],
) -> UserResponseModel:
return UserResponseModel(uid=uuid.uuid4(), email=parsed_body.email)
router = Router(
'api/',
[
path('user/', UserController.as_view(), name='users'),
],
)
schema = build_schema(router)
urlpatterns = [
path(router.prefix, include((router.urls, 'your_app'), namespace='api')),
path('docs/openapi.json/', OpenAPIJsonView.as_view(schema), name='openapi'),
path('docs/swagger/', SwaggerView.as_view(schema), name='swagger'),
]
if __name__ == '__main__':
execute_from_command_line(sys.argv)
执行 python file.py runserver 启动服务,Swagger 文档地址为 /docs/swagger/。
与竞品对比
DRF 存在请求/响应共用单一序列化器、意外暴露模型字段、类型支持薄弱等固有缺陷;django-ninja 采用函数式路由,强制绑定 Pydantic,且 OpenAPI 定制能力有限。
| 特性 | DRF | django-ninja | DMR |
|---------|-----|--------------|-----|
| 类型安全性 | 无 | 部分支持 | 全面支持 |
| 性能 | 较低 | 中等 | 高 |
| OpenAPI 支持 | 依赖第三方插件 | 功能受限 | 原生支持 OpenAPI 3.1/3.2 |
| 灵活性 | 低 | 中等 | 高 |
DMR 通过采纳现代架构范式(如 [wemake-django-template](https://github.com/wemake-services/wemake-django-template) 所倡导的实践),系统性解决了 Django 在 API 开发中的长期痛点。
现代 Python 与线程支持
随着 CPython 即将引入“自由线程”(freethreading),asyncio 的统治地位正逐步减弱。正如核心 Python 开发者所指出:
- Guido van Rossum:“标准库中的 asyncio 已冻结生态创新。”
- Mark Shannon:“虚拟线程在易用性上远超 async/await。”
- Armin Ronacher:“在具备真实线程能力的语言中,线程性能始终优于异步。”
与 FastAPI 不同,Django(及 DMR)天然支持同步与异步双范式,无需技术锁定。
开发者工具链
- 测试能力:schemathesis 实现属性驱动的 API 测试,覆盖约 90% 的端点;polyfactory 自动生成高度拟真的测试数据。
- AI 协作支持:预置开箱即用的大模型提示模板(
llms-full.txt)、Context7、DeepWiki 及迁移专项模板。 - 验证机制:开发环境强制执行严格 Schema 校验;生产环境支持按需配置校验级别。
该框架拥有完整中文文档、全量类型标注,且代码 100% 由人工编写,不含任何 AI 生成内容。
为什么选择 DMR?
- 性能逼近 FastAPI,同时保留 Django 全栈生态优势;
- 支持多序列化后端,杜绝厂商锁定;
- 类控制器设计,便于逻辑复用与插件生态建设;
- 原生支持 OpenAPI 3.1/3.2 并提供开发期强 Schema 校验;
- 内置健壮的属性驱动 API 测试工具链。
— Editorial Team
暂无评论。