javascript - Flask 的重定向(url_for ('profile' ))仅在控制台上加载 HTML,但实际上并不重定向

标签 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/profile。然而,该页面的 HTML 却出现在我的网络浏览器控制台中,根本没有重定向。

我已经在这个网站上阅读了一些关于它如何与使用 jQuery 相关的帖子,但是,我还没有找到解决我的问题的答案。

成功登录后如何正确地将用户重定向到另一个网页?

我将感谢您提供的任何帮助。

更新

值得注意的是,如果我将 return redirect(url_for('profile')) 更改为更简单的 return render_template('profile.html'),则 HTML仍然只是在控制台中加载。

更新2

或者,我认为另一种选择是仅使用 Flask 处理此页面的所有内容,而不使用任何 JavaScript Controller 。我的 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(错误请求)

最佳答案

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

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

关于javascript - Flask 的重定向(url_for ('profile' ))仅在控制台上加载 HTML,但实际上并不重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44234997/

相关文章:

javascript - 待办事项列表应用删除函数js

javascript - 如何以声明方式创建自定义 HTML 元素?

javascript - node js callback() 函数未定义?

python - Python 中的 AWS Lambda : Import parent package/directory in Lambda function handler

javascript - 如何通过express路径查找mongo数据并将数据打印到jade模板中

javascript - 使用 jquery 显示和隐藏输入

jquery - 函数的行为与硬编码的参数不同

javascript - 更改第一个输入 jquery 的值

python - 在开放式简历中接收NDI视频流

python - 如何处理南方(django)的重构?