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扩展,所以你也这样做了!