我一直在使用Flask 開發Web 界面,并且瀏覽器中的后退按鈕出現了一些問題,因為在注銷后點擊它會將用戶帶回內部。我發現了類似的問題并嘗試了他們的答案,但問題沒有解決。我附上一個簡單的例子,請看一下。
主要的
from flask import Flask, request,session, redirect, url_for, render_template
from os import urandom
app = Flask(__name__)
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
app.secret_key = urandom(24)
@app.route('/', methods=['POST', 'GET'])
def index():
if request.method == 'POST':
session['Email id'] = request.form.get('Email Id')
Pass = request.form.get('Password')
try:
if session['Email id'] == '[email protected]' and Pass == 'KKK':
return render_template('Logged_in.html')
except:
return render_template('login.html')
return render_template('login.html')
@app.route('/sign_out')
def sign_out():
session.pop('Email id')
return redirect(url_for('index'))
@app.after_request
def add_header(r):
r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate"
r.headers["Pragma"] = "no-cache"
r.headers["Expires"] = "0"
r.headers['Cache-Control'] = 'public, max-age=0'
return r
if __name__ == '__main__':
app.run(host="0.0.0.0", debug=True, threaded=True)
登錄.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="{{ url_for('index') }}" method="POST" id="login" class="input-group">
<input type="text" class="input-field" placeholder="Email Id" required name="Email Id">
<input type="text" class="input-field" placeholder="Password" required name="Password">
<button type="submit" class="submit-btn" style="color: white;">Log in</button>
</form>
</body>
</html>
Logged_in.html
<h2>You are Logged in</h2>
<a href="/sign_out"><i class="fas fa-sign-out-alt"></i>Log out</a>
uj5u.com熱心網友回復:
您的問題是,當用戶按下后退按鈕時,他們的瀏覽器將重新執行 POST 請求。您需要使用POST/redirect/GET模式來防止這種情況。為此,您總共需要四個端點:
GET /: 檢查用戶登錄并呈現的會話Logged_in.html,否則重定向到/login.htmlGET /login.html: 使成為login.htmlPOST /sign_in: 檢查用戶名和密碼。如果成功,更新會話并重定向到/POST /sign_out:注銷用戶會話并重定向到/login.html
不要在 POST 端點中呈現模板,只需讓它們操作會話然后重定向即可。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/388398.html
上一篇:在C#中檢查ifthen的空值
