I am new in Django REST framework. Can someone explain why I get such error, if I make a POST request to '/api/index/'
405 Method Not Allowed
{"detail":"Method \"POST\" not allowed."}
My code is following:
# 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',
)
}
But if I add <pk>
into my pattern, everything works fine:
# 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()),
]
I am completely confused. Why it's necessary to use <pk>
and is there a way to avoid the use of this parameter in the URL pattern?
Make sure that you have "POST" in
http_method_names
. Alternatively, you can write it like this:instead of this please
import from rest_framework import generics
and change it toThere are many generic views.
ListCreateAPIView
is used for GET and POST andCreateAPIView
is used only for POST methodsYou need to change just: