Flask框架 - 05 Session实现登录验证

Flask之Session实现登录验证

功能描述

使用session实现用户的模拟登陆功能: 在用户第一次访问服务端的时候,在服务端的redis中会创建一个session值,在客户端浏览器的cookies中也会创建一个session的值。该cookies中的session值和redis中的session值是一样的,那么在往后的访问操作中,请求request都会传递给后端,后端在获取到request的时候,其实就是获取到了request.cookies中的session的值了,那么就可以做登录的校验了。校验功能如下:

1. 前端login.html页面

登录页面就两个输入框,分别接收用户名和密码

  <dd class="user_icon">
   <input type="text" name="username" placeholder="账号" class="login_txtbx"/>
  </dd>
  <dd class="pwd_icon">
   <input type="password" name="password" placeholder="密码" class="login_txtbx"/>
  </dd>

2. 后端方法

模拟用户的登录,直接判断用户的名称为妲己以及密码为123123如果验证成功,就向session中保存用户的id值。如果没有登录成功的话,那就对session不做任何的处理,直接跳转到登录页面上去。

@app_blue.route('/new_login/', methods=['GET', 'POST'])
def new_login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        username = request.form.get('username')
        password = request.form.get('password')
        # 数据库校验,用户密码是否正确
        if username == '妲己' and password == '123123':
            session['user_id'] = 1
            return redirect((url_for('first.index')))
        else:
            return redirect(url_for('first.new_login'))

@app_blue.route('/index/', methods=['GET'])
def index():
    return render_template('index.html')

3. 装饰器

使用装饰器去装饰我们的index()函数,如果用户登录了,则session中有user_id的key,如果没有登录的话,session中是没有user_id的key的。那么验证用户是否登录了,其实就是验证session的user_id

def is_login(func):
    @wraps(func)
    def check_login(*args, **kwargs):
        if 'user_id' in session:
            return func(*args, **kwargs)
        else:
            return redirect(url_for('first.new_login'))
    return check_login

4. 修改index()函数,使用装饰器装饰

@app_blue.route('/index/', methods=['GET'])
@is_login
def index():
    return render_template('index.html')

猜你喜欢

转载自blog.csdn.net/hanbo6/article/details/82563015