Роутинг ресурсов позволяет быстро объявлять все общие маршруты для заданного контроллера ресурса. Вместо объявления отдельных маршрутов... ресурсный маршрут объявляет их одной строчкой кода.— Документация Ruby on Rails
SimpleRouter
.register()
должен включать два обязательных аргумента:prefix
- префикс URL, использующийся с данным набором роутеров.viewset
- класс viewset.base_name
- основа для использования с URL именами. Елси аргумент не указан, то базовое имя будет автоматически сгенерировано на основе атрибута queryset из viewset, при наличии такого. Обратите внимание, что если viewset не включает атрибут queryset
, то вы должны использовать base_name
при регистрации viewset.^users/$
Name: 'user-list'
^users/{pk}/$
Name: 'user-detail'
^accounts/$
Name: 'account-list'
^accounts/{pk}/$
Name: 'account-detail'
base_name
используется для того, чтобы указать исходную часть паттерна имени представления. В примере выше это часть user
или account
.base_name
, но при наличии viewset, в котором вы кастомно определили метод get_queryset
, viewset может не иметь списка атрибутов .queryset
. Если вы попробуете зарегистрировать этот viewset, то увидите ошибку, наподобие этой.base_name
при регистрации viewset, так как он не может автоматически определяться исходя из имени модели.include
с маршрутизаторами.urls
экземпляра роутера всего навсего является стандартом списка URL паттернов. Существуют разные способы включения этих URL'ов.router.urls
к списку существующих представлений...include
Django, например...view_name
сериализаторов корректно отражает пространство имен. В примере выше вам потребовалось бы включить параметр view_name='api:user-detail
для полей сериализатора, которые связаны гиперссылкой с отдельными представлениями пользователя.@detail_route
или @list_route
также будут маршрутизированы. Например, при использовании данного метода на классе UserViewSet
:^users/{pk}/set_password/$
Имя: 'user-set-password'
url_path
для настройки.^users/{pk}/change-password/$
, то можете написать следующее:^users/{pk}/change-password/$
Имя: 'user-change-password'
url_name
для настройки.'user-change-password'
, то можете написать следующее:^users/{pk}/set_password/$
Имя: 'user-change-password'
url_path
и url_name
вместе, чтобы дополнительно контролировать генерирование URL для кастомных представлений.list
, create
, retrieve
, update
, partial_update
и destroy
. Viewset также может выделить дополнительные методы для маршрутизации, использя декораторы @detail_route
или @list_route
.SimpleRouter
замыкаются слешем. Это поведение можно изменить, поставив False
в настройке аргумента trailing_slash
при инициализации роутера. Например:lookup_value_regex
в viewset. Например, вы можете ограничить поиски валидными UUID:SimpleRouter
, который мы рассматривали выше, но помимо этого дополнительно включает корневое представление API, которое возвращает ответ, содержащий гиперссылки ко всем представлениям списка. Он также генерирует роутеры для опционального стиля в формате .json
.SimpleRouter
, закрывающие слеши путей URL можно удалить, установив значение False
в настройке trailing_slash
при инициализации роутера..routes
используется для шаблонизирования URL паттернов, которые будут отображаться для каждого viewset. Атрибут .routes
это список, который содержит именованные кортежи (namedtuple) Route
.Route
:{prefix}
- префикс URL, который будет использоваться с набором путей.{lookup}
- поле поиска, которое используется для сопоставления с единичным экземпляром.{trailing_slash}
- либо '/' или пустая строка, в зависимости от аргумента trailing_slash
.reverse
вызовах. Может включать следующую форматирующую строку:{basename}
- основа, которая используется с создающимися URL именами.suffix
зарезервирован для определения типа viewset и используется при создании имени представления и навигационных цепочек.@list_route
и @detail_route
. Чтобы маршрутизировать их внесите именованные кортежиDynamicListRoute
и/или DynamicDetailRoute
в списке .routes list.
.DynamicListRoute
и DynamicDetailRoute
:Route
и дополнительно принимает форматирующие строки {methodname}
и {methodnamehyphen}
.reverse
вызовах. Может включать следующие форматирующие строки: {basename}
, {methodname}
и {methodnamehyphen}
.list
и retrieve
и не использует закрывающие слеши.CustomReadOnlyRouter
сгенерирует для простого viewset..routes
см код источника класса SimpleRouter
.BaseRouter
и метод get_urls(self)
. Метод должен инспетировать зарегистрированные viewsets и вернуть список URL паттернов. К зарегистрированным кортежам базовых имен, префиксов и viewset можно получить доступ через атрибут self.registry
.get_default_base_name(self, viewset)
или же всегда явно прописывать аргумент base_name
при регистрации viewsets в роутере.ModelRouter
(и экземпляр singelton), который добавляет API register_model()
к DefaultRouter
. Как и в admin.site.register
, единственный обязательный аргумент для rest.router.register_model
это класс модели. Разумные значения по умолчанию для префикса URL, сериализатора и представлений будут получены из модели и глобальной конфигурации.