如何创建一个在 Django 登录时设置会话变量的中间件?
How to create a middleware that set a session variable on login in Django?
如问题所述,我想在用户登录时为用户会话设置一些变量,并在注销或浏览器关闭时删除此变量。
最初我想写我的自定义登录视图来实现这个,但可能中间件是更好的解决方案。
看完所有对你问题的评论后,我也会在他最后的评论中说同样的话。
但是既然您指定了您确实想要执行一些自定义任务,那么您可以像这样编写自己的自定义中间件 -> https://github.com/ankushrgv/notification/blob/master/apps/accounts/middlewares.py
然后像这样将其包含在您的 settings.py 中 -> https://github.com/ankushrgv/notification/blob/master/config/settings.py
基本上我是在 Redis 中编写 user_id : session_id 键值对,然后在我的视图中读取它们以显示实时通知,但仅对登录用户显示。
我希望这能让您对如何编写自己的自定义中间件有一个清晰的认识。
中间件不是实现解决方案的正确方法。我发现了信号并以这种方式实现了我的解决方案:
@receiver(user_logged_in)
def sig_user_logged_in(sender, user, request, **kwargs):
moderator = get_or_none(CompanyModerator, moderator__user=request.user)
if moderator:
if 'company_id' not in request.session:
request.session['company_id'] = moderator.company.id
不同的是每个django请求都会触发一个中间件,当用户需要的只是做一些事情的时候得到logged-in/out。每次用户获得 logged-in/out 时,我们都会在会话中添加一些 data/object-models 等,以跟踪整个网站的用户。
你怎么看?
如问题所述,我想在用户登录时为用户会话设置一些变量,并在注销或浏览器关闭时删除此变量。
最初我想写我的自定义登录视图来实现这个,但可能中间件是更好的解决方案。
看完所有对你问题的评论后,我也会在他最后的评论中说同样的话。
但是既然您指定了您确实想要执行一些自定义任务,那么您可以像这样编写自己的自定义中间件 -> https://github.com/ankushrgv/notification/blob/master/apps/accounts/middlewares.py
然后像这样将其包含在您的 settings.py 中 -> https://github.com/ankushrgv/notification/blob/master/config/settings.py
基本上我是在 Redis 中编写 user_id : session_id 键值对,然后在我的视图中读取它们以显示实时通知,但仅对登录用户显示。
我希望这能让您对如何编写自己的自定义中间件有一个清晰的认识。
中间件不是实现解决方案的正确方法。我发现了信号并以这种方式实现了我的解决方案:
@receiver(user_logged_in)
def sig_user_logged_in(sender, user, request, **kwargs):
moderator = get_or_none(CompanyModerator, moderator__user=request.user)
if moderator:
if 'company_id' not in request.session:
request.session['company_id'] = moderator.company.id
不同的是每个django请求都会触发一个中间件,当用户需要的只是做一些事情的时候得到logged-in/out。每次用户获得 logged-in/out 时,我们都会在会话中添加一些 data/object-models 等,以跟踪整个网站的用户。
你怎么看?