python - 在 Django 中设置超时功能

标签 python django

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

最佳答案

将 bool 值更改为“锁定时间”

  1. 要锁定模型,请将锁定时间设置为当前时间。
  2. 要解锁模型,请将锁定时间设置为“无”
  3. 添加一个“is_locked”方法。如果当前时间比锁定时间晚 10 分钟以上,该方法将返回“未锁定”。

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

关于python - 在 Django 中设置超时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123367/

相关文章:

Django Direct_to_template 或 flatpages

python - 变量名称的长度是否会影响程序运行的速度?

python - Sympy:使用 sympify 将自定义函数减少为字符串?

python - Django 从查询集中删除重复项

python - Django - 从 url <pk> 填充 createview 输入

python - 如何指定 Django 表单中字段的顺序?

python - 安装 askbot 后 Django 应用程序未运行

python - 预计 setecho 不工作

python - 单元测试中的自定义异常

python - 为什么同一个程序在Windows和Linux上运行时看起来不同?