装饰器是 Python 的一个重要部分。
简单地说:他们是修改其他函数的功能的函数, 在不改变原有函数功能基础的上加装功能。
装饰器蓝本:from functools import wraps
def decorator_name(f):
@wraps(f)
def decorated(*args, **kwargs):
if not can_run:
return "函数不会执行"
return f(*args, **kwargs)
return decorated
@decorator_name
def func():
return("函数执行了")
can_run = True
print(func())
# Output: 函数执行了
can_run = False
print(func())
# Output: 函数不会执行
@wraps
接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等等的功能。这可以让我们在装饰器里面访问在装饰之前的函数的属性
装饰器实现登录状态验证:from flask import session, current_app, abort, g
from info.models import User
from functools import wraps
def check_login(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 1.获取session信息(id)
id = session.get("id")
user = None
# 2.利用id查询数据库中信息
try:
user = User.query.filter_by(id=id).first()
except Exception as e:
current_app.logger.error(e)
abort(404)
g.user = user
return func(*args, **kwargs)
return wrapper
在其它函数开始需要验证登录状态时,只需要:
from . import blue_news
from info.utils.comment import check_login # 导入编写的装饰器
@blue_news.route('/detail/')
@check_login
def detail(nid):
pass



