相关疑难解决方法(0)

信号处理程序应该放在django项目中的哪个位置?

我刚刚开始在django项目中实现信号监听器.虽然我明白它们是什么以及如何使用它们.我很难搞清楚应该放在哪里.来自django网站的文档有这样的说法:

这段代码应该在哪里生活?

您可以将信号处理和注册码放在任何您喜欢的地方.但是,您需要确保早期导入模块,以便在需要发送任何信号之前注册信号处理.这使您的应用程序的models.py成为放置信号处理程序注册的好地方.

虽然这是一个很好的建议,但在我的models.py中使用非模型类或方法只会让我误以为然.

那么,存储和注册信号处理程序的最佳实践/规则是什么?

django signal-handling

135
推荐指数
6
解决办法
3万
查看次数

在哪里放django信号接收器代码?

嗨,我正在定义自己的信号和接收器.我只是想知道我应该把代码放在哪里.它位于models.py或views.py中.请帮忙

django

7
推荐指数
1
解决办法
1058
查看次数

发送者AUTH_USER_MODEL的post_save信号在登录时触发

做了什么

我有一个自定义User模型,MyUser因为它在一个完整的例子中描述了文档上的自定义用户模型,所谓的UserProfileMyUser通过一对一的关系连接,就像在Django文档中描述的关于如何扩展一个现有的用户模型.

定制身份验证的文档中,有关如何将post_save信号与现有User模型连接的示例.

接下来,我将一个测试接收器放在一个由我的apps.py文件加载的signals.py中,就像在这个 SO答案中描述的那样.

组态

signal.py

def post_save_receiver(sender, instance, created, **kwargs):
    send_mail('Testing', "Just testing...", 'hell@earth.tld', ['admin@heaven.tld'], fail_silently=False)

post_save.connect(post_save_receiver, sender=settings.AUTH_USER_MODEL)
Run Code Online (Sandbox Code Playgroud)

models.py

class MyUserManager(BaseUserManager):
    def create_user(self, email, password=None):
    """
        Creates and saves a User with the given email and password.
        """
        if not email:
            raise ValueError('Users must have an email address')

        user = self.model(
            email=self.normalize_email(email),
        ) …
Run Code Online (Sandbox Code Playgroud)

django django-admin

2
推荐指数
1
解决办法
914
查看次数

如何在django 1.9中扩展用户模型?

我一直在寻找解决这个问题,我想在我的Profile模型中添加简单的东西,如头像,联系信息等.但是,当我在网上找到如何做到这一点的教程时,我只遇到了错误.

这就是我的模型(track/models.py):

from django.db import models
from django.core.exceptions import ValidationError
from django.core.files.images import get_image_dimensions
from django.contrib.auth.models import User

...

class Profile(models.Model):

    def generate_user_folder_avatar(instance, filename):
        return "uploads/users/%s/%s.png" % (instance.user, 'avatar')

    user = models.OneToOneField(User)

    avatar = models.ImageField(upload_to=generate_user_folder_avatar,validators=[is_square_png])

    def create_user_profile(sender, instance, created, **kwargs):
        if created:
            Profile.objects.create(user=instance)

    post_save.connect(create_user_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)

我已经设置了AUTH_PROFILE_MODULE = 'tracks.Profile'settings.py,但是当我运行我的服务器时,我收到此错误:

NameError: name 'post_save' is not defined
Run Code Online (Sandbox Code Playgroud)

知道我在这里做错了什么吗?我正在使用Django 1.9和Python 3

python django

1
推荐指数
1
解决办法
3359
查看次数

标签 统计

django ×4

django-admin ×1

python ×1

signal-handling ×1