Pass additional data during user registration using Djoser and Django Rest Framework

I am using Djoser ( https://github.com/sunscrapers/djoser ) along with the Django Rest Framework. I am using the standard / registration / endpoint provided by Djoser. Now I want to convey additional information during user registration. Let's say, for example, the direction code (to find out where the user came from). I think I need to implement this logic in the create_user method of my UserManager class.

Here is my MyUserManager:

class MyUserManager(BaseUserManager):
    def create_user(self, name, email, referrer_code="", password=None):
        """
        Creates and saves a User with the given email, date of
        birth and password.
        """
        if not email:
            raise ValueError('Users must have an email address')
        print "referrercode" + referrer_code
        referrer = 0
        if (referrer_code != ""):
            try:
                referrer = MyUser.objects.filter(referral_code=referrer_code).first().id
            except:
                referrer = 0
        user = self.model(
            name=name,
            email=self.normalize_email(email),
            referrer=referrer,
        )

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

Here referrer_codeis what I want to pass as part of the POST request.

Here is my MyUser model:

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)
    name = models.CharField(max_length=255, blank=True)
    referrer = models.IntegerField(default=0)
    referral_code = models.CharField(max_length=10, blank=True)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name', ]

This is what it says on the djoser documentation page:

. create_user USERNAME_FIELD REQUIRED_FIELDS.

, , referrer_code , , , . , referral_code .

+4
1

, , .

, ( AbstractBaseUser), , , , DRF - , , .

, , settings.py, : 'user': 'myapp.serializers.SpecialUserSerializer', .

, . , User, . user_registration, , . , , :

{
    'activation': 'djoser.serializers.ActivationSerializer',
    'login': 'djoser.serializers.LoginSerializer',
    'password_reset': 'djoser.serializers.PasswordResetSerializer',
    'password_reset_confirm':     'djoser.serializers.PasswordResetConfirmSerializer',
    'password_reset_confirm_retype': 'djoser.serializers.PasswordResetConfirmRetypeSerializer',
    'set_password': 'djoser.serializers.SetPasswordSerializer',
    'set_password_retype': 'djoser.serializers.SetPasswordRetypeSerializer',
    'set_username': 'djoser.serializers.SetUsernameSerializer',
    'set_username_retype': 'djoser.serializers.SetUsernameRetypeSerializer',
    'user_registration': 'djoser.serializers.UserRegistrationSerializer',
    'user': 'djoser.serializers.UserSerializer',
    'token': 'djoser.serializers.TokenSerializer',
}

settings.py:

DJOSER = {
    'SERIALIZERS': {
        'user_registration': 'account.serializers.UserSerializer',
    },
}

endpoing http://127.0.0.1:8000/auth/register/ , . , - !

+7

Source: https://habr.com/ru/post/1609037/


All Articles