2017-03-12 91 views
1

我已經使用了包含的代碼,如下所示,5分鐘後自動註銷。 但我得到的錯誤Django1.10自動註銷

File "/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 82, in load_middleware 
mw_instance = middleware(handler) 
TypeError: this constructor takes no arguments 

我的代碼

在settings.py

SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'

在middleware.py

from datetime import datetime, timedelta 
from django.conf import settings 
from django.contrib import auth 


class AutoLogout: 
    def process_request(self, request): 
    if not request.user.is_authenticated() : 
     #Can't log out if not logged in 
     return 

    try: 
     if datetime.now() - request.session['last_touch'] > timedelta(0, settings.AUTO_LOGOUT_DELAY * 60, 0): 
      auth.logout(request) 
      del request.session['last_touch'] 
      return 
    except KeyError: 
     pass 

    request.session['last_touch'] = datetime.now() 

在settings.py:

在幾分鐘內
MIDDLEWARE_CLASSES = [ 
    ......................... 
    'app_name.middleware.AutoLogout', 
] 

自動註銷延遲

AUTO_LOGOUT_DELAY = 5 # equivalent to 5 minutes 

回答

0

您是否嘗試過的新middleware syntax

事情是這樣的:

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

    def __call__(self, request): 

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

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

是我想這一點。 – zinc

+0

它沒有工作? –

+0

no..only chnage我做是高清__call __(自我,要求,餅乾=無): #如果不是request.user.is_authenticated(): 如果(自.__餅乾=無!): #無法退出登錄如果沒有登錄 返回 – zinc