Javascript 烧瓶';s重定向(url#u for(';profile';)只在控制台上加载HTML,但实际上不重定向
我在Flask应用程序中使用JavaScript以透明的方式处理一些用户输入。我通过以下途径处理登录网站的用户:Javascript 烧瓶';s重定向(url#u for(';profile';)只在控制台上加载HTML,但实际上不重定向,javascript,jquery,python,redirect,flask,Javascript,Jquery,Python,Redirect,Flask,我在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 = [
@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如何使用的帖子,但是,我还没有找到解决我问题的答案
成功登录后,如何正确地将用户重定向到另一个网页
我将感谢你所能提供的任何帮助
更新
值得注意的是,如果我将返回重定向(url\u for('profile'))
更改为更简单的返回呈现模板('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')
但是,在执行此操作时,我遇到以下错误:
POSThttp://127.0.0.1:5000/login/ 400(错误请求)
然后在Javascript文件中:
success: function(response) {
if (response.redirect){
window.location.href = response.redirect;
}
}
我也遇到了同样的问题,这就是我找到的解决办法。但我认为它可以优化。当您收到
400(错误请求)
时,flask是否在控制台上记录任何错误?如果没有,请尝试在调试模式下运行,方法是设置app.debug=True其中app是您的Flask对象。@PrahladYeri,我有debug=True,但我没有获得任何其他详细信息。然而,我刚刚检查过:这与Flask如何使用name
属性有关,而JavaScript使用id
获取HTML元素的值。当然,这就是为什么必须在HTML输入标记中同时设置name='matricula'
和id='matricula'
(这样JavaScript和后端Flask应用程序都可以对其进行解密。您确定要这样做吗?另外,请确保对float(request.form['orgid']
等值运行打印语句,以便您知道后端实际得到了什么。
success: function(response) {
if (response.redirect){
window.location.href = response.redirect;
}
}