中间件不是预期的工作

时间:2013-02-11 08:18:26

标签: python django

我遇到了一些问题,我正在尝试实现一个中间件,该中间件检测经过身份验证的用户是否处于非活动状态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 个答案:

答案 0 :(得分: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):
    .........

如果未经过身份验证,则不允许用户访问该页面。