2017-03-12 94 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