带有参数

时间:2016-06-22 09:12:01

标签: python django

在Django应用程序中,我正在进行工作,用户会话在另一台设备上的同一用户登录后被标记为多个,因此在页面重新加载后,第一个用户注销并重定向到admin/login页面。

需要在admin/login页面上显示有关此问题的第一个用户警告。我现在想到的唯一一件事是将GET参数添加到此页面网址,在视图中进行检查,并显示此警告。但我找不到要覆盖的类/方法,我可以检查会话是否已过期,并添加GET参数,比如multiple_sessions=1 url。

我认为,它看起来像这样:

def logout(self, request, *args, **kwargs):
    if request.session['multiple']:
        super(CustomLogout, self).logout(request, redirect_to='/admin/login?multiple_session=1', *args, **kwargs)
    else:
        super(CustomLogout, self).logout(request, *args, **kwargs)

所以问题是,究竟是什么方法负责将用户重定向到logout

非常感谢任何其他实现此行为的想法!

2 个答案:

答案 0 :(得分:1)

不确定我是否理解正确。您的问题是,如何在用户退出后向用户显示消息,这是正确的吗?

Django有messages framework这样做,向用户显示消息。

from django.contrib import messages

def logout(self, request, *args, **kwargs):
    if request.session['multiple']:
        messages.info(request, 'Something multiple sessions.')
    super(CustomLogout, self).logout(request, *args, **kwargs)

答案 1 :(得分:0)

使用此自定义中间件类来实现所需的行为:

class LogoutMiddleware(object):
    def process_response(self, request, response):
        if hasattr(request, 'user'):
            if request.user.is_authenticated() and request.session.exists(request.session.session_key):
                current_session = Session.objects.get(pk=request.session.session_key)
                if current_session.old == True:
                    response_redirect = HttpResponseRedirect(reverse('logout'))
                    response_redirect.set_cookie('multiple-sessions', True)
                    return response_redirect 
        return response

然后,如果登录视图找到此cookie,它将在模板中呈现警告。