为了账号安全,请及时绑定邮箱和手机立即绑定

Django:堆叠装饰器

Django:堆叠装饰器

LEATH 2021-11-16 15:03:40
我有以下信号。是否可以像我在这里那样“堆叠”这两个装饰器?@receiver(signal=charge_succeeded)@transaction.atomicdef create_influencer_transaction(sender, order, charge, **kwargs):    pass
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

是的。


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


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只会返回相同的函数。


但是,这里的顺序确实很重要(而且您做对了);如果装饰器是相反的,receiver则会注册非原子版本,这不好。


查看完整回答
反对 回复 2021-11-16
  • 1 回答
  • 0 关注
  • 156 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信