Как маршрутизаторы и представления настраивают свои URL-адреса?

Я читал длинный кусок кода. И застрял на том, как маршрутизаторы и вьюсеты автоматически настраивают свои 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


person Phoenix    schedule 05.02.2019    source источник


Ответы (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

person anjaneyulubatta505    schedule 05.02.2019