python - “详细信息”:“方法\删除\不允许”django
问题描述
我制作了一个视图,可以使用模型视图集使用 put、delete 请求并将其映射到 url。我已经明确可以向 url 请求放置和删除请求,但是如果您向 url 发送删除请求,我会返回 405 错误。我的代码有什么问题?这是我的代码。
视图.py
class UpdateDeletePostView (ModelViewSet) :
serializer_class = PostSerializer
permission_classes = [IsAuthenticated, IsOwner]
queryset = Post.objects.all()
def update (self, request, *args, **kwargs) :
super().update(request, *args, **kwargs)
return Response({'success': '게시물이 수정 되었습니다.'}, status=200)
def destroy (self, request, *args, **kwargs) :
super().destroy(request, *args, **kwargs)
return Response({'success': '게시물이 삭제 되었습니다.'}, status=200)
提要\urls.py
path('post/<int:pk>', UpdateDeletePostView.as_view({'put': 'update', 'delete': 'destroy'})),
服务器\urls.py
path('feed/', include('feed.urls')),
和错误
"detail": "method \delete\ not allowed"
解决方案
正如我在评论中所写的那样,您似乎不需要 aViewSet
因为您只处理单个项目的操作。一般来说,您可以使用适当的 mixin 来限制 View 或 ViewSet 可用的操作。
我建议两种可能的方法
使用通用视图
class UpdateDeletePostView(
UpdateModelMixin,
DeleteModelMixin,
GenericAPIView):
.....
和
urlpatterns = [
path('post/<int:pk>', UpdateDeletePostView.as_view()),
...
]
使用 ViewSet 和路由器
class UpdateDeletePostViewSet(
UpdateModelMixin,
DeleteModelMixin,
GenericViewset):
.....
router = SimpleRouter()
router.register('feed', UpdateDeletePostViewSet)
urlpatterns = [
path('', include(router.urls)),
...
]
推荐阅读
- install4j - 运行下载的 install4j 更新而不进行调度
- angular - 在 Angular 的循环中订阅一个 observable
- java - 从 amazon s3 存储桶中删除文件时出错
- npm - 将客户端的文件与服务器同步 - Electron/node.js
- javascript - 焦点仅在我使用选项卡转到按钮时才有效,之后当我单击按钮时焦点不起作用
- ios - 滚动时在tableview Swift中的tableView时出现混蛋
- ruby-on-rails - Rails 4 应用程序显示对象,即使没有在 before_action 中调用 set_object
- php - PHP 响应消失
- python - pipenv 和 wheel/预编译包
- regex - 需要在 Apache FilesMatch 中进行字符转义