在djang中设置超时函数

2024-06-28 19:13:11 发布

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

所以我正在创建一个django应用程序,允许用户向现有的一组文本行添加一行新的文本。但是我不希望多个用户同时向同一组文本行添加行。所以我创建了一个BoolField isbeingedit,一旦用户决定附加一个特定的组,它就会被设置为True。一旦Bool为True,在提交编辑之前,其他任何人都不能附加该组,然后Bool再次设置为False。工作正常,除非有人决定编辑,然后改变主意或忘记它,等等。我希望isbeingedit在大约10分钟后返回False。这是克朗的工作,还是有更简单的?有什么建议吗?在


Tags: django用户文本falsetrue应用程序编辑建议
1条回答
网友
1楼 · 发布于 2024-06-28 19:13:11

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

  1. 要锁定模型,请将锁定时间设置为当前时间。在
  2. 若要解锁模型,请将“锁定时间”设定为“无”
  3. 添加“is_locked”方法。如果当前时间在锁定时间之后超过10分钟,则该方法返回“notlocked”。在

这使您可以在没有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方法。在

相关问题 更多 >