装饰器的定义和基本使用
from flask import Flask # 导入Flask模块
app = Flask(__name__) # Flask初始化
# 主页,显示 Hello World
@app.route("/") # 定义路由
def hello_world(): # 定义函数
return "Hello World!" # 返回值
# 1、定义装饰器
def user_login(func): # 定义函数,使用func接收函数作为参数
def inner(): # 定义inner()函数
print("登录操作") # 打印到终端输出
func() # 执行func函数
return inner # 返回inner函数,不是返回函数的结果
# 2、使用装饰器
@user_login
def news(): # news 函数作为装饰器的输入
print("这是新闻详情页") # 打印到终端输出
# 3、调用news,将回溯到装饰器函数。最终打印 "登录操作\n这是新闻详情页"
news()
if __name__ == "__main__":
app.run()
对带参数的函数使用装饰器
from flask import Flask # 导入Flask模块
from functools import wraps # 导入相应模块
app = Flask(__name__) # Flask初始化
# 主页
@app.route("/") # 定义路由
def hello_world(): # 定义视图函数
return "Hello World!" # 返回值
# 1、定义装饰器
def user_login(func): # 定义函数user_login
@wraps(func) # 使用functools.wraps在装饰器的函数上,把传进来的函数进行包裹
def inner(*args, **kwargs): # 定义内部函数inner
print("登录操作!") # 打印输出
func(*args, **kwargs)
return inner # 返回inner
# 2、使用无参数的装饰器
@user_login # 使用装饰器
def news(): # 定义函数news()
print(news.__name__) # 打印输出此时的函数名称为 news
print("这是新闻详情页!") # 打印输出
# 调用函数news(),然后向上回溯到装饰器函数
news()
# 3、使用有参数的装饰器
@user_login # 使用装饰器
def news_list(*args): # 定义函数news_list
page = args[0] # 元祖args[0]赋值给page
print(news_list.__name__) # 打印输出函数名为 news_list
print("这是新闻列表页的第" + str(page) + "页!") # 打印输出
# 调用函数news_list,然后向上回溯到装饰器函数
news_list(5)
if __name__ == "__main__": # 当模块被直接运行时,代码将被运行,当模块是被导入时,代码不被执行
app.run()
参考资料
https://weread.qq.com/web/reader/0a932660718ac6bc0a9702e