如何在ModelViewSet中添加后缀url
序列化程序
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = '__all__'
def update(self, instance, validated_data):
...
...
模型视图集
我正在做一个自定义的部分更新
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
http_method_names = ['get', 'patch', 'head', 'options']
def partial_update(self, request, *args, **kwargs):
super(CommentViewSet, self).partial_update(
request, *args, **kwargs)
return Response({
"data": request.data,
...
...
})
网址
router = routers.DefaultRouter()
router.register(
"comments",
CommentViewSet
)
urlpatterns = [
path('api/v1/', include(router.urls))
]
目前有这个,但我想添加一个后缀
url:http://localhost:8000/api/v1/comments/{id}
我想做这样的事情
url:http://localhost:8000/api/v1/comments/{id}/update_or_whatever
您想要做的并不是遵循REST体系结构和流行实践。在REST中,每个端点表示一个资源。资源上的操作由HTTP方法表示。因此,如果您可以通过这个url
http://localhost:8000/api/v1/comments/
访问comments资源,那么您可以创建(POST)、获取列表端点上的列表(get)并编辑(PUT和PATCH)、获取单个注释(get)并使用detail端点删除(delete)。这样,您就不需要根据像http://localhost:8000/api/v1/comments/{id}/update
这样的操作显式地命名URL。这就是DRF所基于的体系结构,也是您拥有这种url样式的原因。当然,有些操作(如登录等)可能不适合此体系结构,这就是DRF提供自定义操作的原因。但是您不应该使用它来覆盖映射到HTTP方法的默认操作来自DFR的另一个魔力
https://www.django-rest-framework.org/api-guide/viewsets/#viewset-actions
只需在视图中更改所需内容并添加此动作装饰器
在您的视图中.py
相关问题 更多 >
编程相关推荐