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

Релиз 3.7 сосредоточен на улучшении генерации схем и интерактивной документации API.

Этот выпуск стал возможен благодаря Bayer, которые выступили спонсорами выпуска.


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

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

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

<li><a href=»https://www.rover.com/careers/» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/rover_130x130.png)»>Rover.com</a></li> <li><a href=»https://sentry.io/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://machinalis.com/» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/Machinalis130.png)»>Machinalis</a></li> <li><a href=»https://rollbar.com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/rollbar.png)»>Rollbar</a></li> <li><a href=»https://rollbar.com» style=»background-image: url(https://fund-rest-framework.s3.amazonaws.com/rollbar.png)»>Rollbar</a></li>.

</ul>`

Как и наш спонсор выпуска, мы хотели бы поблагодарить наших премиум-бэкеров, :doc:`Rover <https://www.rover.com/careers/>`* , Sentry.*.


Настройка документации API и генерация схем.

Генерация схем, представленная в 3.5, и связанная с ней генерация API-документов в 3.6 - это очень мощные возможности, однако они были несколько ограничены в случаях, когда интроспекция представления не могла правильно определить схему для конкретного представления.

Чтобы попытаться решить эту проблему, мы добавляем возможность настраивать схему API для каждого представления. Интерфейс, который мы добавляем для этого, позволяет либо базовые ручные настройки того, какие поля должны быть включены в представление, либо более сложные программные настройки генерации схемы. Мы считаем, что этот релиз полностью устраняет некоторые из существующих недостатков функций схемы.

Давайте вкратце рассмотрим использование новой функциональности…

Класс APIView имеет атрибут schema, который используется для управления тем, как генерируется схема для этого конкретного представления. По умолчанию используется класс AutoSchema.

from rest_framework.views import APIView
from rest_framework.schemas import AutoSchema

class CustomView(APIView):
    schema = AutoSchema()  # Included for demonstration only. This is the default behavior.

Мы можем удалить представление из схемы API и документации, например, так:

class CustomView(APIView):
    schema = None

Если мы хотим в основном использовать поведение по умолчанию, но дополнительно включить некоторые дополнительные поля в конкретное представление, теперь мы можем легко это сделать…

class CustomView(APIView):
    schema = AutoSchema(manual_fields=[
        coreapi.Field('search', location='query')
    ])

Чтобы проигнорировать автоматическую генерацию для конкретного представления и вместо этого явно указать схему, мы используем класс ManualSchema

class CustomView(APIView):
    schema = ManualSchema(fields=[...])

Для более продвинутого поведения вы можете подкласс AutoSchema, чтобы обеспечить создание настраиваемой схемы и применить ее к определенным представлениям.

class CustomView(APIView):
    schema = CustomizedSchemaGeneration()

Для получения полной информации о новой функциональности, пожалуйста, обратитесь к Schema Documentation.


Поддержка Django 2.0

REST framework 3.7 поддерживает Django версий 1.10, 1.11 и 2.0 alpha.


Мелкие исправления и улучшения

В этом выпуске содержится большое количество мелких исправлений и улучшений. Полный список смотрите на странице release notes.

В настоящее время количество open tickets against the project находится на самом низком уровне за долгое время, и мы продолжаем фокусироваться на их сокращении до управляемого количества.


Амортизация

exclude_from_schema

И APIView.exclude_from_schema, и аргумент exclude_from_schema декоратора @api_view, и теперь PendingDeprecation. Они будут переведены в категорию deprecated в релизе 3.8 и полностью удалены в 3.9.

Для APIView следует вместо этого установить атрибут schema = None в классе представления.

Для представлений, основанных на функциях, декоратор @schema может быть использован для исключения представления из схемы, используя @schema(None).

DjangoFilterBackend

В версии 3.5 DjangoFilterBackend был переведен в категорию ожидающих устаревания, а в версии 3.6 - устарел. Теперь он был удален из основного фреймворка.

Функциональность остается полностью доступной, но вместо этого предоставляется в пакете django-filter.


Что дальше

Мы по-прежнему планируем работать над улучшением поддержки фреймворка REST в реальном времени, предоставляя документацию по интеграции с каналами Django, а также добавляя поддержку для более простого добавления поддержки WebSocket к существующим конечным точкам HTTP.

Вероятно, это будет приурочено к тому, чтобы любая разработка REST-фреймворка здесь была связана с аналогичной работой над API Star.

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