REST-фреймворк Django 3.11

В релизе 3.11 добавлена поддержка Django 3.0.

  • В настоящее время поддерживаемые нами версии Python составляют: 3.5, 3.6, 3.7 и 3.8.

  • В настоящее время поддерживаемые нами версии Django следующие: 1.11, 2.0, 2.1, 2.2 и 3.0.

Этот выпуск будет последним, поддерживающим Python 3.5 или Django 1.11.

Улучшения генерации схем OpenAPI

Генерация схем OpenAPI продолжает развиваться. Некоторые основные моменты в версии 3.11 включают:

  • Автоматическое отображение рендереров и парсеров Django REST Framework на медиа-типы запросов и ответов OpenAPI.

  • Улучшено отображение типов отображения схемы JSON, например, в HStoreFields, и с большими целочисленными значениями.

  • Перенос старого разбора докстрок CoreAPI для формирования описаний операций OpenAPI.

В этом примере описания операций представления для методов get и post будут извлечены из docstring класса:

class DocStringExampleListView(APIView):
"""
get: A description of my GET operation.
post: A description of my POST operation.
"""
    permission_classes = [permissions.IsAuthenticatedOrReadOnly]

    def get(self, request, *args, **kwargs):
        ...

    def post(self, request, *args, **kwargs):
        ...

Валидатор / Контекст по умолчанию

В некоторых обстоятельствах классу Validator или классу Default может потребоваться доступ к полю сериализатора, с которым он вызывается, или к .context, с которым сериализатор был инстанцирован. В частности:

  • Валидаторы уникальности должны быть способны определить имя поля, к которому они применяются, чтобы выполнить соответствующий запрос к базе данных.

  • CurrentUserDefault должен быть в состоянии определить контекст, с которым был инстанцирован сериализатор, чтобы вернуть текущий экземпляр пользователя.

Предыдущий наш подход к этому заключался в том, что реализации могли включать метод set_context, который вызывался перед проверкой. Однако этот подход имел проблемы с потенциальными условиями гонки. Сейчас мы перевели этот подход в состояние ожидающей депривации. Он продолжит функционировать, но будет переведен в состояние deprecated в версии 3.12 и полностью удален в версии 3.13.

Вместо этого, валидаторы или параметры по умолчанию, которые требуют контекст сериализатора, должны включать атрибут requires_context = True в класс.

Тогда метод __call__ должен включать дополнительный аргумент serializer_field.

Реализации валидаторов будут выглядеть следующим образом:

class CustomValidator:
    requires_context = True

    def __call__(self, value, serializer_field):
        ...

Реализация по умолчанию будет выглядеть следующим образом:

class CustomDefault:
    requires_context = True

    def __call__(self, serializer_field):
        ...

Финансирование

REST framework - это коллаборативно финансируемый проект. Если вы используете REST framework в коммерческих целях, мы настоятельно рекомендуем вам инвестировать в его дальнейшее развитие путем ** :doc:`signing up for a paid plan <funding>`** **.

Каждая регистрация помогает нам сделать REST framework долгосрочным и финансово устойчивым.

:raw-html-m2r:`<ul class=»premium-promo promo»>

<li><a href=»https://getsentry.com/welcome/» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/sentry130.png)»>Sentry</a></li> <li><a href=»https://getstream.io/try-the-api/?utm_source=drf&utm_medium=banner&utm_campaign=drf» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/stream-130.png)»>Stream</a></li> <li><a href=»https://software.esg-usa.com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/esg-new-logo.png)»>ESG</a></li> <li><a href=»https://rollbar.com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/rollbar2. png)»>Rollbar</a></li> <li><a href=»https://cadre.com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/cadre.png)»>Cadre</a></li> <li><a href=»https://hubs.ly/H0f30Lf0» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/kloudless-plus-text.png)»>Kloudless</a></li> <li><a href=»https://lightsonsoftware. com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/lightson-dark.png)»>Lights On Software</a></li> <li><a href=»https://retool.com/?utm_source=djangorest&utm_medium=sponsorship» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/retool-sidebar.png)»>Retool</a></li> <li><a href=»https://retool.com/?utm_source=djangorest&utm_medium=sponsorship» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/retool-sidebar.png)»>Retool</a></li>

</ul>`

Большое спасибо всем нашим :doc:`wonderful sponsors <https://fund.django-rest-framework.org/topics/funding/#our-sponsors>`*, и в особенности нашим премиум бэкерам, :doc:`Sentry <https://getsentry.com/welcome/>`**, `Stream <https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf>`_**, :doc:`ESG <https://software.esg-usa.com/>`**, `Rollbar <https://rollbar.com/?utm_source=django&utm_medium=sponsorship&utm_campaign=freetrial>`_**, :doc:`Cadre <https://cadre.com>`**, :doc:`Kloudless <https://hubs.ly/H0f30Lf0>`**, :doc:`Lights On Software <https://lightsonsoftware.com>`**, и `Retool <https://retool.com/?utm_source=djangorest&utm_medium=sponsorship>`_.*.

Вернуться на верх