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>`_.*.