フラスコのリダイレクトとエラー
Flaskクラスには、redirect()関数があります。呼び出されると、応答オブジェクトを返し、指定されたステータスコードでユーザーを別のターゲットの場所にリダイレクトします。
redirect()関数のプロトタイプは次のとおりです。
Flask.redirect(location, statuscode, response)
上記の関数では:
-
locationパラメーターは、応答のリダイレクト先のURLです。
-
ステータスコードはブラウザのヘッダーに送信されます。デフォルトは302です。
-
応答パラメーターは、応答をインスタンス化するために使用されます。
次のステータスコードが標準化されました。
- HTTP_300_MULTIPLE_CHOICES
- HTTP_301_MOVED_PERMANENTLY
- HTTP_302_FOUND
- HTTP_303_SEE_OTHER
- HTTP_304_NOT_MODIFIED
- HTTP_305_USE_PROXY
- HTTP_306_RESERVED
- HTTP_307_TEMPORARY_REDIRECT
デフォルトのステータスコードは302で、これは「found」を意味します。
Flaskクラスにはエラーコードのあるabort()関数があります
Flask.abort(code)
Codeパラメータは、次のいずれかの値を取ります。
-
400- 不正なリクエストの場合
-
401 認証されていない-for
-
403- 禁止
-
404 -not未満
-
406 示します受け入れるありません
-
415 サポートされていないメディアタイプの古本
-
429の -Too多くの要求
上記のコードのlogin()関数に少し変更を加えてみましょう。「未認証」ページを表示したい場合は、ログインページを再表示する代わりに、abort(401)の呼び出しに置き換えます。
Pythonファイルurl_redirect.pyを作成する
from flask import Flask, redirect, url_for, render_template, request, abort
app = Flask(__name__)
@app.route('/')
def index():
return render_template('login.html')
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST':
if request.form['username'] == 'admin' :
return redirect(url_for('success'))
else:
abort(401)
else:
return redirect(url_for('index'))
@app.route('/success')
def success():
return 'logged in successfully'
if __name__ == '__main__':
app.run(debug = True)
url_redirect.pyファイルと同じレベルのディレクトリに新しいtemplate / login.htmlを作成します
<html>
<body>
<form action = "http://localhost:5000/login" method = "post">
<p>Enter Name:</p>
<p><input type = "text" name = "username" /></p>
<p><input type = "submit" value = "submit" /></p>
</form>
</body>
</html>
Pythonファイルを実行し、ブラウザを開いてhttp://127.0.0.1:5000/にアクセスします。