返回render_template或jsonify from Flask作为jQuery respons返回

2024-07-08 15:51:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图创建一个登录页面,在输入不正确的用户名或密码后,在[工作]段中显示错误,或者如果登录成功[不工作],则将用户重定向到仪表板。在

登录表单的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脚本,它在点击submit按钮后向我的web服务器发送一个HTTP请求

^{pr2}$

到目前为止,我在Flask应用程序中获得用户名和密码,在那里我将其与数据库中的帐户进行比较,如果发生错误,我将返回一个jsonify对象,否则我将重定向到仪表板.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、如何正确处理会话、设置超时等?在


Tags: brformfalsereturnrequestusernamenotlogin
1条回答
网友
1楼 · 发布于 2024-07-08 15:51:12

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

^{pr2}$

admin作为用户名和密码插入后的输出:

after login view

2.

我建议尝试使用Flask-Login登录、注销和登录所需的功能。在

来自官方文件:login-example using Flask-Login

相关问题 更多 >

    热门问题