2009-07-14 5 views
1

그래서 사용자가 기존 텍스트 줄 그룹에 새로운 텍스트 줄을 추가 할 수있는 장고 응용 프로그램을 만들고 있습니다. 그러나 여러 사용자가 텍스트 줄의 동일한 그룹에 동시에 줄을 추가하는 것을 원하지 않습니다. 그래서 BoolField isBeingEdited를 만들었습니다. 일단 사용자가 특정 그룹을 추가하기로 결정하면 True로 설정됩니다. Bool이 True이면 편집을 제출할 때까지 그룹을 추가 할 수 없으므로 Bool이 다시 False로 설정됩니다. 누군가가 편집을 결정한 다음 마음을 바꾸거나 잊어 버리지 않는 한 괜찮습니다. 10 분 정도 지나면 isBeingEdited가 False로 되돌아 가길 바래요. 이것은 cron을위한 일입니까 아니면 거기에 더 쉬운 것이 있습니까? 어떤 제안?django에서 시간 초과 기능 설정하기

답변

4

변경 모델을 고정하려면 "잠금 시간"

  1. 에 부울는, 현재 시간으로 잠금 시간을 설정합니다.
  2. 모델 잠금을 해제하려면 잠금 시간을 없음으로 설정하십시오.
  3. "is_locked"메소드를 추가하십시오. 이 메서드는 현재 시간이 잠금 시간 후 10 분 이상이면 "잠기지 않음"을 반환합니다.

는이 플래그를 확인하고 설정을 해제하기 위해 크론없이하고 DB에 정규 안타없이 당신에게 당신의 제한 시간을 제공합니다. 대신, 위젯에 관심이있는 경우에만 시간이 확인됩니다 모델이 잠겨 있습니다. 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) 

코드는 위의 호출자가 잠금을 호출 한 후 방법을 저장하거나 잠금을 해제 호출한다고 가정합니다.

+0

is_locked 메서드가 여전히 잠금 시간을 확인하기 위해 db에 충돌 한 다음 다시 해당 값을 None으로 변경하거나 누락 되었습니까? (나는 방법의 영역에서 너무 지식이 없다). 또한, 예를 들어? (나는 그것을 얻을 것이라고 생각하지만 아마도 그렇지는 않다) –

+0

DB는 여전히 공격을 받게 될 것이다. 그러나 잠금 장치가 설정되거나 사용되지 않는 경우에도 cron 작업은 정기적으로 db에 충돌해야합니다. 이 메소드는 잠금 기능이 사용되는 동안에 만 필요시 DB를 히트합니다. –

+0

is_locked 메서드에서 "self.lock_time - datetime.now()"를 "datetime.now() - self.lock_time"으로 변경했지만 지금은 A + –