有没有办法将类中的所有方法设置为Django中的原子事务?

2024-05-20 15:46:39 发布

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

在Django中使用ViewSet的自定义操作方法时,我将一些业务逻辑划分为另一个类,其名称为BusinessService

BusinessService类可以从许多其他方法中使用,经过一些分析,我发现类中的所有方法(超过5个)都应该在原子事务中

因此,最简单但重复的方法可能是在方法名称上方添加@transaction.atomicdecorator,但作为遵循the DRY principle的一种方法,我正在努力消除多余的重复,但无法以简单的方式实现

在一个原子事务中是否有生成整个类的方法


到目前为止,我尝试在类名称上方附加@transaction.atomic,但当然没有成功,因此我分析了decorator,发现Atomic类使用__enter____exit__进行事务管理,这需要with或其他东西


Tags: thedjango方法名称方式逻辑业务事务
1条回答
网友
1楼 · 发布于 2024-05-20 15:46:39

您可以尝试使用自定义元类(请参见What are metaclasses in Python?),它将装饰所创建类的所有方法。它如下所示(请注意,可能有几个领域可以改进这个元类):

from django.db import transaction


class AtomicTransactionMeta(type):
    def __new__(cls, name, bases, dct):
        for key, value in dct.items():
            if not key.startswith('__') and callable(value):
                # If a non-dunder method then decorate
                dct[key] = transaction.atomic(value)
        return super().__new__(cls, name, bases, dct)


class BusinessService(metaclass=AtomicTransactionMeta):
    ...

相关问题 更多 >