gpt4 book ai didi

python - Django:用户登录时发出信号?

转载 作者:IT老高 更新时间:2023-10-28 21:34:19 25 4
gpt4 key购买 nike

在我的 Django 应用程序中,我需要在用户登录时开始运行一些周期性的后台作业,并在用户注销时停止运行它们,所以我正在寻找一种优雅的方式来

  1. 收到有关用户登录/注销的通知
  2. 查询用户登录状态

在我看来,理想的解决方案是

  1. 每个 django.contrib.auth.views.login...views.logout
  2. 发送的信号
  3. 方法 django.contrib.auth.models.User.is_logged_in(),类似于 ... User.is_active()... User.is_authenticated()

Django 1.1.1 没有这个,我不愿意修补源代码并添加它(反正不知道该怎么做)。

作为临时解决方案,我在 UserProfile 模型中添加了一个 is_logged_in bool 字段,该字段默认清除,在用户第一次点击登录页面时设置(由 LOGIN_REDIRECT_URL 定义= '/') 并在后续请求中进行查询。我将它添加到 UserProfile 中,因此我不必仅为此目的从内置 User 模型中派生和自定义。

我不喜欢这个解决方案。如果用户明确点击注销按钮,我可以清除标志,但大多数时候,用户只是离开页面或关闭浏览器;在这些情况下清除标志对我来说似乎并不简单。此外(虽然这是对数据模型清晰度的挑剔),is_logged_in 不属于 UserProfile,而是属于 User 模型。

谁能想到替代方法?

最佳答案

你可以使用这样的信号(我把我的放在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)

参见 django 文档:https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals在这里http://docs.djangoproject.com/en/dev/topics/signals/

关于python - Django:用户登录时发出信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1990502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com