在django中设置超时功能

时间:2009-07-14 03:50:42

标签: python django

所以我正在创建一个django应用程序,允许用户向现有的一组文本行添加新的文本行。但是,我不希望多个用户同时向同一组文本行添加行。所以我创建了一个BoolField isBeingEdited,一旦用户决定附加一个特定的组,就会设置为True。一旦Bool为True,在提交编辑之前没有其他人可以追加该组,于是Bool再次设置为False。工作正常,除非有人决定进行编辑然后改变他们的想法或忘记它等等。我想isBeingEdited在10分钟左右后翻转回False。这是cron的工作,还是有更容易的东西?有什么建议吗?

1 个答案:

答案 0 :(得分:4)

将布尔值更改为“锁定时间”

  1. 要锁定模型,请将锁定时间设置为当前时间。
  2. 要解锁模型,请将锁定时间设置为无
  3. 添加“is_locked”方法。如果当前时间在锁定时间之后超过10分钟,则该方法返回“未锁定”。
  4. 这为您提供了没有Cron的超时,并没有定期点击进入数据库以检查标志并取消设置它们。相反,只有当您对模型被锁定感兴趣时,才会检查时间。 Cron可能需要检查所有模型。

    from django.db import models
    from datetime import datetime, timedelta
    # Create your models here.
    class yourTextLineGroup(models.Model):
        # fields go here    
        lock_time = models.DateTimeField(null=True)
        locked_by = models.ForeignKey()#Point me to your user model
    
        def lock(self):
            if self.is_locked(): #and code here to see if current user is not locked_by user
                #exception / bad return value here
                pass
    
            self.lock_time = datetime.now()
    
        def unlock(self):
            self.lock_time = None
    
        def is_locked(self):
            return self.lock_time and datetime.now() - self.lock_time < timedelta(minutes=10)
    

    上面的代码假定调用者在调用lock或unlock后调用save方法。