在Django中生成唯一的推荐码

2 投票
1 回答
6890 浏览
提问于 2025-04-18 01:26

我刚开始学习django,想为每个用户在注册时生成一个唯一的推荐码。这个推荐码会通过邮件发送给用户。我在使用userena,但对如何在userena中实现这个功能一点头绪都没有。这些链接提供了一些相关信息,但对如何在userena中具体操作并不清楚。

https://github.com/byteweaver/django-referral

https://pypi.python.org/pypi/django-referral

http://paltman.com/2012/08/17/how-to-easily-add-referrals-to-a-website/.

所以如果有人对这个问题有清晰的想法,请分享给我。谢谢!

1 个回答

3

你需要创建一个新的模型来保存推荐码。下面是模型的写法。

import uuid
import base64
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import post_save
from userena.models import UserenaLanguageBaseProfile
from userena.utils import user_model_label 


class Profile(UserenaLanguageBaseProfile):
    """ Default profile """

    user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='profile')
    referral_code = models.CharField(max_length=300, blank=True, null=True)


    def get_absolute_url(self):
        return u'/profile/show/%d' % self.id
    def generate_verification_code(self):
        # Generate user's verification code
        # TODO: Move this to the model
        return base64.urlsafe_b64encode(uuid.uuid1().bytes.encode("base64").rstrip())[:25]

    def save(self, *args, **kwargs):
        """
        If this is a new user, generate code.
        Otherwise leave as is
        """
        if not self.pk:
            self.referral_code = self.generate_verification_code()
        elif not self.verification_code:
            self.referral_code = self.generate_verification_code()

        return super(Profile, self).save(*args, **kwargs)

在你的 models.py 文件的最后几行添加这些代码。

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

post_save.connect(create_user_profile, sender=User)

上面提到的代码会在创建用户时自动生成用户的个人资料。

希望这对你有帮助!!!

撰写回答