中间件未按预期工作
我遇到了一些问题,我正在尝试实现一个中间件,用来检测用户在登录后是否有5秒钟没有活动。我写了下面的Python模块来完成这个任务,但似乎效果不好。我发现了两个原因:
第一个原因是;我无法正确地把用户重定向到主页。
第二个原因是;中间件没有正确地更改会话密钥。
我还没有找到解决这些问题的方法。下面我将分成两部分展示我所做的工作。
第一部分;middleware.py
class TimeOut:
@csrf_exempt
def process_request(self, request):
try :
if request.session['isA'] == False:
return #redirect(reverse("homePage_view"))
except KeyError:
request.session['isA'] = False
return
try :
passT = datetime.now() - request.session['Time']
if passT > timedelta( 0, settings.SESSION_COOKIE, 0):
request.session['isA'] = False
del request.session['Time']
return
except KeyError:
pass
request.session['Time'] = datetime.now()
第二部分;settings.py
SESSION_COOKIE = 5
MIDDLEWARE_CLASSES = (
'home.middleware.TimeOut',
)
编辑:我不小心写了另一个类。我已经把名字改成了TimeOut。
1 个回答
1
你说的是这个吗:
class AutoLogout:
def process_request(self, request):
if not request.user.is_authenticated() :
return HttpResponseRedirect(reverse('app_name:url_name'))
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 HttpResponseRedirect(reverse('app_name:url_name'))
except KeyError:
pass
request.session['last_touch'] = datetime.now()
decorators.py
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect
def login_check(view_func):
def _wrapped_view_func(request, *args, **kwargs):
if not request.user.is_authenticated:
//return to home page url
return HttpResponseRedirect(reverse('app_name:url_name'))
return view_func(request, *args, **kwargs)
return _wrapped_view_func
在你创建了decorators.py之后,更新你的视图,像这样:
from app_name.decorators import login_check
@login_check
def view_name(request):
.........
如果用户没有登录,就不能访问那个页面。