Django发出信号没有接收/工作

suh*_*kan 3 python django django-rest-framework

我正在使用django默认接收器来处理信号.但它不起作用.我已经在APP1中修改了用户模型,当新的用户对象在APP2中创建一个接收器时,signal.py正在收听它,但它无法正常工作.

APP1/model.py

class User(BaseModel, AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    username = models.CharField(max_length=40, unique=True)
    first_name = models.CharField(max_length=30, blank=True, null=True)
    last_name = models.CharField(max_length=30, blank=True, null=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_email_verified = models.BooleanField(default=False)
    is_paid = models.IntegerField(default=0)
    access_token = models.CharField(max_length=128, blank=True) 

    objects = UserManager() 

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']  

    class Meta:
        db_table = 'users'  

    def __str__(self):
        return self.email
Run Code Online (Sandbox Code Playgroud)

APP 2/signals.py

from django.conf import settings
from django.db.models.signals import post_save
from django.dispatch import receiver
from accounts.models import User    

@receiver(post_save, sender=User)#settings.AUTH_USER_MODEL)
def create_auth_token(sender, instance=None, created=False, **kwargs):
    print ("token generated")
    if created:
       print("data at signal ****", instance.email, instance)
Run Code Online (Sandbox Code Playgroud)

suh*_*kan 12

最后,我得到了答案.因为我没有在启动时导入signal.py.

工作代码

apps.py

from __future__ import unicode_literals

from django.apps import AppConfig


    class StreamsConfig(AppConfig):
        name = 'streams'    

        def ready(self):
            print("at ready")
            import streams.signals
Run Code Online (Sandbox Code Playgroud)

init .py

default_app_config = 'streams.apps.StreamsConfig'
Run Code Online (Sandbox Code Playgroud)

在这个改变之后我收到了信号

  • 记住添加 ```default_app_config = 'streams.apps.StreamsConfig'``` 非常重要 (2认同)