Django:堆叠装饰器

我有以下信号。是否可以像我在这里那样“堆叠”这两个装饰器?


@receiver(signal=charge_succeeded)

@transaction.atomic

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

    pass


LEATH
浏览 157回答 1
1回答

繁星coding

是的。考虑装饰器的工作方式,这相当于def create_influencer_transaction(sender, order, charge, **kwargs):    passcreate_influencer_transaction = transaction.atomic(    create_influencer_transaction)create_influencer_transaction = receiver(signal=charge_succeeded)(    create_influencer_transaction)–transaction.atomic将返回一个具有原子性包装逻辑的新函数,但receiver只会返回相同的函数。但是,这里的顺序确实很重要(而且您做对了);如果装饰器是相反的,receiver则会注册非原子版本,这不好。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python