2016-03-15 72 views
10

Django RESTフレームワークの新機能です。誰かが私が405 Django RESTフレームワークの "Method POSTは許可されていません"

405 Method Not Allowed 
{"detail":"Method \"POST\" not allowed."} 

私のコードは次のようさに「/ API /インデックス/」POSTリクエストを行う場合、私は、このようなエラーを取得する理由を説明することができます:

# 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', 
    ) 
} 

しかし、私は私のパターンに<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()), 
] 

私は完全に混乱しています。 <pk>を使用する必要があるのはなぜですか。また、このパラメータをURLパターンで使用しないようにする方法はありますか?

+1

Strange。投稿したコードは私のために働いています。これは完全なコードですか? – ilse2005

+0

正確ではないが、私は重要な部分を見つけた。私が間違っている可能性のある考え? – Fomalhaut

+2

さて、私はあなたの質問からコードをコピーし、それは動作します。他にもいくつかの問題があります。どのDRFバージョンを使用していますか? – ilse2005

答えて

1

はあなただけ変更する必要があります。

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

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

あなたは"POST" http_method_namesを持っていることを確認します。または、次のように書くことができます。

def allowed_methods(self): 
    """ 
    Return the list of allowed HTTP methods, uppercased. 
    """ 
    self.http_method_names.append("post") 
    return [method.upper() for method in self.http_method_names 
      if hasattr(self, method)] 
関連する問題