He estado estudiando los documentos del conjunto de vistas y el enrutador para Django y no puedo entender cómo configurar una ruta para acceder al método en un conjunto de vistas.
Por ejemplo, aquí está mi urls.py:
from rest_framework.routers import DefaultRouter from users.views import (UserViewSet, testing) router = DefaultRouter() router.register(r"users", UserViewSet, basename="users") urlpatterns = [ path('testing', testing) ]Y luego este es mi archivo de vistas en mi directorio de usuario
@csrf_exempt class UserViewSet: def create(self): return JsonResponse({ 'the create endpoint' }) @csrf_exempt def testing(request): return JsonResponse({ "title": "My json res" }) Usando cartero, puedo acceder al punto final example.com/testing y cerrar la sesión de la respuesta json. Sin embargo, trato de presionar example.com/users/create y obtengo un 404. Pensé que la propiedad del basename al registrar el conjunto de vistas con el enrutador agruparía todos los métodos dentro de esa clase en esa ruta de ruta y luego todos los métodos ser su propio punto final. ¿Estoy pensando en esto incorrectamente? Cualquier ayuda sería encantadora ya que soy nuevo en Django. Principalmente he hecho Express y Laravel. ¡Gracias!
No convirtió su enrutador en una lista de urlpatterns de URL, por lo que no podrá acceder a su conjunto de vistas de todos modos.
Para convertir el enrutador:
from rest_framework.routers import DefaultRouter from users.views import (UserViewSet, testing) router = DefaultRouter() router.register(r"users", UserViewSet, basename="users") urlpatterns = [ path('testing', testing), *router.urls, ] En Django Rest Framework , el método de create de un conjunto de vistas se ejecuta durante una solicitud POST a un uri en particular. En su caso, este uri sería /users .
Si desea agregar un método adicional que se active en /users/create , deberá usar el decorador de action :
from rest_framework import viewsets from rest_framework.response import JsonResponse class UserViewSet(viewsets.ViewSet): @action(methods=['GET'], url_path='create') def my_custom_action(self): return JsonResponse({ 'the create endpoint' }) Dado que create es un método reservado en los conjuntos de vistas DRF, deberá nombrar el método con otro nombre (en el ejemplo, my_custom_action ) y establecer el parámetro url_path consecuencia.
Si tuviera que omitir url_path , la ruta sería por defecto el nombre del método, por ejemplo. /users/my_custom_action .