gpt4 book ai didi

python - 如何路由到特定的 View 集方法 Django

转载 作者:行者123 更新时间:2023-12-05 04:42:24 25 4
gpt4 key购买 nike

我一直在研究 Django 的 View 集和路由器文档,但我不知道如何设置路由来访问 View 集上的方法。

例如,这是我的 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)
]

然后这是我的用户目录中的 View 文件

@csrf_exempt
class UserViewSet:
def create(self):
return JsonResponse({
'the create endpoint'
})


@csrf_exempt
def testing(request):
return JsonResponse({
"title": "My json res"
})

使用 postman ,我可以访问端点 example.com/testing 并注销 json 响应。但是,我尝试点击 example.com/users/create 并得到 404。我认为在向路由器注册 View 集时的 basename 属性会将该类中的所有方法分组到该路由下路径,然后这些方法都将是它们自己的端点。我在想这个吗?任何帮助都会很可爱,因为我是 Django 的新手。我主要完成了 Express 和 Laravel。谢谢!

最佳答案

您没有将路由器转换成 urlpatterns列表,因此无论如何您都无法访问您的 View 集。

要转换路由器:

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 中, View 集的 create 方法在 POST 期间执行 请求特定的 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 View 集上的保留方法,您需要将该方法命名为其他名称(在示例中为 my_custom_action ),并设置 url_path 相应的参数。

如果您要省略 url_path ,路径将默认为方法的名称,例如。 /users/my_custom_action .

关于python - 如何路由到特定的 View 集方法 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69858780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com