在我的 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没有这个功能,我不愿意修补源代码并添加它(无论如何,我不确定如何做到这一点)。
作为一个临时解决方案,我在 UserProfile 模型中添加了一个 is_logged_in布尔字段,默认情况下这个字段是清除的,在用户第一次点击登录页面(由 LOGIN_REDIRECT_URL = '/'定义)时设置,并在随后的请求中被查询。我将它添加到 UserProfile,所以我不必为此目的派生和定制内置的 User 模型。
我不喜欢这个解决方案。如果用户显式地单击注销按钮,我可以清除标志,但大多数情况下,用户只是离开页面或关闭浏览器; 在这些情况下清除标志对我来说似乎并不直接。除此之外(虽然这是数据模型清晰度的吹毛求疵) ,is_logged_in不属于 UserProfile,而属于 User 模型。
有人能想到别的办法吗?