在我的Django应用中,我需要在用户登录时开始运行一些定期的后台作业,并在用户注销时停止运行它们,因此我正在寻找一种优雅的方式
查询用户登录状态 在我看来,理想的解决方案是
由每个发送的信号django.contrib.auth.views.login和... views.logout
django.contrib.auth.views.login
... views.logout
django.contrib.auth.models.User.is_logged_in()
User.is_active()
User.is_authenticated()
作为一个临时解决方案,我is_logged_in向UserProfile模型添加了一个布尔字段,该字段默认情况下已清除,该字段在用户首次点击登录页面(由定义LOGIN_REDIRECT_URL = '/')时设置,并在后续请求中被查询。我将其添加到UserProfile中,因此不必为此而派生和自定义内置User模型。
is_logged_in
LOGIN_REDIRECT_URL = '/'
我不喜欢这种解决方案。如果用户明确单击注销按钮,则可以清除该标志,但是在大多数情况下,用户只是离开页面或关闭浏览器即可;在这些情况下,清除标志似乎对我来说不是直截了当的。除此以外(虽然这是数据模型的清晰性挑剔),但is_logged_in它不属于UserProfile,而是属于User模型。
UserProfile
谁能想到替代方法?
您可以使用这样的信号(我将我的信号放在models.py中)
from django.contrib.auth.signals import user_logged_in
def do_stuff(sender, user, request, **kwargs): whatever…
user_logged_in.connect(do_stuff)