web-dev-qa-db-ja.com

Django / DRF-405メソッドはDELETE操作では許可されていません

ローカルマシン(ノードとDjango)で2つの開発サーバーを使用しています。

私は追加しました - Django-cors-headers プロジェクトに対して、次の設定ですべてのオリジンとメソッド(開発時)を許可します:

CORS_Origin_ALLOW_ALL = 'ALL'
CORS_ALLOW_METHODS = (
        'GET',
        'POST',
        'PUT',
        'PATCH',
        'DELETE',
        'OPTIONS'
    )

DELETEを実行しようとすると405が発生します。応答ヘッダーを見る

HTTP/1.0 405 METHOD NOT ALLOWED
Date: Mon, 03 Nov 2014 10:04:43 GMT
Server: WSGIServer/0.1 Python/2.7.5
Vary: Cookie
X-Frame-Options: SAMEORIGIN
Content-Type: application/json
Access-Control-Allow-Origin: *
Allow: GET, POST, HEAD, OPTIONS

DELETEPATCH/PUTが許可されたメソッドリストに存在しないことに注意してください。

私の構成に何か足りないものはありますか?

15
haki

応答は非常によく似ていますリストビュー/api/resource/)ViewSetの場合。リストビューは、すべてのオブジェクトを一覧表示するためのGETと、新しいオブジェクトを作成するためのPOSTのみをサポートします。

DELETEリクエストは詳細ビュー/api/resource/1/)。これは、Django REST Frameworkは、削除しようとしているオブジェクトを認識する必要があり、この情報をリストビューだけから取得することはできないためです。

30
Kevin Brown

DRFでpkを使用せずにhttpメソッドDELETEをURLに接続する必要がある場合は、ModelViewSet内でこれを試してください。

@action(methods=['delete'], detail=False)
def delete(self, request):
    # your code

[〜#〜] upd [〜#〜]actionクラス内のModelViewSet属性はNoneの正当な要求になることに注意してください。どこかで確認する場合は、アクション名だけでなく、リクエストメソッドやリクエストパスも処理してください。

2
N.C.