我真的需要帮助解释为什么我将方法作为 DELETE 传递,但错误出现“不允许方法“GET”。”非常感谢。
class DeleteUserByUsernameView(APIView):
def delete(self, request, username):
try:
instance = User.objects.filter(username=username)
instance.delete()
return HttpResponse("Success")
except Exception as e:
return Response({'error': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('delete/user/<str:username>/', views.DeleteUserByUsernameView.as_view()),
path('register/', views.RegisterView.as_view(), name="Register"),
path('login/', views.LoginView.as_view(), name="Login"),
]
您的路径有一个尾部斜杠:
# trailing slash 🖟
delete/user/<str:username>/
这意味着您需要在 Postman 中工作:
# 🖟
/delete/user/quyhoang/
APPEND_SLASH
设置设置为True
(这是默认值),如果没有尾部斜杠,并且没有路径匹配,Django将自动返回重定向(HTTP 响应 301)到路径 with 斜杠,因此 Postman 向该路径发出 GET 请求。
但解决方案是从头开始向路径with发出删除请求。由于重定向始终作为 GET 请求处理,因此它本质上“剥离”了原始 HTTP 方法。g