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