【flask】登陆后返回之前重定向跳转的页面

登陆后返回之前重定向跳转的页面

一、前言

实现强制跳转到登陆页面,登陆后返回之前的页面的功能。网上跳登陆页面的很多;返回之前页面功能没多少。这里我只是用了自己的方法,有缺点和其他方法也请指点!(´ε`)

二、session

1、Session的概念

Session是存放在服务器端的,类似于Session结构来存放用户数据,当浏览器 第一次发送请求时,服务器自动生成了一个Session和一个Session ID用来唯一标识这个Session,并将其通过响应发送到浏览器。当浏览器第二次发送请求,会将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的Session。

2、flask操作session:

  1. 设置session:通过flask.session就可以操作session了。操作session就跟操作字典是一样的。session['username']='zhiliao'
  2. 获取session:也是类似字典,session.get(key)
  3. 删除session中的值:也是类似字典。可以有三种方式删除session中的值。
  • session.pop(key)
  • del session[key]
  • session.clear():删除session中所有的值。
  1. 设置session的有效期:如果没有设置session的有效期。那么默认就是浏览器关闭后过期。如果设置session.permanent=True,那么就会默认在31天后过期。如果不想在31天后过期,那么可以设置app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hour=2)在两个小时后过期

三、设计思路

1、流程

graph LR V(访问) --> A(选择图片页面) A --未登陆--> B(登陆页面) B --登陆成功--> A
graph LR V(访问) --> A(登陆页面) A --登陆成功--> B(主页)

2、程序

  • @选择图片的路由`
@user.route('/select_img/',methods=['GET'])
def select_img():
    res = session.get('username')
    if res == None: # 查到没有登陆
        session['redirect'] = request.path # 保存重定向前的路由
        return redirect(url_for('user.login')) # 跳转登陆
    # 省略其余逻辑
    return render_template('select_img.html') # 有登陆的话正常进入页面
  • @登陆的路由
@user.route('/login/',methods=['GET','POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        user = User.query.filter(User.name == username).first()
        if user and user.name == username and user.password == password:
            # 登陆成功
            session['username'] = user.name 
            res = session.get('redirect')
            if res: 
                return redirect(res) # 重定向前的路由
            return redirect('/') # 没有路由则跳转主页
    return render_template('page-login.html') #登陆页面

猜你喜欢

转载自www.cnblogs.com/yywBlogW/p/11409648.html