If statement 如何根据条件选择要应用的装饰器?
是否可以根据条件应用装饰器?下面是一个简单的例子:If statement 如何根据条件选择要应用的装饰器?,if-statement,decorator,python-decorators,flask-jwt-extended,If Statement,Decorator,Python Decorators,Flask Jwt Extended,是否可以根据条件应用装饰器?下面是一个简单的例子: import os def bold_decorator(fn): def wrapper(*args, **kwargs): return '**' + fn(*args, **kwargs) + '**' return wrapper def italic_decorator(fn): def wrapper(*args, **kwargs): return '_' + fn(*
import os
def bold_decorator(fn):
def wrapper(*args, **kwargs):
return '**' + fn(*args, **kwargs) + '**'
return wrapper
def italic_decorator(fn):
def wrapper(*args, **kwargs):
return '_' + fn(*args, **kwargs) + '_'
return wrapper
if os.environ.get('STYLE'):
@bold_decorator
else:
@italic_decorator
def create_text(text=''):
return text
if __name__ == '__main__':
print(create_text('Decorator decisions'))
我想要的是,当设置环境变量时,应用
bold\u decorator
。如果未设置,请使用斜体装饰器。我正在使用用于JWTs的Flask框架,它具有装饰器jwt_required
和jwt_optional
,其中我无法修改这些装饰器的源代码。我正试图找到解决这个问题的办法。任何帮助都将不胜感激对于flask jwt extended的特定情况,您可以在自己的自定义装饰器中执行if/else
逻辑,然后将其应用于所有视图函数。您可以在此处()查看该文件的完整文档,但其外观可能如下所示:
来自flask\u jwt\u扩展导入(
在请求中验证jwt,
验证请求中的jwt选项
)
需要def定制jwt(fn):
@包装(fn)
def包装(*args,**kwargs):
如果os.environ.get('ALLOW_OPTIONAL_JWT'):
验证请求中的jwt选项()
其他:
验证请求()中的jwt
返回fn(*args,**kwargs)
返回包装器
对于更一般的情况,可以在导入级别执行此操作。比如:
如果os.environ.get('STYLE'):
从decorators导入bold_decorator作为decorator
其他:
从decorators导入italic_decorator作为decorator
@装饰师
def创建_文本(测试=“”):
返回文本
第二个示例中的解决方案非常有创意。导入时,我完全忘记了作为
关键字。我将尝试使用这两种解决方案。我知道你创建了烧瓶jwt扩展,所以你也这样做了!