# 装饰器相关 def auth(func): def inner(*args,**kwargs): return func(*args,**kwargs) return inner @auth def login(): pass print(login.__name__) # inner
# 使用functools,虽然执行的还是inner函数,但名字不叫inner import functools def auth(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner @auth def login(): pass @auth def index(): pass print(login.__name__) # login print(index.__name__) # index
1 # 一个函数可以被多个装饰器装饰 2 # 先执行离他最近的装饰器, 3 4 import functools 5 6 def auth0(func): 7 print("00000000000") 8 @functools.wraps(func) 9 def inner(*args,**kwargs): 10 return func(*args,**kwargs) 11 return inner 12 13 def auth1(func): 14 print("1111111111111111111") 15 @functools.wraps(func) 16 def inner(*args,**kwargs): 17 return func(*args,**kwargs) 18 return inner 19 20 @auth0 21 @auth1 22 def index(): 23 pass
from flask import Flask import functools app=Flask(__name__) def auth(func): @functools.wraps(func) def inner(*args,**kwargs): return func(*args,**kwargs) return inner @app.route('/index') @auth def index(): return 'hello world' @app.route('/login') @auth def login(): return 'hello world' if __name__ == '__main__': app.run() # flask 加装饰器 # 1、必须引用functools # 2、装饰器必须放在@app.route('/login')的下面,因为url必须和@auth # def index(): # return 'hello world'创建关系
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了