Ректор МГТУ им. Баумана посоветовал не отдавать детей в IT
Ректор МГТУ им. Баумана Михаил Гордин советует не отдавать детей в IT, так как навык программирования не гарантирует долгую карьеру. Об этом он заявил в интервью «Ведомостям».

Новый релиз django-modern-rest@0.16.0
Репозиторий: https://github.com/wemake-services/django-modern-rest
Документация: https://django-modern-rest.rtfd.io
Описание релиза: https://github.com/wemake-services/django-modern-rest/releases/tag/0.16.0
Статья на хабре про суть django-modern-rest: https://habr.com/ru/articles/1017036
Мы выпустили новый релиз. В нем мы значительно ускорили работу фреймворка, улучшили OpenAPI генерацию, добавили фичей для создания переиспользуемого кода.
Скорость
PydanticFastSerializer.deserialize в x2.2 быстрее
PydanticFastSerializer.serialize в x1.33 быстрее
Новый BodyMsgspec компонент в x1.6 быстрее чем Body
Новый способ сериализации объектов через MsgspecSerializer и msgspec.Struct, gc=False в x2 раза быстрее
Content negotiation в x1.2 быстрее для точных заголовков
Content negotiation в x65 быстрее для сложных Accept заголовков
Дефолтные значения для компонентов
Теперь можно указывать дефолты для всех компонентов. Мы корректно отобразим их в OpenAPI спецификации:
class ProductController(Controller[MsgspecSerializer]):
def post(
self,
parsed_body: Body[ProductFilters | None] = None,
parsed_query: Query[Pagination] = DEFAULT_PAGINATION,
) -> dict[str, str | int]: ...
Готовые вьюхи для аутентификации
Например, чтобы получить Opaque Token по логину и паролю, достаточно всего лишь:
from dmr.security.token import concrete_views
path(
'auth/',
concrete_views.ObtainTokenSyncController.as_view(
serializer=PydanticFastSerializer,
),
)
Пагинация через курсор
Теперь мы поддерживаем два типа пагинации: LIMIT + OFFSET и cursor:
paginator = CursorPaginator(
Entry.objects.order_by('rank', 'name'),
per_page=parsed_query.limit,
)
page = paginator.page(parsed_query.cursor) # or: await paginator.apage(...)
return CursorPaginated(next_cursor=page.next_cursor, per_page=..., page=[...])
Extras
Создавайте свои контроллеры со своими настройками, мы добавили типизированное поле extras в @modify и @validate:
modify: Final = ModifyEndpoint(SmartResponse)
class APIController(Controller[PydanticFastSerializer]):
extras = SmartResponse()
@modify(extras=SmartResponse(response_text='from endpoint'))
def post(self) -> str:
return SmartResponse.of(self)
OpenAPI теперь умеет добавлять любые x- значения
Поддерживаем любые кастомные значения:
class UserController(Controller[MsgspecSerializer]):
x_extensions: ClassVar = {'x-owner': 'users-team'} # on the path item
@modify(x_extensions={'x-rate-limit': 100}) # on the operation
def post(self, parsed_body: Body[UserModel]) -> UserModel: ...
Поддержка library-skills
Установите наши скиллы одной командой:
uvx library-skills --claude # -> .agents/skills/dmr, .claude/skills/...
Делаем разработку с ИИ-агентами - проще!
Буду рад обратной связи в комментах! Какая фича ваша любимая? Чего вам не хватает для следующих релизов?

Ректор МГТУ им. Баумана Михаил Гордин советует не отдавать детей в IT, так как навык программирования не гарантирует долгую карьеру. Об этом он заявил в интервью «Ведомостям».
