如何路由到特定的视图集方法 Django
How to route to specific viewset methods Django
我一直在研究 Django 的视图集和路由器文档,但我不知道如何设置路由来访问视图集上的方法。
例如,这是我的 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)
]
然后这是我的用户目录中的视图文件
@csrf_exempt
class UserViewSet:
def create(self):
return JsonResponse({
'the create endpoint'
})
@csrf_exempt
def testing(request):
return JsonResponse({
"title": "My json res"
})
使用 postman,我可以访问端点示例。com/testing 并注销 json 响应。但是,我尝试点击 example.com/users/create 并得到 404。我认为 basename
属性 在向路由器注册视图集时会将所有方法分组 class 在该路由路径下,然后这些方法都将是它们自己的端点。我在想这个吗?任何帮助都会很可爱,因为我是 Django 的新手。我主要完成了 Express 和 Laravel。谢谢!
您没有将您的路由器转换为 urlpatterns
列表,因此无论如何您都无法访问您的视图集。
要转换路由器:
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,
]
在 Django Rest Framework 中,视图集的 create
方法在 [=14 期间执行=] 请求特定的 uri。在您的情况下,此 uri 将是 /users
.
如果您想添加一个在 /users/create
触发的额外方法,您将需要使用 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'
})
由于 create
是 DRF 视图集上的保留方法,您需要将方法命名为其他名称(在示例中为 my_custom_action
),并相应地设置 url_path
参数。
如果您要省略 url_path
,路径将默认为方法的名称,例如。 /users/my_custom_action
.
我一直在研究 Django 的视图集和路由器文档,但我不知道如何设置路由来访问视图集上的方法。
例如,这是我的 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)
]
然后这是我的用户目录中的视图文件
@csrf_exempt
class UserViewSet:
def create(self):
return JsonResponse({
'the create endpoint'
})
@csrf_exempt
def testing(request):
return JsonResponse({
"title": "My json res"
})
使用 postman,我可以访问端点示例。com/testing 并注销 json 响应。但是,我尝试点击 example.com/users/create 并得到 404。我认为 basename
属性 在向路由器注册视图集时会将所有方法分组 class 在该路由路径下,然后这些方法都将是它们自己的端点。我在想这个吗?任何帮助都会很可爱,因为我是 Django 的新手。我主要完成了 Express 和 Laravel。谢谢!
您没有将您的路由器转换为 urlpatterns
列表,因此无论如何您都无法访问您的视图集。
要转换路由器:
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,
]
在 Django Rest Framework 中,视图集的 create
方法在 [=14 期间执行=] 请求特定的 uri。在您的情况下,此 uri 将是 /users
.
如果您想添加一个在 /users/create
触发的额外方法,您将需要使用 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'
})
由于 create
是 DRF 视图集上的保留方法,您需要将方法命名为其他名称(在示例中为 my_custom_action
),并相应地设置 url_path
参数。
如果您要省略 url_path
,路径将默认为方法的名称,例如。 /users/my_custom_action
.