Django: Сериализатор VS CustomUserManager - PullRequest
0 голосов
/ 02 апреля 2020

Мне было интересно, будучи новичком в Django и пробуя разные практики, мне было интересно, в чем разница между использованием методов с CustomUserManager и использованием подобных методов в serializer.

Для Например, я создаю User, и для правильного сохранения пароля я поставил метод, используя user.set_password()

Когда я использую только serializer, это выглядит так:

from rest_framework import serializers
from django.contrib.auth import get_user_model
from ..models.model_user import *


class UserIndexSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = [
            'id',
            'username',
            'password',
            'first_name',
            'last_name',
            'email',
            'is_a',
            'is_o'
        ]

class UserCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = User
        fields = [
            'username',
            'password',
            'first_name',
            'last_name',
            'email',
            'is_a',
            'is_o'
        ]
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User(
            username=validated_data['username'],
            password=validated_data['password'],
            first_name=validated_data['first_name'],
            last_name=validated_data['last_name'],
            email=validated_data['email'],
            is_a=validated_data['is_a'],
            is_o=validated_data['is_o']
            )
        user.set_password(validated_data['password'])
        user.save()
        return user

class UserDetailsSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

И когда я использую CustomUserManager, это выглядит так:

from django.db import models
from django.contrib.auth.base_user import BaseUserManager


class CustomUserManager(BaseUserManager):

  def create_user(self, email, password, **extra_fields):
      """
      Create and save a User with the given email and password.
      """
      if not email:
          raise ValueError(_('The Email must be set'))
      email = self.normalize_email(email)
      user = self.model(email=email, **extra_fields)
      user.set_password(password)
      user.save()
      return user

  def create_superuser(self, email, password, **extra_fields):
      """
      Create and save a SuperUser with the given email and password.
      """
      extra_fields.setdefault('is_staff', True)
      extra_fields.setdefault('is_superuser', True)
      extra_fields.setdefault('is_active', True)

      if extra_fields.get('is_staff') is not True:
          raise ValueError(_('Superuser must have is_staff=True.'))
      if extra_fields.get('is_superuser') is not True:
          raise ValueError(_('Superuser must have is_superuser=True.'))
      return self.create_user(email, password, **extra_fields)

Но использование только Serializer отлично работает, так зачем мне использовать CustomUserManager ?

Какая лучшая практика?

Спасибо за ответы!

...