【问题标题】:"detail": "method \delete\ not allowed" django“详细信息”:“方法\删除\不允许”django
【发布时间】:2021-02-19 06:20:46
【问题描述】:

我创建了一个视图,可以使用模型视图集的 put、delete 请求并将其映射到 url。我已经明确可以向 url 请求放置和删除请求,但是如果您向 url 发送删除请求,我会返回 405 错误。我的代码有什么问题?这是我的代码。

views.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"

【问题讨论】:

  • 您好,我有一个问题:“为什么您使用ViewSet 来处理单个记录的操作”?
  • update 工作吗?
  • 您的完整网址是什么?您如何联系到DELETE /feed/post/&lt;int:pk&gt;/?
  • @HuLuViCa 没有更新也不起作用:(
  • @TomWojcik 我的整个网址是

标签: python django django-rest-framework


【解决方案1】:

正如我在评论中所写的那样,您似乎不需要ViewSet,因为您只处理单个项目的操作。 一般来说,您可以使用适当的 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)),
    ...
]

【讨论】:

  • 感谢您对我的代码提出建议 :) 但首先我想知道为什么我的代码不起作用。
  • 说实话,我从来没有使用过没有路由器的 ViewSet;所以我的猜测是配置 ViewSet 的“手动”方式是问题的根本原因。也许您可以尝试编写单元测试并调试代码
  • 不幸的是,其他手动映射 url 的视图集都正常工作:(
  • 你能写一个 UT 并查看整个堆栈跟踪吗??
猜你喜欢
  • 2021-07-01
  • 2018-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2017-04-26
相关资源
最近更新 更多