在django中的特定时间后自动引导用户
我需要在一段特定的时间后注销一个用户(现在假设为1分钟),因此创建了一个中间件类,如下所示 myproject/middleware.py在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() :
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请求,在特定时间运行某些视图,这将注销用户。。