如何路由到特定的视图集方法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"
})

使用poster,我可以访问端点example.com/testing并注销json响应。然而,我试着点击example.com/users/create,得到了404。我认为在向路由器注册视图集时,basename属性会将该类中的所有方法分组在该路由路径下,然后这些方法都将是它们自己的端点。我是不是想错了?任何帮助都将是可爱的,因为我是Django的新手。我大部分时间都做过《快报》和《拉拉威尔》。谢谢

您没有将路由器转换为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方法在对特定uri的POST请求期间执行。在您的情况下,这个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

相关内容

  • 没有找到相关文章

最新更新