Python django更新上次登录之前的自定义用户登录信号

Python django更新上次登录之前的自定义用户登录信号,python,django,Python,Django,我想向用户显示一个带有一些统计信息的通知(例如,自从用户上次登录以来,已经售出了多少物品) 但是,在此信号中,上次登录已更新。 根据django.contib.auth上的源代码,django还将信号与更新上次登录的函数连接起来: user_logged_in.connect(update_last_login) 是否可以在更新之前调用我的函数?或者在不添加自定义字段或不执行一些奇怪的操作的情况下获得相同的结果?最后一次登录也会更新为该信号,该信号肯定会在您之前注册并执行。您可以通过将应用程序

我想向用户显示一个带有一些统计信息的通知(例如,自从用户上次登录以来,已经售出了多少物品)

但是,在此信号中,上次登录已更新。 根据
django.contib.auth上的源代码,django还将信号与更新上次登录的函数连接起来:

user_logged_in.connect(update_last_login)

是否可以在更新之前调用我的函数?或者在不添加自定义字段或不执行一些奇怪的操作的情况下获得相同的结果?

最后一次登录也会更新为该信号,该信号肯定会在您之前注册并执行。您可以通过将应用程序移动到
INSTALLED\u APPS
中的
django.contrib.auth
来解决问题

不过,依赖于顺序的信号处理程序似乎不是一个好主意。所以我可能会用你自己的处理器替换Django的处理器:

from django.contrib.auth.models import update_last_login

def notify_user_on_login(user):    
    items = Item.objects.filter(status=Item.HISTORY_STATUS, seller=user, when_trading__gte=user.last_login)


@receiver(user_logged_in)
def after_user_logged_in(sender, user, **kwargs):
    notify_user_on_login(user)
    update_last_login(sender, user, **kwargs)

user_logged_in.disconnect(update_last_login)

谢谢,我完全忘了我可以简单地断开那个信号。然而,只有当我从断开args中删除了发送者时,它才开始工作。@Azarn哦,你说得对。它不是由发件人筛选的。作为一个足够具体的信号是有意义的
from django.contrib.auth.models import update_last_login

def notify_user_on_login(user):    
    items = Item.objects.filter(status=Item.HISTORY_STATUS, seller=user, when_trading__gte=user.last_login)


@receiver(user_logged_in)
def after_user_logged_in(sender, user, **kwargs):
    notify_user_on_login(user)
    update_last_login(sender, user, **kwargs)

user_logged_in.disconnect(update_last_login)