python - Django 信号未接收/工作

标签 python django django-rest-framework

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

app1/模型.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

app2/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)

最佳答案

我终于得到了答案。这是因为我没有在启动时导入 signals.py

工作代码

应用程序.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

初始化.py
default_app_config = 'streams.apps.StreamsConfig'

此更改后我收到信号

更新:

根据更新应用程序的 django 3.0 文档,如果您使用应用程序配置的点路径,则不需要在 init.py 中添加 default_app_config。 https://docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready

只是替换

INSTALLED_APPS = (
 ...,
 'streams',
)

INSTALLED_APPS = (
 ...,
 'streams.apps.StreamsConfig',
)

它会起作用。

关于python - Django 信号未接收/工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45859465/

相关文章:

python - 使用 Heroku 的 Django 部署 - [Errno 2] 没有这样的文件或目录

python - 带有注释的Django查询集,为什么GROUP BY应用于所有字段?

django - 为什么用户模型具有字符串类型?

python - 如何在 Django 模型中改变 unique true 的行为?

python - 如何在 drf_yasg 中将方案从 HTTP 更改为 HTTPS?

python - 如何使用python返回mysql查询结果

python - 如何替换 pandas 数据框中列中的日期?

python - "#using-proxy-artist".format(orig_handle) 带饼图(来自 CSV 的数据) Matplotlib

python - Django 错误 admin.E033 : username is not an attribute of users. 自定义用户。为什么我的自定义用户管理不起作用?

Django Rest Framework 反向和 SimpleRouter