2017-03-13 45 views
0

我中間件代碼如下:Django的會話last_touch

class AutoLogout(object): 
    def __init__(self, get_response): 
     self.get_response = get_response 

    def __call__(self, request): 

     # if not request.user.is_authenticated(): 
     if (request.COOKIES == None): 
      # Can't log out if not logged in 
      return 

     if datetime.now() - request.session['last_touch'] > timedelta(0, settings.AUTO_LOGOUT_DELAY * 60, 0): 
      try: 
       logout(request) 
       del request.session['last_touch'] 
      except KeyError: 
       pass 
      else: 
       request.session['last_touch'] = datetime.now() 
     return self.get_response(request)             The eroor i am getting is KeyError: 'last_touch' 
+1

它有什麼問題? – Withnail

+0

你似乎沒有問過一個問題。 –

+0

我得到錯誤爲KeyError:'last_touch'..如何解決它? – zinc

回答

0

你的try/except塊不奠定了正確的捕捉和處理KeyError。它可能發生在三個地方,但你只能抓住一個。這個邏輯有點太過分了,但只是編輯你所擁有的東西,我認爲這就是你想要實現的目標:

try: 
    if datetime.now() - request.session['last_touch'] > timedelta(0, settings.AUTO_LOGOUT_DELAY * 60, 0): 
      logout(request) 
      del request.session['last_touch'] 
      return self.get_response(request) 
    else: 
      request.session['last_touch'] = datetime.now() 
      return self.get_response(request) 
except KeyError: #KeyError thrown if last touch doesn't exist, so set it. 
    request.session['last_touch'] = datetime.now() 
+0

感謝它不再顯示錯誤...但它不會在2分鐘後自動註銷。 – zinc