Flask入门笔记-12_综合认证:使用装饰器
- 对指定的路由进行访问控制, 比如只有登录的用户才能进入个人中心
- 注意使用
functools.wraps
时,是把装饰器上层接收到的函数的名字和doc文档向下传递,注意len38
行在控制台的打印,后面的函数的标记名称,与注释掉len11
行的打印(函数标记会变成wrapper
)
- 直接上代码
from flask import Flask, session, abort
import functools
# 定义装饰器
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'
@app.route('/user')
@login_requied # 使用装饰器只有登录的用户才能访问 user
def user():
return '个人中心'
@app.route('/login')
def login():
session['username'] = 'zs' # 登录成功 签发session
return '登录成功'
@app.route('/')
def index():
return '这里是首页'
if __name__ == '__main__':
print(app.url_map)
app.run(host='0.0.0.0', port='8000')