如何将验证与select_for_update结合?

时间:2019-09-28 08:53:07

标签: django django-models atomic

我正在开发一个计费/银行系统。有两种模式:帐户和交易。创建交易g时,我要验证交易金额<帐户余额。我使用django-admin和DRF。在这两种情况下,用户都应该看到验证错误消息。在当前的实现中,用户看到响应代码500。行锁定后是否有更好的方法来验证事务?

$foo = array('open', 'closed'); 
$open = 1;
$closed = 5;

shuffle($foo); 

echo $$foo;

Is  this ok to use? as $foo will return 1 or 5 which is kind of what i want.

1 个答案:

答案 0 :(得分:0)

如果您需要将验证错误返回给用户,则最好在DRF /视图端进行处理。例如,如果您使用的是DRF的视图集,则重写perform_create方法-将交易的创建包装在try-except块中,捕获此ValueError并返回400响应:

    def perform_create(self, serializer):
        try:
            instance = serializer.save()
        except ValueError:
            raise ValidationError(...)

顺便说一句,在这里引发/捕获一些自定义异常比使用ValueError更为安全,这样我们就不会在其他错误情况下误报“余额不足”。