Как маршрутизаторы и viewsets конфигурируют свои URL?
Я читал длинный кусок кода. И застрял на том, как маршрутизаторы и viewsets автоматически настраивают свои URL. Например, файл views.py:
class UserViewSet(viewsets.ModelViewSet):
authentication_classes = (BasicAuthentication,SessionAuthentication)
permission_classes = (IsAuthenticated,)
serializer_class = UserSerializer
queryset = User.objects.all()
Соответствующие URL с маршрутизатором:
router = DefaultRouter()
router.register(r'users',views.UserViewSet,basename='user')
urlpatterns = router.urls
В приведенном выше случае, какие будут соответствующие URL-адреса для различных действий в наборах, то есть перечисления, создания, извлечения, обновления, частичного обновления и уничтожения, как указано в документации djangorestframework для наборов представлений: http://www.tomchristie.com/rest-framework-2-docs/api-guide/viewsets
1 ответ
Когда вы регистрируете набор, он генерирует следующие шаблоны URL для вышеуказанного случая.
router.register(prefix='users', viewset=views.UserViewSet, basename='user')
Это следует из следующих шаблонов регулярных выражений
# Regex for list
r'^{prefix}{trailing_slash}$'
# Regex for detail
r'^{prefix}/{lookup}{trailing_slash}$'
1. Список роутеров позволяет http
методы, такие как get
извлечь ресурс и post
создать ресурс.
2. Детальный маршрутизатор позволяет http
методы, такие как get
чтобы получить данные ресурса,put
обновить данные ресурса, patch
частичное обновление ресурса и delete
удалить ресурс.
Мы также можем передать дополнительный ключевой аргумент format
при использовании reverse
генерировать динамический URL.
Шаблоны URL для вышеуказанного случая
[<URLPattern '^users/$' [name='user-list']>,
<URLPattern '^users\.(?P<format>[a-z0-9]+)/?$' [name='user-list']>,
<URLPattern '^users/(?P<pk>[^/.]+)/$' [name='user-detail']>,
<URLPattern '^users/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$' [name='user-detail']>,
<URLPattern '^$' [name='api-root']>,
<URLPattern '^\.(?P<format>[a-z0-9]+)/?$' [name='api-root']>]
Ссылка: https://github.com/encode/django-rest-framework/blob/master/rest_framework/routers.py