6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Django の POST 処理を呼び出したとき、URL の後ろにスラッシュつけ忘れたらリダイレクトされて 405 Client Error: METHOD NOT ALLOWED が返ってきた

Last updated at Posted at 2016-08-23

発生した問題

Django の POST 処理を呼び出したとき、URL の後ろにスラッシュつけ忘れたらリダイレクトされて 405 Client Error: METHOD NOT ALLOWED が返ってきた。

エラー内容

405 Client Error: METHOD NOT ALLOWED for url:
http://localhost:8000/confirm/api/
login/

###呼びもとプログラム

  • Django Rest Frameworkで開発したAPIを呼び出す。
# 呼出しAPI ドメイン
API_DOMAIN = "http://localhost:8000"

# アプリケーションパス
APP_PATH = "/confirm/api"

# ログイン用URL(URL終端のスラッシュが抜けている)
LOGIN_URL = API_DOMAIN+APP_PATH+"/login"

def login():
    """ログイン
    """
    s = requests.session()

    # 外から渡せるようにしたい
    payload = LOGIN_INFO
    headers = {"pragma": "no-cache", 'content-type': 'application/json'}
    r =  s.post(LOGIN_URL, data=json.dumps(payload), headers=headers)
    r.raise_for_status()
    return s

何故エラーになるか

Django の APPEND_SLASH という settings.py の設定が原因(デフォルト True)

リクエストのURLの後ろにスラッシュがない場合、設定された URLConfにリクエストURLがマッチしなかったら、スラッシュ付きのURLでリダイレクトする。

その際、最初にPOSTした時のデータが失われてしまう。そのためエラーが発生していた。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?