Flask的重定向(url_for('profile'))仅在Console上加载HTML,但实际上并不重定向

时间:2017-05-29 05:12:58

标签: 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 = []
        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)

1 个答案:

答案 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;
      }
   }

我遇到了同样的问题,这是我到达的解决方案。我认为它可以进行优化。