中间件未按预期工作

0 投票
1 回答
5659 浏览
提问于 2025-04-17 15:28

我遇到了一些问题,我正在尝试实现一个中间件,用来检测用户在登录后是否有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):
    .........

如果用户没有登录,就不能访问那个页面。

撰写回答