当覆盖“perform_destroy”得到“detail”:“方法\“POST\”不允许。”

Posted

技术标签:

【中文标题】当覆盖“perform_destroy”得到“detail”:“方法\\“POST\\”不允许。”【英文标题】:When overriding "perform_destroy" getting "detail":"Method \"POST\" not allowed."当覆盖“perform_destroy”得到“detail”:“方法\“POST\”不允许。” 【发布时间】:2019-08-04 23:43:36 【问题描述】:

刚接触 Django 并尝试实现 REST api。 这是代码:

来自views.py

class reg_event(generics.CreateAPIView):
     queryset = event_registration_stub.objects.all()
     serializer_class = serializers.EventRegistrationStubSerializer

     def perform_create(self, serializer):
         serializer.save(parent_volunteer=self.request.user)


class reg_event_delete(generics.DestroyAPIView):
     queryset = event_registration_stub.objects.all()
     serializer_class = serializers.EventRegistrationStubSerializer

def perform_destroy(self, serializer):
    instance.delete(parent_volunteer=self.request.user, parent_event=self.kwargs["parent_event"])

这里是序列化器:

class  EventRegistrationStubSerializer(serializers.ModelSerializer):
      parent_volunteer = serializers.ReadOnlyField(source='parent_volunteer.id')
     class Meta:
         model = event_registration_stub
         fields = ('id', 'parent_event', 'parent_volunteer')

来自 urls.py

    url(r'^register_user_for_event/$', views.reg_event.as_view(), name='register_user_for_event'),
    url(r'^delete_user_for_event/$', views.reg_event_delete.as_view(), name='delete_user_for_event'),

为活动作品注册用户。但是如下:

   curl -X POST -d "parent_event=1" -H 'Authorization: Token 21cc749c43bf80f27598987cd5a9926d988ba64c' http://127.0.0.1:8000/api/delete_user_for_event/

返回

"POST /api/delete_user_for_event/ HTTP/1.1" 405 41

我尝试查看405 POST method not allowed

但我不确定我的网址有什么问题。我的执行破坏不正确吗?任何帮助,将不胜感激。

【问题讨论】:

【参考方案1】:

如果你想用 curl 发送destroy 请求,你应该使用:

curl -X DELETE ...

generics.DestroyAPIView 只有删除方法。这就是为什么您在发送 post 请求时收到 405 错误

【讨论】:

以上是关于当覆盖“perform_destroy”得到“detail”:“方法\“POST\”不允许。”的主要内容,如果未能解决你的问题,请参考以下文章

FPGA DE1-SoC Cyclone V 覆盖设备树

动态多维数组自行覆盖

不能用存储的属性“描述”覆盖

text 得到背景de una clase

javascript 得到背景de una clase

php 得到更加巧妙的Formulario de busqueda