Django REST框架中不允许405"方法POST"

Fom*_*aut 13 python django django-rest-framework

我是Django REST框架的新手.如果我向'/ api/index /'发出POST请求,有人可以解释为什么我会收到这样的错误

405 Method Not Allowed
{"detail":"Method \"POST\" not allowed."}
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

# views.py
class ApiIndexView(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, format=None):
        return Response("ok")

# urls.py
urlpatterns = [
    url(r'^api/index/$', views.ApiIndexView.as_view()),
]

# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.DjangoModelPermissions',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.TokenAuthentication',
    )
}
Run Code Online (Sandbox Code Playgroud)

但如果我添加<pk>到我的模式中,一切正常:

# views.py
class ApiIndexView(APIView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, pk, format=None):
        return Response("ok")

# urls.py
urlpatterns = [
    url(r'^api/index/(?P<pk>\d+)/$', views.ApiIndexView.as_view()),
]
Run Code Online (Sandbox Code Playgroud)

我完全糊涂了.为什么有必要使用<pk>并且有没有办法避免在URL模式中使用此参数?

Sur*_*ten 1

您只需更改:

# views.py
class ApiIndexView(UpdateView):
    permission_classes = (permissions.AllowAny,)

    def post(self, request, format=None):
        return Response("ok")
Run Code Online (Sandbox Code Playgroud)