我正在Django中构建一个付款表单,出于显而易见的原因,我需要确保同一笔付款不能被处理两次(例如,用户点击两次)。我理解如何创建,获取和发布Lock对象,这会阻止表单一次处理两个付款,但我想要的是阻止同一次购买的同时付款(存储在数据库中)
我可以通过创建自己的基于数据库的锁系统解决问题:
class LockToken(models.Model):
key = models.CharField(max_length=200, unique=True)
@classmethod
def create_for(cls, obj_cls, obj_id):
bits = (obj_cls._meta.app_label, obj_cls._meta.model_name, obj_id)
key = '|'.join(map(str, bits))
return cls.objects.create(key=key)
有更好的方法吗?