REST-фреймворк Django 3.12¶
REST framework 3.12 привносит несколько усовершенствований в генерацию схем OpenAPI, а также поддержку нового класса Django JSONField
, не зависящего от базы данных, и некоторые улучшения в классе SearchFilter
.
Группировка операций с помощью тегов.¶
Схемы Open API теперь будут автоматически включать теги, основываясь на первом элементе в пути URL.
Например…
Метод |
Путь |
Теги |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Теги, используемые для конкретного вида, также могут быть переопределены…
class MyOrders(APIView):
schema = AutoSchema(tags=['users', 'orders'])
...
Дополнительную информацию см. в разделе the schema documentation.
Настройка идентификатора операции.¶
Фреймворк REST автоматически определяет идентификаторы операций для использования в схемах OpenAPI. Последняя версия предоставляет больше возможностей для переопределения поведения, используемого для генерации идентификаторов операций.
Дополнительную информацию см. в разделе the schema documentation.
Поддержка компонентов OpenAPI.¶
Чтобы выводить более изящные схемы OpenAPI, REST framework 3.12 теперь определяет компоненты в схеме, а затем ссылается на них внутри объектов запроса и ответа. Это контрастирует с предыдущим подходом, который полностью расширял тела запроса и ответа для каждой операции.
Имена, используемые для компонента, по умолчанию используют имя класса сериализатора, but may be overridden if needed…
class MyOrders(APIView):
schema = AutoSchema(component_name="OrderDetails")
Больше публичных API¶
Многие методы класса AutoSchema
теперь переведены в разряд публичных API, что позволяет более полно настраивать генерацию схемы. Следующие методы теперь доступны для переопределения…
get_path_parameters
get_pagination_parameters
get_filter_parameters
get_request_body
get_responses
get_serializer
get_paginator
map_serializer
map_field
map_choice_field
map_field_validators
allows_filters
.
Подробнее об использовании пользовательских подклассов the schema docs см. в AutoSchema
.
Поддержка JSONField.¶
Django 3.1 отказался от существующего django.contrib.postgres.fields.JSONField
в пользу новой базы данных-агностики JSONField
.
REST framework 3.12 теперь поддерживает это новое поле модели, и классы ModelSerializer
будут правильно отображать поле модели.
Улучшения SearchFilter¶
В классе SearchFilter
есть несколько значительных улучшений.
Вложенный поиск в JSONField и HStoreField¶
Класс теперь поддерживает вложенный поиск в пределах JSONField
и HStoreField
, используя нотацию двойного подчеркивания для обхода элемента поля, к которому должен применяться поиск.
class SitesSearchView(generics.ListAPIView):
"""
An API view to return a list of archaeological sites, optionally filtered
by a search against the site name or location. (Location searches are
matched against the region and country names.)
"""
queryset = Sites.objects.all()
serializer_class = SitesSerializer
filter_backends = [filters.SearchFilter]
search_fields = ['site_name', 'location__region', 'location__country']
Поиск по полям аннотаций¶
Django позволяет кверисетам создавать дополнительные виртуальные поля, используя метод .annotate
. Теперь мы поддерживаем поиск по аннотированным полям.
class PublisherSearchView(generics.ListAPIView):
"""
Search for publishers, optionally filtering the search against the average
rating of all their books.
"""
queryset = Publisher.objects.annotate(avg_rating=Avg('book__rating'))
serializer_class = PublisherSerializer
filter_backends = [filters.SearchFilter]
search_fields = ['avg_rating']
Финансирование¶
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>`_.*.