我在Flask应用程序中使用JavaScript以透明的方式处理一些用户输入。我有以下路线来处理登录网站的用户:
@app.route('/login/', methods=['GET', 'POST'])
def login_page():
if request.method == 'GET':
return render_template('login.html')
elif request.method == 'POST':
user = []
user.append(float(request.form['orgid']))
passwd = generate_password_hash(request.form['passwd'])
user.append(passwd)
pw_hash = cursor.callfunc("IRUD.READ_PASSWORD_HASH", cx_Oracle.STRING, user)
if check_password_hash(pw_hash, request.form['passwd']):
session['userid'] = cursor.callfunc("IRUD.READ_USER_ID", cx_Oracle.NUMBER, [float(request.form['orgid'])])
return redirect(url_for('profile'))
else:
return redirect(url_for('login_error'))
在login.html中,用户填写一些信息以登录,并使用以下代码使用JavaScript处理:
$(document).ready(function(){
$('#btnLogin').click(loginUser);
});
function loginUser(){
var oData={};
oData.orgid=$('#matricula').val();
oData.passwd=$('#passwd').val();
$.ajax({
url: '/login/',
data: oData,
type: 'POST',
success: function(response){
console.log('Success - Login!');
console.log(response);
},
error: function(error){
console.log('Error - Login!');
console.log(error);
}
});
如果登录成功,我应该被重定向到由profile()方法处理的URL /配置文件。但是,此页面的HTML显示在我的Web浏览器控制台中,根本没有重定向。
我已经阅读了本网站上有关如何使用jQuery的一些帖子,但是,我还没有找到解决问题的答案。
成功登录后如何正确地将用户重定向到另一个网页?
我将感谢您提供的任何帮助。
更新
值得注意的是,如果我为更简单的return redirect(url_for('profile'))
更改return render_template('profile.html')
,HTML仍会在控制台中加载。
更新2
或者,我认为另一个选择是使用Flask处理所有这个页面,没有任何JavaScript控制器。我的Python代码现在看起来像这样:
@app.route('/login/', methods=['GET', 'POST'])
def login_page():
if request.method == 'GET':
return render_template('login.html')
elif request.method == 'POST':
user = []
user.append(float(request.form['orgid']))
passwd = generate_password_hash(request.form['passwd'])
user.append(passwd)
pw_hash = cursor.callfunc("IRUD.READ_PASSWORD_HASH", cx_Oracle.STRING, user)
if check_password_hash(pw_hash, request.form['passwd']):
session['userid'] = cursor.callfunc("IRUD.READ_USER_ID", cx_Oracle.NUMBER, [float(request.form['orgid'])])
return render_template('profile.html', name=session['userid'])
else:
return render_template('error.html')
但是,当我这样做时,我遇到以下错误:
POST http://127.0.0.1:5000/login/ 400 (BAD REQUEST)
答案 0 :(得分:0)
from flask import jsonify
if check_password_hash(pw_hash, request.form['passwd']):
return jsonify(dict(redirect='profile.html', name=session['userid']))
else:
return jsonify(dict(redirect='error.html'))
然后在你的Javascript文件中:
success: function(response) {
if (response.redirect){
window.location.href = response.redirect;
}
}
我遇到了同样的问题,这是我到达的解决方案。我认为它可以进行优化。