为什么模型文件中的 Django 代码片段 运行?

why is django code snip running in models file?

在django.contrib.auth.models.py中有一个函数,上面有一行从20开始

def update_last_login(sender, user, **kwargs):
    """
    A signal receiver which updates the last_login date for
    the user logging in.
    """
    user.last_login = timezone.now()
    user.save()
user_logged_in.connect(update_last_login)

最后一行在我看来很奇怪,因为它在定义之后立即调用一个函数。我从来没有考虑过像调用脚本一样调用 models.py 文件,我认为 Django 模型只不过是定义...什么时候调用此 user_logged_in 行?在模型文件的任何导入上,还是什么?如果它只在用户登录时被调用,django 怎么知道只在那时调用它?谢谢

不,那不是调用update_last_login函数;它正在将其连接到信号。

所有Python个文件都是可执行的;甚至函数和 class 定义都是可执行代码。模块级别的所有内容 - 同样,包括函数定义 - 在首次导入文件时执行。