- Flask 教程
- Flask - 首頁
- Flask - 概述
- Flask - 環境
- Flask - 應用
- Flask - 路由
- Flask - 變數規則
- Flask - URL 構建
- Flask - HTTP 方法
- Flask - 模板
- Flask - 靜態檔案
- Flask - 請求物件
- 將表單資料傳送到模板
- Flask - Cookie
- Flask - 會話
- Flask – 重定向與錯誤
- Flask - 訊息閃現
- Flask - 檔案上傳
- Flask - 擴充套件
- Flask - 郵件
- Flask - WTF
- Flask - SQLite
- Flask - SQLAlchemy
- Flask - Sijax
- Flask - 部署
- Flask - FastCGI
- Flask 有用資源
- Flask - 快速指南
- Flask - 有用資源
- Flask - 討論
Flask – 重定向與錯誤
Flask 類有一個 **redirect()** 函式。呼叫時,它會返回一個響應物件,並將使用者重定向到另一個目標位置,並指定狀態碼。
**redirect()** 函式的原型如下所示:
Flask.redirect(location, statuscode, response)
在上述函式中:
**location** 引數是要將響應重定向到的 URL。
**statuscode** 傳送到瀏覽器的標頭,預設為 302。
**response** 引數用於例項化響應。
以下狀態程式碼是標準化的:
- 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**,表示 **“已找到”**。
在以下示例中,**redirect()** 函式用於在登入嘗試失敗時再次顯示登入頁面。
from flask import Flask, redirect, url_for, render_template, request
# Initialize the Flask application
app = Flask(__name__)
@app.route('/')
def index():
return render_template('log_in.html')
@app.route('/login',methods = ['POST', 'GET'])
def login():
if request.method == 'POST' and request.form['username'] == 'admin' :
return redirect(url_for('success'))
else:
return redirect(url_for('index'))
@app.route('/success')
def success():
return 'logged in successfully'
if __name__ == '__main__':
app.run(debug = True)
Flask 類具有 **abort()** 函式,並帶有一個錯誤程式碼。
Flask.abort(code)
**Code** 引數採用以下值之一:
**400** - 對於錯誤請求
**401** - 對於未經身份驗證
**403** - 對於禁止
**404** - 對於未找到
**406** - 對於不可接受
**415** - 對於不支援的媒體型別
**429** - 請求過多
讓我們在上述程式碼中的 **login()** 函式中稍微修改一下。如果要顯示“未授權”頁面,而不是重新顯示登入頁面,請將其替換為對 **abort(401)** 的呼叫。
from flask import Flask, redirect, url_for, render_template, request, abort
app = Flask(__name__)
@app.route('/')
def index():
return render_template('log_in.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)
廣告
