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

Выпуск 3.4 является первым в запланированной серии, в которой будут рассмотрены вопросы генерации схем, поддержки гипермедиа, клиентов API и, наконец, поддержки реального времени.


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

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

Первоначальная цель - предоставить одну штатную позицию по REST-фреймворку. На данный момент мы достигли этой цели более чем на 60%. Каждая регистрация оказывает значительное влияние.

: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/?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>

</ul>`

Большое спасибо всем нашим :doc:`awesome sponsors <https://fund.django-rest-framework.org/topics/funding/#our-sponsors>`*, и в особенности нашим премиум бэкерам, :doc:`Rover <https://www.rover.com/careers/>`**, :doc:`Sentry <https://sentry.io/welcome/>`**, и `Stream <https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf>`_.*


Схемы и клиентские библиотеки

В REST framework 3.4 встроена поддержка генерации схем API.

Мы обеспечиваем эту поддержку, используя :doc:`Core API <https://www.coreapi.org/>`** , объектную модель документа для описания API.

Поскольку Core API представляет схему API независимым от формата образом, мы можем отображать объект Core API Document в различные форматы схем, позволяя классу рендерера определять, как внутреннее представление отображается на внешний формат схемы.

Этот подход также должен открыть дверь для ряда вариантов автоматически генерируемой документации API в будущем, путем преобразования объекта Document в страницы документации HTML.

Наряду со встроенной поддержкой схем, мы также предоставляем следующее:

  • command line tool для взаимодействия с API.

  • Python client library для взаимодействия с API.

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

Динамически управляемые клиенты позволяют взаимодействовать с API на уровне приложений, а не на сетевом уровне, при этом обеспечивая преимущества RESTful Web API.

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

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


В настоящее время форматы схем поддерживаются следующим образом:

Имя

Поддержка

Пакет PyPI

Core JSON

Генерация схем и поддержка клиентов.

Встроенная поддержка в coreapi.

Swagger / OpenAPI

Генерация схем и поддержка клиентов.

Пакет openapi-codec.

JSON Hyper-Schema

В настоящее время только клиентская поддержка.

Пакет hyperschema-codec.

API Blueprint

Пока нет в наличии.

Пока нет в наличии.


Подробнее о всех этих новых функциональных возможностях вы можете прочитать ниже:

Стоит также отметить, что Марк Гиббонс в настоящее время работает над выпуском 2.0 популярного пакета Django REST Swagger, который будет связан с нашей новой встроенной поддержкой.


Поддерживаемые версии

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

Теперь поддерживаются следующие версии Python и Django:

  • Django версий 1.8, 1.9 и 1.10.

  • Python версий 2.7, 3.2(*), 3.3(*), 3.4, 3.5.

(*) Обратите внимание, что Python 3.2 и 3.3 не поддерживаются начиная с Django 1.9.


Амортизация и изменения

Релиз 3.4 включает очень ограниченное количество устареваний и изменений в поведении, и должен представлять собой простое обновление.

Используйте поля или исключения в классах сериализаторов.

Следующее изменение в версии 3.3.0 теперь переведено из категории «ожидает обесценивания» в категорию «обесценено». Его использование будет продолжать работать, но будет вызывать предупреждения:

ModelSerializer и HyperlinkedModelSerializer должны включать либо опцию fields, либо опцию exclude. Ярлык fields = '__all__' может быть использован для явного включения всех полей.

Микросекундная точность при возврате времени или времени даты.

При использовании рендеринга JSON по умолчанию и прямом возврате экземпляра datetime или time теперь рендеринг будет производиться с точностью до микросекунды (6 цифр), а не до миллисекунды (3 цифры). Это делает формат вывода согласованным со строковым выводом по умолчанию serializers.DateTimeField и serializers.TimeField.

Это изменение не влияет на поведение по умолчанию при использовании сериализаторов* , которое заключается в сериализации datetime и time экземпляров в строки с микросекундной точностью.

При необходимости поведение сериализатора можно изменить, используя параметры DATETIME_FORMAT и TIME_FORMAT.

Поведение рендерера можно изменить, установив пользовательский атрибут encoder_class в подклассе JSONRenderer.

Реляционный выбор больше не отображается в запросах OPTIONS.

При выполнении запроса OPTIONS к представлениям, имеющим поле выбора сериализатора, в ответ будет возвращен список доступных вариантов.

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

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

Если вы хотите отменить это новое поведение, вам нужно implement a custom metadata class.

См. issue #3751 для получения дополнительной информации об этом изменении поведения.


Другие улучшения

Этот выпуск включает в себя дальнейшую работу огромного количества pull requests and issues.

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

Полный набор детализированных примечаний к выпуску are available here.

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