在我的Django应用中,我需要在用户登录时开始运行一些定期的后台作业,并在用户注销时停止运行它们,因此我正在寻找一种优雅的方式来
- 收到用户登录/注销的通知
- 查询用户登录状态
在我看来,理想的解决方案是
- 由每个发送的信号
django.contrib.auth.views.login
和... views.logout
- 一种
django.contrib.auth.models.User.is_logged_in()
类似于... User.is_active()
或... User.is_authenticated()
Django 1.1.1没有该功能,我不愿意修补该源代码并添加它(无论如何都不知道如何做)。
作为临时解决方案,我is_logged_in
向UserProfile模型添加了一个布尔字段,默认情况下将其清除,该字段是在用户首次点击登录页面(由定义LOGIN_REDIRECT_URL = '/'
)时设置的,并在后续请求中被查询。我将其添加到UserProfile中,因此不必为此而派生和自定义内置User模型。
我不喜欢这种解决方案。如果用户明确单击注销按钮,则可以清除该标志,但是在大多数情况下,用户只是离开页面或关闭浏览器即可;在这些情况下,清除标志似乎对我来说不是直截了当的。除此以外(尽管这是数据模型的清晰性挑剔),is_logged_in
但不属于UserProfile,而是属于User模型。
谁能想到替代方法?