[英]Returning either render_template, or jsonify from Flask as jQuery response
我正在嘗試創建一個登錄頁面,該頁面在輸入錯誤的用戶名或密碼后會在[正在運行]段落中顯示錯誤,或者,如果登錄成功[無法運行],則會將用戶重定向到儀表板。
登錄表單的HTML如下所示
<form id="login" action="/login" method="post">
<fieldset>
<legend>Login to the Metalworks</legend>
Username:<br>
<input type="text" name="username"><br>
Password:<br>
<input type="password" name="password"><br><br>
<input type="submit" value="Login">
</fieldset>
</form>
<br>
<p id="result" style="font-size:24px; font-weight:bold"></p>
然后我有一個JS腳本,在點擊“提交”按鈕后,該腳本將HTTP請求發送到我的網絡服務器
$(document).ready(function() {
$("#login").ajaxForm({
url: "/login",
dataType: "json",
success: loginResult
});
});
function loginResult(response)
{
result = document.getElementById("result");
if (!response.success)
{
result.style.color = "red";
result.innerHTML = response.error;
}
}
到目前為止,所有這些工作正常,我在Flask應用程序中獲得了用戶名和密碼,將其與數據庫中的帳戶進行了比較,如果發生錯誤,我將返回一個帶有錯誤的jsonify-ed對象,否則我想重定向到dashboard.html,這不起作用
@app.route("/")
def home():
return render_template("login.html", title="Metalworks Login");
@app.route("/login", methods = ["POST"])
def login():
if "username" not in request.form or len(request.form["username"]) == 0: return jsonify({"success":False, "error":"Username is not specified!"});
if "password" not in request.form or len(request.form["password"]) == 0: return jsonify({"success":False, "error":"Password is not specified!"});
username = request.form["username"];
password = request.form["password"];
cursor = accountsCollection.find({"username":username});
try:
account = cursor[0];
except:
return jsonify({"success":False, "error":"Could not find account {}!".format(username)});
if account["password"] != password:
return jsonify({"success":False, "error":"Incorrect password!"});
# this does nothing
return render_template("dashboard.html", title="Metalworks Dashboard");
1,關於成功登錄后如何正確重定向的任何想法?
2,處理會話,設置超時等的正確方法是什么?
1。
您可以使用redirect
將用戶重定向到其他路由。 例如:
from flask import Flask, render_template, request, redirect, jsonify
app = Flask(__name__)
@app.route("/")
def home():
return render_template("login.html", title="Metalworks Login")
@app.route("/dashboard")
def dashboard():
return render_template("dashboard.html", title="Metalworks Login")
@app.route("/login", methods = ["POST"])
def login():
if "username" not in request.form or len(request.form["username"]) == 0: return jsonify({"success":False, "error":"Username is not specified!"})
if "password" not in request.form or len(request.form["password"]) == 0: return jsonify({"success":False, "error":"Password is not specified!"})
username = request.form["username"]
password = request.form["password"]
account = {"username": "admin", "password": "admin"}
if account["username"] != username or account["password"] != password:
return jsonify({"success":False, "error":"Incorrect password!"})
return redirect("/dashboard")
app.run(debug=True)
dashboard.html
:
<h1>Dashboard</h1>
插入admin
作為用戶名和密碼后的輸出:
2。
我建議嘗試使用Flask-Login進行登錄,注銷和login_required功能。
來自官方文檔: 使用Flask-Login的登錄示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.