ITADN
wemake-services/django-modern-rest
wemake-services/django-modern-rest · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Modern REST Logo - Light

支持类型和异步的 Django Modern REST 框架!

wemake.services Modern REST Tests Result Codecov No AI slop PyPI Downloads Supported Python Version Code Style Ask DeepWiki Telegram Chat

特性

  • 极速
  • 支持 django>=5.0
  • 支持 pydantic2msgspecattrsdataclassesTypedDict 作为模型模式,但不绑定于这些库中的任何一个
  • 支持异步 Django,内部无任何 sync_to_async 调用,已测试可在自由线程构建中正常工作
  • 完全类型化,并在严格模式下使用 mypypyrightpyrefly 进行检查
  • 支持内容协商,为 jsonmsgpack、SSE、Json Lines 等提供默认实现
  • 对请求和响应(包括错误)进行严格的模式验证
  • 开箱即用地支持 OpenAPI 3.1 / 3.2 语义模式生成
  • 支持所有现有的 django 原语和包,无需自定义运行时
  • 出色的测试工具,包括 schemathesispolyfactorytracecov、捆绑的 pytest 插件以及 Django 默认的测试原语
  • 100% 测试覆盖率,包含 2000+ 个精心设计的单元测试、集成测试和基于属性的测试
  • 安全标准
  • 社区构建 并服务于社区,并非单人项目
  • 出色的文档
  • 无 AI 垃圾内容,但 为 LLM 时代构建
  • 无表情符号 🌚️️

Benchmark - Light

同步模式

用户评价

我真正喜欢 django-modern-rest 的一点是它可插拔的 序列化器和验证器。与 pydantic 紧密耦合的框架 使用起来可能非常痛苦。

Kirill Podoprigora,CPython 核心开发者

使用 django-modern-rest 对我的生产力来说是一个改变游戏规则的因素。对请求和响应都有严格的类型安全和模式验证,意味着我花在调试上的时间更少,花在构建上的时间更多。

Josiah Kaviani,Django 核心开发者

我很少看到将 OpenAPI 模式视为一等公民的框架。django-modern-rest 不仅生成了准确反映你代码的模式,还为你提供了验证它的工具。

Dmitry Dygalo,Schemathesis 作者

安装

适用于:

  • CPython 3.11+ 或 PyPy 3.11+
  • Django 5.0+
pip install django-modern-rest

包含以下若干附加功能:

  • 'django-modern-rest[msgspec]' 提供 msgspec 支持 以及最快的 json 解析,建议始终包含
  • 'django-modern-rest[pydantic]' 提供 pydantic 支持
  • 'django-modern-rest[attrs]' 提供 attrs 支持
  • 'django-modern-rest[jwt]' 提供 pyjwt 认证支持
  • 'django-modern-rest[openapi]' 提供 OpenAPI schema validation, yaml OpenAPI 视图, 并使用 polyfactory 生成更好的 OpenAPI 示例

示例

最短的示例 (点击此处复制整个文件):

>>> import uuid
>>> import pydantic
>>> from dmr import Body, Controller, Headers
>>> # Or use `dmr.plugins.msgspec` or write your own!
>>> from dmr.plugins.pydantic import PydanticFastSerializer

>>> class UserCreateModel(pydantic.BaseModel):
...     email: str

>>> class UserModel(UserCreateModel):
...     uid: uuid.UUID
...     consumer: str

>>> class HeaderModel(pydantic.BaseModel):
...     consumer: str = pydantic.Field(alias='X-API-Consumer')

>>> class UserController(Controller[PydanticFastSerializer]):
...     async def post(  # <- can be sync as well!
...         self,
...         parsed_body: Body[UserCreateModel],
...         parsed_headers: Headers[HeaderModel],
...     ) -> UserModel:
...         """All added props have the correct runtime and static types."""
...         return UserModel(
...             uid=uuid.uuid4(),
...             email=parsed_body.email,
...             consumer=parsed_headers.consumer,
...         )

然后在你的 urls.py 中路由此控制器:

>>> from django.urls import include, path
>>> from dmr.routing import Router

>>> router = Router(
...     'api/',
...     [
...         path('user/', UserController.as_view(), name='users'),
...     ],
... )
>>> urlpatterns = [
...     path(router.prefix, include((router.urls, 'my_app'), namespace='api')),
... ]

完成!现在你拥有了一个拥有 100% 类型安全验证和交互式文档的闪亮 API。

下一步:

License

MIT

Credits

本项目使用 wemake-python-package 生成。当前模板版本为:e1fcf312d7f715323dcff0d376a40b7e3b47f9b7。查看自那以来的 更新