Flask入门笔记-12_综合认证:全局认证

  • 使用钩子函数来每次请求的时候时候尝试从session中获取user的信息
import functools

from flask import Flask, session, abort, g

# 定义装饰器
def login_requied(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        # 进行访问控制
        if session.get('username'):
            return func(*args, **kwargs)
        abort(401) # 如果没有登录直接401

    return wrapper

app = Flask(__name__)
app.secret_key = 'xiantanluohua'

# 2. 使用请求钩子,

@app.before_request  #这样每次请求的的时候都会尝试获取session中的username, 然后赋值给g变量, 最后在视图函数中进行具体表现
def bef_username():
    username = session.get('username')
    g.username = username


@app.route('/')
def index():
    if g.username: #如果获取到用户信息则展示不同的首页
        return '欢迎回来来到首页{}'.format(g.username)
    return '首页'

@app.route('/user')
@login_requied # 必须登录的用户才能进入
def user():
    return '{}的个人中心'.format(g.username)


@app.route('/login')
def login():
    session['username'] = '张三'
    return '登录成功'


if __name__ == '__main__':
    app.run(host='0.0.0.0', port='8000')