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')