gpt4 book ai didi

python - Flask/Werkzeug,登录后如何返回上一页

转载 作者:IT老高 更新时间:2023-10-28 20:33:21 27 4
gpt4 key购买 nike

我正在使用基于 Werkzeug 的 Flask 微框架,它使用 Python。

在每个受限页面之前都有一个装饰器来确保用户已登录,如果他们没有登录,当前会将他们返回到登录页面,如下所示:

# Decorator
def logged_in(f):
@wraps(f)
def decorated_function(*args, **kwargs):
try:
if not session['logged_in']:
flash('Please log in first...', 'error')
return redirect(url_for('login'))
else:
return f(*args, **kwargs)
except KeyError:
flash('Please log in first...', 'error')
return redirect(url_for('login'))
return decorated_function


# Login function
@app.route('/', methods=['GET', 'POST'])
def login():
"""Login page."""
if request.method=='POST':
### Checks database, etc. ###
return render_template('login.jinja2')


# Example 'restricted' page
@app.route('/download_file')
@logged_in
def download_file():
"""Function used to send files for download to user."""
fileid = request.args.get('id', 0)
### ... ###

登录后,它需要将用户返回到将他们带到登录页面的页面。它还需要保留诸如传递的变量之类的东西(即整个链接基本上是 www.example.com/download_file?id=3 )

有人知道怎么做吗?

感谢您的帮助:-)

最佳答案

我认为标准做法是将用户成功登录后需要重定向到的 URL 附加到登录 URL 的查询字符串的末尾。

你可以把你的装饰器改成这样(装饰器函数中的冗余也被删除了):

def logged_in(f):
@wraps(f)
def decorated_function(*args, **kwargs):
if session.get('logged_in') is not None:
return f(*args, **kwargs)
else:
flash('Please log in first...', 'error')
next_url = get_current_url() # However you do this in Flask
login_url = '%s?next=%s' % (url_for('login'), next_url)
return redirect(login_url)
return decorated_function

你必须用一些东西代替 get_current_url(),因为我不知道在 Flask 中是怎么做的。

然后,在您的登录处理程序中,当用户成功登录时,您检查请求中是否有 next 参数,如果有,则将它们重定向到该 URL。否则,您将它们重定向到某个默认 URL(我猜通常是 /)。

关于python - Flask/Werkzeug,登录后如何返回上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686465/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com