在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
?
非常感谢任何其他实现此行为的想法!
答案 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,它将在模板中呈现警告。