Возвращая либо render_template, либо jsonify из Flask в качестве ответа jQuery - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь создать страницу входа в систему, которая после ввода неверного имени пользователя или пароля отображает ошибку в пункте [работает], или перенаправляет пользователя на панель управления, если вход был успешным [не работает].

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 Ответ

0 голосов
/ 28 ноября 2018

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 в качестве имени пользователя и пароля:

after login view

2.

Я бы предложил попробовать Flask-Login для функций входа, выхода из системы и login_required.

Из официальной документации: пример входа в систему с использованием Flask-Login

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...