在Flask中使用redirect()时,HTML将写入Console

时间:2018-03-27 05:19:24

标签: javascript python html flask

所以我一直在Flask工作并遇到一个恼人的问题。我正在创建一个网站,并使用重定向功能,网站不会切换页面。我没有尝试去的每个地方都可以通过重定向调用render_template()。这是我的代码(是的,hashed_pa​​ssword不是哈希,我可能会重定向到下一个,但这些是另一天的问题):

@app.route('/logIn',methods=['Get', 'Post'])
def logIn():
    _name = request.form['inputName']
    _password = request.form['inputPassword']
    # _hashed_password = bcrypt.hashpw(_password, bcrypt.gensalt( 12 ))
    _hashed_password = _password

    conn = mysql.connect()
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM tbl_user WHERE user_name = '" + _name + "'")

    user = cursor.fetchone()
    print(user[0])

    if len(user[2]) is not 0 and user[3] == _password:

        active_user = User(user[0])
        login_user(active_user)
        return (redirect(url_for('home')))
    else:

        return json.dumps({'message': 'Username or Password not correct'})


@app.route('/Home')
@login_required
def home():
    return render_template("home.html")

这一切都适用于html和js背景。 HTML没有任何代码,只包含要点击的按钮(尽管它可以帮助我发布html)。对于登录按钮,JS看起来像这样:

$(function() {
    $('#btnLogIn').click(function() {

        $.ajax({
            url: '/logIn',
            data: $('form').serialize(),
            type: 'POST',
            success: function(response) {
                console.log(response);
            },
            error: function(error) {
                console.log(error);
            }
    });
});

});

最后,输出会回显主页的html,我想在浏览器中呈现的那个(这是输出):

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Python Flask Bucket List App</title>
      <script src="static/js/jquery-3.3.1.min.js"></script>
      <script src="static/js/logout.js"></script>
  </head>

  <body>
   <form class="form-signout">
       <button id="btnLogOut" class="btn btn-lg btn-primary btn-block" type="button">Log Out</button>
   </form>
  </body>

</html>

我到处寻找。此外,在本地主机域之后添加/ Home调用与单击按钮后调用的GET相同的GET并成功加载页面。如果有人知道如何加载&#34; next&#34;网址,那会更好。

1 个答案:

答案 0 :(得分:0)

尝试在路由描述中使用尾部斜杠,因为在相反的情况下,Flask默认返回302重定向,不能由JS代码处理,因此请尝试使用:

@app.route('/login/',methods=['GET', 'POST'])

@app.route('/home/')

而不是

@app.route('/logIn',methods=['Get', 'Post'])

@app.route('/Home')

我怀疑这可能是问题的原因,但我没有测试过。

P.S。

1)不要使用这样的SQL查询:

cursor.execute("SELECT * FROM tbl_user WHERE user_name = '" + _name + "'")

由于可能的SQL注入漏洞。使用&#34;准备好&#34;代替值:

cursor.execute("SELECT * FROM tbl_user WHERE user_name = %s", [name])

2)不要以这种方式返回JSON:

return json.dumps({'message': 'Username or Password not correct'})

改为使用jsonify

from flask import jsonify

response = jsonify(message='Username or Password not correct')