我有这个代码 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/