【发布时间】:2015-10-18 15:36:26
【问题描述】:
我需要在某个特定时间后注销用户(现在假设为 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()
settings.py
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 分钟注销用户?
【问题讨论】:
-
您是否在“尝试”块中遇到任何异常?
-
你能不能输入一些日志来看看你是否进入了 try、if 内部等等。
-
实际上它似乎没有进入 process_request 方法,因为我使用了一些打印语句但无法在终端输出上看到
-
@DanielRoseman 甚至没有进入 process_request 方法
-
也许你应该使用 jquery ajax,它会发送 GET 或 POST 请求,在特定时间运行一些视图,这将注销用户..
标签: django django-sessions django-middleware