为什么模型文件中的 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 定义都是可执行代码。模块级别的所有内容 - 同样,包括函数定义 - 在首次导入文件时执行。
在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 定义都是可执行代码。模块级别的所有内容 - 同样,包括函数定义 - 在首次导入文件时执行。