登录时触发带有发送方AUTH_USER_MODEL的post_save信号 [英] post_save signal with sender AUTH_USER_MODEL fires at login

查看:167
本文介绍了登录时触发带有发送方AUTH_USER_MODEL的post_save信号的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个自定义的 User 模型,称为 MyUser ,如中所述文档中自定义用户模型的完整示例以及与 MyUser 连接的所谓的 UserProfile 通过一对一关系,如Django文档中有关如何扩展现有的用户模型

I have a custom User model called MyUser as it is described in an full example for an custom user model on the docs and a so called UserProfile that is connected to MyUser by an One-to-one relationship like it's described in the Django documentation about how to extend an existing user model.

自定义身份验证如何将post_save信号与现有的 User 模型

此后,我将测试接收器放入了 apps.py加载的signals.py中文件,如 SO答案中所述。

By following this, I put an testing receiver in a signals.py that is loaded by my apps.py file, like it's described in this SO answer.

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)



< h3> models.py

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),
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        """
        Creates and saves a superuser with the given email and password.
        """
        user = self.create_user(email,
            password=password,
        )
        user.is_admin = True
        user.save(using=self._db)
        return user




class MyUser(AbstractBaseUser):
    email = models.EmailField(
        verbose_name='email address',
        max_length=255,
        unique=True,
    )
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'

    def get_full_name(self):
        # The user is identified by their email address
        return self.email

    def get_short_name(self):
        # The user is identified by their email address
        return self.email

    def __str__(self):              # __unicode__ on Python 2
        return self.email

    def has_perm(self, perm, obj=None):
        "Does the user have a specific permission?"
        # Simplest possible answer: Yes, always
        return True

    def has_module_perms(self, app_label):
        "Does the user have permissions to view the app `app_label`?"
        # Simplest possible answer: Yes, always
        return True

    @property
    def is_staff(self):
        "Is the user a member of staff?"
        # Simplest possible answer: All admins are staff
        return self.is_admin



views.py



views.py

def UserLogin(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect("http://www.heaven.tld/account")
    else:
        if request.method == 'POST':
            form = UserLoginForm(request.POST)
            if form.is_valid():
                username = form.cleaned_data['username']
                password = form.cleaned_data['password']
                user = authenticate(username=username, password=password)
                if user is not None and user.is_active:
                    login(request, user)
                    return HttpResponseRedirect("http://www.heaven.tld/account")
                else:
                    error_msg = 'Please try again!'
                    return render(request, "development",
                        {'form':form,
                        'error_msg':error_msg,
                         })
            else:
                error_msg = "Please try again!"
                return render(request, "development",
                    {'form':form,
                    'error_msg':error_msg,
                    })
        else:
            form = UserLoginForm()
            return render(request, "development", {'form': form})



问题



现在,如果我登录,总是会收到此邮件,但只有在创建用户后才需要。

The Problem

Now if I log in I always get this mail, but I want it only if a user was created.

推荐答案

尝试:

def post_save_receiver(sender, instance, created, **kwargs):
    if created:
        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)

这篇关于登录时触发带有发送方AUTH_USER_MODEL的post_save信号的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆