python - 如何路由到特定的视图集方法 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"
})
使用邮递员,我可以点击端点 example.com/testing 并注销 json 响应。但是,我尝试点击 example.com/users/create 并得到 404。我认为向basename
路由器注册视图集时的属性会将该类中的所有方法分组在该路由路径下,然后这些方法将全部是他们自己的端点。我想错了吗?任何帮助都会很可爱,因为我是 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
方法在POST
对特定 uri 的请求期间执行。在您的情况下,此 uri 将是/users
.
如果你想添加一个额外的触发 at 的方法/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
.
推荐阅读
- python - 如何摆脱没有找到这样的校园的停车场
- r - 可视化复用网络
- c++ - C++ 检查 unordered_set 中的属性值而不是整个对象
- ruby-on-rails - 在rails中对.json.jbuilder文件中的数据进行排序
- sql - 在运行时在 oracle 表中插入值
- python - 按多个属性分组对象
- java - 启动层初始化时出错
- arrays - 如何在 postgresSQL 中将一个嵌套数组转换为一个简单数组
- font-awesome - Font Awesome Pro 没有显示实体图标,只显示图标?
- oracle - oracle中“打开文件失败”的Https rest请求错误