Django:堆叠装饰器

2024-04-27 12:44:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下信号。有没有可能像我在这里那样把这两个装饰师“叠”起来?你知道吗

@receiver(signal=charge_succeeded)
@transaction.atomic
def create_influencer_transaction(sender, order, charge, **kwargs):
    pass

Tags: signal信号defcreateorderpasssenderkwargs
1条回答
网友
1楼 · 发布于 2024-04-27 12:44:10

是的。你知道吗

考虑到装饰师的工作方式,这相当于

def create_influencer_transaction(sender, order, charge, **kwargs):
    pass


create_influencer_transaction = transaction.atomic(
    create_influencer_transaction
)
create_influencer_transaction = receiver(signal=charge_succeeded)(
    create_influencer_transaction
)

transaction.atomic将返回一个具有原子性包装逻辑的新函数,但是receiver将只返回相同的函数。你知道吗

但是,这里的顺序确实很重要(而且你做对了);如果decorator是另一种方式,receiver会注册非原子版本,这是不好的。你知道吗

相关问题 更多 >