返回首页

Django Modern REST:快速 REST 框架

Django Modern REST — Django 上高性能 REST API 框架,具有完全类型化和 OpenAPI 3.1 支持。支持多种序列化器、sync/async 模式。适合中高级开发者。

🚀 Django 最快的 REST:Modern REST
Advertisement 728x90

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 测试。

基于类的控制器设计显著提升代码复用性与插件扩展能力。

Google AdInline article slot

最小可用应用示例

仅需 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 定制能力有限。

Google AdInline article slot

| 特性 | DRF | django-ninja | DMR |

|---------|-----|--------------|-----|

| 类型安全性 | 无 | 部分支持 | 全面支持 |

Google AdInline article slot

| 性能 | 较低 | 中等 | 高 |

| 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

Advertisement 728x90

继续阅读