在django中的特定时间后自动引导用户

在django中的特定时间后自动引导用户,django,django-sessions,django-middleware,Django,Django Sessions,Django Middleware,我需要在一段特定的时间后注销一个用户(现在假设为1分钟),因此创建了一个中间件类,如下所示 myproject/middleware.py from datetime import datetime, timedelta from django.contrib import auth class AutoLogout: def process_request(self, request): if not request.user.is_authenticated() :

我需要在一段特定的时间后注销一个用户(现在假设为1分钟),因此创建了一个中间件类,如下所示

myproject/middleware.py

from datetime import datetime, timedelta
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()
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'myproject.middleware.HttpErrorHandler',
    'myproject.middleware.AutoLogout'
)
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
AUTO_LOGOUT_DELAY = 1
设置.py

from datetime import datetime, timedelta
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()
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'myproject.middleware.HttpErrorHandler',
    'myproject.middleware.AutoLogout'
)
SESSION_SERIALIZER = 'django.contrib.sessions.serializers.PickleSerializer'
AUTO_LOGOUT_DELAY = 1
Djagno版本为
1.4.12

但是上面的代码不起作用,我不知道我哪里做错了,所以有人能告诉我为什么上面的代码不起作用,以及如何每1分钟或5分钟注销一个用户吗?

来自Django 1.7。在“设置”下,可以添加两个参数来帮助您允许自动注销,而无需编写自己的中间件


  • 希望这能回答你的问题。快乐编码

    您在“try”块中是否遇到任何异常?您是否可以输入一些日志以查看是否进入try、if内部等。实际上,它似乎没有进入到处理请求方法中,因为我使用了一些打印语句,但无法在终端上看到它们output@DanielRoseman它甚至没有进入到处理请求的方法中,也许你应该使用jquery ajax,它将发送GET或POST请求,在特定时间运行某些视图,这将注销用户。。