Django Rest Framework APIView没有删除并允许放置

时间:2015-06-04 14:33:24

标签: django django-rest-framework

我正在研究django rest框架的网站上的教程。当我对服务器进行PUT或DELETE调用时,不允许使用特定方法。这是我的观点:

SELECT ID, NAME, LAST_NAME FROM b_user WHERE NAME LIKE '%$search_keyword%' OR LAST_NAME LIKE '%$search_keyword%'

我使用了以下urls.py

Class SnippetDetailView(APIView):
    def put(self, request, pk, format=None):        
        snippet = self.get_object(pk)
        serializer = SnippetSerializer(snippet, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def delete(self, request, pk, format=None):
        snippet = self.get_object(pk)
        snippet.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)

我的回复标题显示以下内容:

urlpatterns = [
    url(r'^snippets/', SnippetListView.as_view()),
    url(r'^snippets/(?P<pk>[0-9]+)/$', SnippetDetailView.as_view()),
]

我没有任何限制。我错过了哪些不允许使用PUT和DELETE方法?

由于

2 个答案:

答案 0 :(得分:3)

对于那些仍在努力解决这个问题的人。经过几个小时的来回移动,我找到了解决方案。问题与网址有关。旧的urlpatterns

urlpatterns = [
url(r'^snippets/', SnippetListView.as_view()),
url(r'^snippets/(?P<pk>[0-9]+)/$', SnippetDetailView.as_view()),
]

工作网址:

urlpatterns = [
url(r'^snippets/$', SnippetListView.as_view()),
url(r'^snippets/(?P<pk>[0-9]+)$', SnippetDetailView.as_view()),
]

差异很小,但问题与旧版本中用于触发SnippetDetailView的尾部斜杠有关。

希望它有所帮助!

答案 1 :(得分:0)

在Django 2. *中:

urlpatterns = [
    path('snippets/(?P<pk>[0-9]+)', SnippetDetailView.as_view()),
]