我正在研究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方法?
由于
答案 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()),
]