Вы можете использовать строку запроса, чтобы сохранить информацию о файле без изменений в течение одного или двух кликов.Одна из приятных особенностей url_for
заключается в том, что он передает неизвестные параметры в виде строк запроса .Таким образом, не слишком сильно изменяя свою регистрационную страницу, вы можете сделать что-то вроде этого:
def login_required(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if g.user is None:
return redirect(url_for('register', wantsurl = request.path))
return f(*args, **kwargs)
return decorated_function
Здесь wantsurl
будет отслеживать URL-адрес, на который приземлился пользователь.Если незарегистрированный пользователь перейдет на /download/some/file.txt
, login_required
отправит вам на /register?wantsurl=%2Fdownload%2Fsome%2Ffile.txt
Затем вы добавите пару строк в вашу функцию регистрации:
@app.route('/register', methods=['GET', 'POST'])
def register():
if request.method == 'GET':
if 'wantsurl' in request.args:
qs = request.args['wantsurl']
return render_template('register.html', wantsurl=qs)
if request.method == 'POST':
if 'wantsurl' in request.form and everything_else_ok:
return redirect(request.form['wantsurl'])
Это автоматически перенаправит вас на загрузку при успешномрегистрация, при условии, что у вас есть что-то в форме с именем 'wanturl' со значением qs
, или вы можете отправить свою форму со строкой запроса;это может быть немного, если-иначе в шаблоне.