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 |
Генерация схем и поддержка клиентов. |
Встроенная поддержка в |
Swagger / OpenAPI |
Генерация схем и поддержка клиентов. |
Пакет |
JSON Hyper-Schema |
В настоящее время только клиентская поддержка. |
Пакет |
API Blueprint |
Пока нет в наличии. |
Пока нет в наличии. |
Подробнее о всех этих новых функциональных возможностях вы можете прочитать ниже:
Новый раздел учебника по schemas & client libraries.
Страница документации по schema generation.
Страница темы на API clients.
Стоит также отметить, что Марк Гиббонс в настоящее время работает над выпуском 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.