Modern REST framework for Django with types and async support!
See the codeModern REST framework for Django with types and async support!
sync_to_async / async_to_sync calls inside, tested to work with free-threading buildspydantic2, msgspec, attrs, dataclasses, TypedDict as model schemas, but not bound to any of these librariesmypy, pyright, ty, and pyrefly in strict modesjson, msgpack, SSE, Json Lines, and moredjango primitives and packages, no custom runtimespytest plugin, and default Django's testing primitivesSync mode
The one thing I really love about django-modern-rest is its pluggable serializers and validators. Frameworks that are tightly coupled with pydantic can be really painful to work with.
— Kirill Podoprigora, CPython core developer
Using
django-modern-resthas been a game-changer for my productivity. The strict type safety and schema validation for both requests and responses mean I spend less time debugging and more time building.
— Josiah Kaviani, Django core developer
I rarely see frameworks that treat their OpenAPI schema as a first-class citizen.
django-modern-restnot only generates a schema that accurately reflects your code, but also gives you the tools to verify it.
— Dmitry Dygalo, author of Schemathesis
Works for:
pip install django-modern-rest
There are several included extras:
'django-modern-rest[msgspec]' provides msgspec support
and the fastest json parsing, recommended to be always included'django-modern-rest[pydantic]' provides pydantic support'django-modern-rest[attrs]' provides attrs support'django-modern-rest[jwt]' provides pyjwt auth support'django-modern-rest[openapi]' provides OpenAPI schema validation,
yaml OpenAPI view,
and generates better OpenAPI examples with polyfactoryThe shortest example (click here to copy the whole file):
>>> 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,
... )
And then route this controller in your urls.py:
>>> from django.urls import path
>>> from dmr.routing import Router
>>> router = Router(
... 'api/',
... [
... path('user/', UserController.as_view(), name='users'),
... ],
... )
>>> urlpatterns = [
... router.to_urlpatterns(namespace='api'),
... ]
Done! Now you have your shiny API with 100% type safe validation and interactive docs.
Next steps:
django-modern-rest!django-modern-rest!This project was generated with wemake-python-package. Current template version is: e1fcf312d7f715323dcff0d376a40b7e3b47f9b7. See what is updated since then.
76 followers · starred Apr 2026
42 followers · starred Mar 2026
123 followers · starred Mar 2026
115 followers · starred Jun 2026
Python
99.5%
Modern REST framework for Django with types and async support!
See the codeModern REST framework for Django with types and async support!
sync_to_async / async_to_sync calls inside, tested to work with free-threading buildspydantic2, msgspec, attrs, dataclasses, TypedDict as model schemas, but not bound to any of these librariesmypy, pyright, ty, and pyrefly in strict modesjson, msgpack, SSE, Json Lines, and moredjango primitives and packages, no custom runtimespytest plugin, and default Django's testing primitivesSync mode
The one thing I really love about django-modern-rest is its pluggable serializers and validators. Frameworks that are tightly coupled with pydantic can be really painful to work with.
— Kirill Podoprigora, CPython core developer
Using
django-modern-resthas been a game-changer for my productivity. The strict type safety and schema validation for both requests and responses mean I spend less time debugging and more time building.
— Josiah Kaviani, Django core developer
I rarely see frameworks that treat their OpenAPI schema as a first-class citizen.
django-modern-restnot only generates a schema that accurately reflects your code, but also gives you the tools to verify it.
— Dmitry Dygalo, author of Schemathesis
Works for:
pip install django-modern-rest
There are several included extras:
'django-modern-rest[msgspec]' provides msgspec support
and the fastest json parsing, recommended to be always included'django-modern-rest[pydantic]' provides pydantic support'django-modern-rest[attrs]' provides attrs support'django-modern-rest[jwt]' provides pyjwt auth support'django-modern-rest[openapi]' provides OpenAPI schema validation,
yaml OpenAPI view,
and generates better OpenAPI examples with polyfactoryThe shortest example (click here to copy the whole file):
>>> 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,
... )
And then route this controller in your urls.py:
>>> from django.urls import path
>>> from dmr.routing import Router
>>> router = Router(
... 'api/',
... [
... path('user/', UserController.as_view(), name='users'),
... ],
... )
>>> urlpatterns = [
... router.to_urlpatterns(namespace='api'),
... ]
Done! Now you have your shiny API with 100% type safe validation and interactive docs.
Next steps:
django-modern-rest!django-modern-rest!This project was generated with wemake-python-package. Current template version is: e1fcf312d7f715323dcff0d376a40b7e3b47f9b7. See what is updated since then.
76 followers · starred Apr 2026
42 followers · starred Mar 2026
123 followers · starred Mar 2026
115 followers · starred Jun 2026
Python
99.5%