所以我一直在Flask工作并遇到一个恼人的问题。我正在创建一个网站,并使用重定向功能,网站不会切换页面。我没有尝试去的每个地方都可以通过重定向调用render_template()。这是我的代码(是的,hashed_password不是哈希,我可能会重定向到下一个,但这些是另一天的问题):
@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;网址,那会更好。
答案 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')