Flask 重定向到上一个页面

在项目中我们会遇到一些应用场景,在访问某个URL后重定向到上一个页面。比如我们在访问一个博客页面时,点击评论链接就直接重定向到登录页面,当用户登录后合理的行为是跳转到评论页面而不是主页面。如下示例:

def func_a():
    return "<h2>这是a页面</h2><a href='{}'>do_something</a>".format(url_for('do_something'))


@app.route('/b')
def func_b():
    return "<h2>这是b页面</h2><a href='{}'>do_something</a>".format(url_for('do_something'))


@app.route('/do-something')
def do_something():
    print('do things.....')
    return redirect(url_for('test'))

这里我们访问完这个视图后直接调到固定的test页面中,但是我们希望重定向到原来的页面:

1.获取上个页面的url

(1)HTTP.referrer
是一个用来记录请求发源地址的,即访问来源。
所以do_something可以返回:

 return redirect(request.referrer)

但是referrer字段在很多情况下是空值

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现这个功能,你可以在后端代码中对未登录用户进行拦截,并将其重定向到登录页面。具体方法可以使用中间件来实现,在 Flask 中,你可以使用 Flask-Login 插件提供的 login_required 装饰器来实现拦截未登录用户的功能。 以下是一个简单的 Flask-Login 实现方式: ```python from flask import redirect, url_for from flask_login import login_required @app.before_request @login_required def before_request(): pass ``` 在这个例子中,我们使用了 Flask 的 before_request 钩子函数,该函数会在每个请求到达应用程序之前被调用。同时,我们使用了 Flask-Login 插件提供的 login_required 装饰器,该装饰器会检查用户是否已经登录,如果未登录,则会将用户重定向到登录页面。 你需要在 Flask 中配置登录视图和登录路由,以便用户可以进行登录操作。在登录视图中,你需要设置用户的登录状态,例如: ```python from flask import render_template, request, redirect, url_for from flask_login import login_user from models import User @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] user = User.query.filter_by(username=username).first() if user is not None and user.verify_password(password): login_user(user) # 设置用户的登录状态 return redirect(url_for('index')) flash('Invalid username or password.') return render_template('login.html') ``` 在这个例子中,我们从表单中获取用户名和密码,然后使用查询语句从数据库中查找用户。如果用户存在且密码验证通过,我们使用 Flask-Login 提供的 login_user 函数设置用户的登录状态。 最后,你需要在 Flask 中配置登录页面视图和路由,例如: ```python from flask import render_template @app.route('/login') def login(): return render_template('login.html') ``` 在这个例子中,我们使用 Flask 提供的 render_template 函数来渲染登录页面模板。 这样,未登录用户访问管理系统的任何页面时,都会被重定向到登录页面,直到用户进行登录操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值