Django:验证数据,防止竞争条件

时间:2017-09-10 17:17:27

标签: python django django-models django-orm

我正在编写一个Django应用程序来预订某些资源。我的预订模式比较复杂,但想想酒店房间,你有办理登机手续和退房日期。显然,如果同时输入两个冲突的预留,则需要针对DB中的冲突数据检查每个新预留,并且可能存在竞争条件。 这就是我所做的:

    # q: unevaluated QuerySet that pulls conflicting reservations from DB
    # r: new reservation object
    with transaction.atomic():
        if not q.exists():  # no conflicts, if empty
            r.save()

我的问题:

  1. 这是正确的,即它是否保持数据完整性?
  2. 是否存在插入完整性检查的本机Django方式(无原始SQL) 进入数据库?我认为这是最好的方法,以防止任何可能的无效数据进入数据库的方式?
  3. 如果在数据库级别没有办法做到这一点,我在哪里将它绑定到Django中,以便我捕获所有或大多数方法向DB添加新对象?

0 个答案:

没有答案