2017-03-13 7 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 /ブロックをキャッチしてKeyErrorに対処するために、正しくレイアウトされていない点が異なります。それは3つの場所で発生することができますが、あなたは1つだけをキャッチしています。ロジックは少しばかりですが、あなたが持っているものを編集するだけで、これはあなたが達成しようとしているものだと思います:

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

関連する問題