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

Релиз 3.2 - это первая версия, включающая интерфейс администратора для просматриваемого API.

The AdminRenderer

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

Мы также исправили огромное количество проблем, провели многочисленные чистки и улучшения.

За время работы над серией 3.1.x мы resolved nearly 600 tickets на нашем трекере проблем на GitHub. Это означает, что в настоящее время мы закрываем около 100 проблем или запросов на доработку в месяц.

Все это было бы невозможно без поддержки наших замечательных сторонников на Kickstarter. Если вы ищете работу в области разработки Django, мы настоятельно рекомендуем пройти по ссылке a look through our sponsors и узнать, кто нанимается на работу.

AdminRenderer

Чтобы включить AdminRenderer, просто добавьте его в настройки:

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': [
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.AdminRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer'
    ],
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 100
}

Есть некоторые ограничения в AdminRenderer , в частности, он пока не может обрабатывать списки или словари, так как у нас нет полей HTML формы, которые бы их поддерживали.

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

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

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

В этом выпуске прекращена поддержка Django 1.4.

Поддерживаемые нами версии Django теперь 1.5.6+, 1.6.3+, 1.7 и 1.8.

Амортизация

В версии 3.2 нет новых ухудшений, хотя ряд существующих ухудшений теперь обострился в соответствии с нашей политикой ухудшений.

  • request.DATA был переведен на путь устаревания в версии 3.0. Теперь он удален, и его использование приведет к ошибке. Вместо него используйте более питонический стиль request.data.

  • request.QUERY_PARAMS был переведен на путь устаревания в версии 3.0. Теперь он удален, и его использование приведет к ошибке. Вместо него используйте более питонический стиль request.query_params.

  • Следующие опции ModelSerializer.Meta теперь удалены: write_only_fields , view_name , lookup_field. Вместо них используйте более общую опцию extra_kwargs.

Следующие атрибуты и настройки представления пагинации были перенесены в атрибуты класса пагинации с версии 3.1. Их использование ранее находилось в категории «ожидающие устаревания», а теперь перешло в категорию «устаревшие». Они будут продолжать функционировать, но будут вызывать ошибки.

  • view.paginate_by - Вместо этого используйте paginator.page_size.

  • view.page_query_param - Вместо этого используйте paginator.page_query_param.

  • view.paginate_by_param - Вместо этого используйте paginator.page_size_query_param.

  • view.max_paginate_by - Вместо этого используйте paginator.max_page_size.

  • settings.PAGINATE_BY - Вместо этого используйте paginator.page_size.

  • settings.PAGINATE_BY_PARAM - Вместо этого используйте paginator.page_size_query_param.

  • settings.MAX_PAGINATE_BY - Вместо этого используйте paginator.max_page_size.

Модификации поведения в списке

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

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

Поля ManyToMany и blank=True

Теперь мы добавили аргумент allow_empty, который можно использовать с ListSerializer , или с many=True отношениями. По умолчанию он равен True, но может быть установлен в False, если вы хотите запретить использование пустых списков в качестве допустимого ввода.

В дополнение к этому мы теперь можем правильно отразить поведение Django ModelForm в отношении того, как проверяются поля «многие ко многим».

Ранее поле «многие ко многим» в модели отображалось на поле сериализатора, которое допускало ввод пустого или непустого списка. Теперь поле «многие ко многим» будет отображаться на поле сериализатора, которое требует как минимум одного входа, если только в поле модели не установлено значение blank=True.

Вот как выглядит отображение на практике:

  • models.ManyToManyField()serializers.PrimaryKeyRelatedField(many=True, allow_empty=False)

  • models.ManyToManyField(blank=True)serializers.PrimaryKeyRelatedField(many=True)

Итог таков: Если в ваших моделях много-много полей, то убедитесь, что вы включили аргумент blank=True, если вы хотите разрешить пустые вводы в эквивалентные поля ModelSerializer.

Поля списка и allow_null

При использовании allow_null с ListField или вложенным сериализатором many=True предыдущее поведение заключалось в разрешении значений null в качестве элементов списка. Теперь вместо списка будет разрешено null значений.

Например, возьмем следующее поле:

NestedSerializer(many=True, allow_null=True)

Ранее поведение при проверке было следующим:

  • [{…}, null, {…}] является действительным.

  • null является недействительным.

Начиная с версии 3.2.0 наше поведение при проверке выглядит следующим образом:

  • [{…}, null, {…}] является недействительным.

  • null является действительным.

Если вы хотите разрешить null дочерних элементов, вам нужно вместо этого указать allow_null на дочерний класс, используя явное ListField вместо many=True. Например:

ListField(child=NestedSerializer(allow_null=True))

Что дальше?

Выпуск 3.3 в настоящее время запланирован на начало октября, и это будет последний выпуск, финансируемый на Kickstarter.

В этот выпуск планируется включить:

  • Элементы управления поиском и фильтрацией в просматриваемом API и интерфейсе администратора.

  • Улучшения и публичный API для интерфейса администратора.

  • Улучшения и публичный API для наших шаблонизированных HTML форм и полей.

  • Поддержка вложенных объектов и списков в HTML-формах.

Еще раз спасибо всем нашим спонсорам и сторонникам.

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