用户登录Django时调用方法

wat*_*ter 1 django

在我的Django站点上,我想在用户登录站点时创建一个对象.我在互联网上搜索了它,我决定在context_processors.py中编写一个方法.所以我写了;

def check_online_status(request):
   user_status = None
    if request.user.is_authenticated():
        user_status = UserStatus.objects.create(user_id=request.user.id)
        user_status.status_type = "online"
        user_status.save()

return {
    'user_status': user_status,
}
Run Code Online (Sandbox Code Playgroud)

这是问题所在; 我的check_online_status()方法在每个请求中被触发但我想立即触发我的方法,只有当用户登录时.

你能帮帮我吗?

小智 5

我认为你要找的是一个信号,特别是一个auth信号.这些已在django中提供.

https://docs.djangoproject.com/en/dev/ref/contrib/auth/#module-django.contrib.auth.signals

from django.contrib.auth.signals import user_logged_in


  def set_status_online(sender, user, request, **kwargs):
      user_status = UserStatus.objects.create(user_id=request.user.id)
      user_status.status_type = "online"
      user_status.save()

  user_logged_in.connect(set_status_online)
Run Code Online (Sandbox Code Playgroud)