django 中不允许出现方法“PATCH”错误

问题描述 投票:0回答:1

我有 Django Rest 框架和泛型视图。每当我尝试发出 PATCH 请求时,都会收到一条错误消息,该方法不允许。

下面是我的views.py代码

class VisitorsLogBooktbViewSet(generics.ListCreateAPIView):
    queryset = VisitorsLogBooktb.objects.all()
    serializer_class = VisitorsLogBooktbSerializer

class Visitor_data(generics.RetrieveUpdateDestroyAPIView):
    queryset = models.VisitorsLogBooktb.objects.all()
    serializer_class = VisitorsLogBooktbSerializer

下面是我在应用程序根目录中的 urls.py 代码

urlpatterns = [
    path('', VisitorsLogBooktbViewSet.as_view(),),
    path('api/All-visitors/', Visitor_data.as_view(),),
]

我尝试通过仅使用 generics.UpdateAPIView 创建仅用于更新的视图来更改泛型视图......但它仍然不起作用。

django django-rest-framework django-generic-views
1个回答
0
投票

要允许 PATCH 更新请求,您需要确保您的 URL 模式已使用您尝试更新的对象的 ID 正确配置。

以下是修复 urls.py 的方法:

from django.urls import path
from .views import VisitorsLogBooktbViewSet, Visitor_data

urlpatterns = [
    path('', VisitorsLogBooktbViewSet.as_view(), name='visitors-log-book-list'),
    path('api/All-visitors/<int:pk>/', Visitor_data.as_view(), name='visitor-detail'),
]

在此更新版本中:

  1. 我已将
    <int:pk>
    添加到 Visitor_data 的 URL 模式中,这表明此视图适用于由其主键 (pk) 标识的单个对象。
  2. 通过在 URL 模式中包含
    <int:pk>
    ,Django REST Framework 将 PATCH 请求识别为对特定对象的更新。
  3. 现在,您应该能够向端点
    /api/All-visitors/<id>/
    发送 PATCH 请求以更新特定访客记录。确保将
    <id>
    替换为您要更新的访问者的实际主键。

这将在 URL 上给出 404

api/All-visitors/

要尝试的示例 URL 可以是

api/All-visitors/1

© www.soinside.com 2019 - 2024. All rights reserved.