Django 我对app.py中使用的ready函数感到困惑
我正在做一些项目使用django框架,我是一个初学者,刚刚使用 django发出信号,但我不明白为什么我们需要在ready函数中导入app.py中的信号文件 下面的代码使问题更加清楚,我陷入了困境,所以需要帮助 signal.pyDjango 我对app.py中使用的ready函数感到困惑,django,Django,我正在做一些项目使用django框架,我是一个初学者,刚刚使用 django发出信号,但我不明白为什么我们需要在ready函数中导入app.py中的信号文件 下面的代码使问题更加清楚,我陷入了困境,所以需要帮助 signal.py from django.db.models.signals import post_save from django.contrib.auth.models import User from django.dispatch import receiver from .
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from django.dispatch import receiver
from .models import Profile
@receiver(post_save,sender=User)
def create_profile(sender,instance,created,**kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save,sender=User)
def save_profile(sender,instance,**kwargs):
instance.profile.save()
app.py
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals
#i have no idea what this function does
这里需要什么就绪功能?为什么要在这里导入信号
如果我在顶部导入信号而不使用就绪功能会怎么样
这里需要什么ready
功能?为什么要在这里导入信号
在注册表完全加载后调用。因此,您可以在服务器开始处理请求之前执行一些您想要执行的操作。文件中对此进行了规定:
子类可以重写此方法以执行初始化任务,例如注册信号。一旦注册表完全填充,就会调用它
这里导入信号的原因是,如果不显式导入信号,Django将不会导入这些信号。如果未导入信号
模块,则信号不会在相应的型号上注册,因此,例如,如果您对用户
型号进行更改,则不会触发信号
通常会在导入行中添加注释,以防止像pylint
这样的linter工具对您不使用的导入发出警告
from django.apps import AppConfig
class UsersConfig(AppConfig):
name = 'users'
def ready(self):
import users.signals # noqa
从django.apps导入AppConfig
类UsersConfig(AppConfig):
名称='用户'
def就绪(自我):
导入users.signals#noqa