Django 信号文件

问题描述 投票:0回答:1

django 如何知道到底在哪里寻找 Signal 函数?比如哪个 .py 文件来搜索接收器函数?它会搜索每个文件并在找到时执行该函数吗?

尝试阅读文档但没有多大帮助,请在这里帮助我。 Django 信号

django django-models django-signals
1个回答
0
投票

Django 使用信号注册来确定信号接收器函数的位置。想象一下,您想要创建一个社交媒体应用程序,其中每个用户都有一个个人资料页面。从技术上讲,您不能允许用户手动创建个人资料页面;相反,它应该在创建用户时自动创建。假设您有一个这样的模型:

class Profile(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    profile_photo = models.ImageField()

要利用信号为每个用户自动创建个人资料页面,您需要在 Django 应用程序中创建一个

signals.py
文件,然后将其导入到
app.py
文件中。这允许您定义信号处理程序并将它们连接到用户模型的
post_save
信号,确保每当创建新用户时都会自动创建个人资料页面。

信号.py

from django.conf import settings 
from django.db.models.signals import post_save 
from django.dispatch import receiver 
from .models import Profile
  
User = settings.AUTH_USER_MODEL 
  
 @receiver(post_save, sender=User) 
 def create_profile(sender, instance, created, **kwargs): 
     if created: 
         Profile.objects.create(user=instance)

正如我所说,您需要将

signals.py
文件导入到
app.py
文件中,以允许您连接到用户模型的
post_save
信号,确保每当创建新用户时都会自动创建个人资料页面。

app.py

from django.apps import AppConfig

class YourAppConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'your_app_name'

    def ready(self):
        from . import signals

Reference

© www.soinside.com 2019 - 2024. All rights reserved.