自定义user_logged_in信号之前django更新last_login

时间:2015-12-16 05:43:37

标签: python django

我想向用户显示一些统计信息(例如,自上次登录后已售出多少件物品)

@receiver(user_logged_in)
def notify_user_on_login(sender, request, user, **kwargs):    
    items = Item.objects.filter(status=Item.HISTORY_STATUS, seller=user, when_trading__gte=user.last_login)

但是,此信号last_login已经更新。 根据{{​​1}}的消息来源,django还将信号与更新django.contib.auth的函数连接起来:

last_login

是否可以在更新前调用我的功能?或者在不添加自定义字段或做一些奇怪的魔法的情况下得到相同的结果?

1 个答案:

答案 0 :(得分:2)

last_login也会更新handler到该信号,这肯定会在您的信号之前注册并执行。您可以通过django.contrib.auth中的INSTALLED_APPS移动应用来解决您的问题。

依赖于顺序的信号处理程序虽然看起来不是一个好主意。所以我可能会用你自己的代码取代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)