python - 使用 flask.redirect 时 Flask 302 错误代码

标签 python flask

我有这个代码 https://github.com/italomaia/flask-empty/blob/master/src/0.8/main.py我在文件末尾写道:

def configure_before_request(app):
    @app.before_request
    def before_request():
        hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10)
        if session.get('logged_in') != hash:
            return redirect(url_for('login'))
def configure_views(app):
    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'POST':
            hash = pbkdf2_sha256.encrypt(app.config['PASSWORD'], rounds=8000, salt_size=10)
            if request.form['login'] == app.config['USERNAME'] and pbkdf2_sha256.verify(request.form['password'], hash):
                session['logged_in'] = hash
                return redirect(url_for('index'))
            else:
                flash(u'Неверный логин или пароль')
        return render_template('login.html')

    @app.route('/', methods=['GET', 'POST'])
    def index():
        return 'index_page НАХ.'

如果我运行这段代码,我会收到 302 服务器错误 (ERR_TOO_MANY_REDIRECTS),但如果我更改此行 return redirect(url_for('login')) return 'Hello!' 它工作正常!我做错了什么?

最佳答案

好吧,我不是 flask 方面的专家。但很明显,您在请求映射到处理程序之前使用信号来检查凭据,然后重定向到处理程序。但是重定向又会触发对您的应用程序的另一个请求并再次调用相同的功能,从而使您进入无限的重定向循环。 (错误 302 是针对这种情况的特定 http 错误)

我的建议:在每个处理函数的基础上检查凭据,或者至少对您的 before_request 函数做一个异常(exception),当请求“login/” 时它不会被调用。 p>

可能也可以直接调用处理login/

的函数

关于python - 使用 flask.redirect 时 Flask 302 错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15175965/

相关文章:

Python tkinter - 成功从顶层继承

python - 如何使用 lxml 仅检索可见节点文本

python - 如何设置 SQLALCHEMY_DATABASE_URI?

javascript - "dependent drop down list"不起作用 [Google App Engine 上的 Flask]

python - Flask - 无法获取 cookie

python - 保存上传的 Base64 数据会出现 TypeError : a bytes-like object is required, 而不是 'str'

python - 强制 python 使用旧版本的模块(比我现在安装的)

python - 如何使用Python防止SQLite3中的多个条目(重复)

python - 计算元组列表中第 i 个元素的平均值

python - 如何使用 Flask 将字典内容显示到网页中