0

Как обрабатывать регистрацию пользователя и API с помощью django_rest_framework? В частности, как бы я создал поле пароля в UserSerializerКак обрабатывать регистрацию пользователя через API django_rest_framework

class NewUserSerializer(serializer.Serializers): 
    first_name = serializers.CharField(required=True, max_length=30) 
    last_name = serializers.CharField(required=True, max_length=30) 
    username = serlializers.CharField(required=True, max_length=30) 
    email = serializers.EmailField(required=True) 
    password = ??? 

    def restore_object(self, attrs, instance=None): 
     if instance: 
      instance.username = attrs.get('username', instance.username) 
      instance.first_name = attrs.get('first_name', instance.first_name) 
      instance.last_name = attrs.get('last_name', instance.last_name) 
      instance.email = attrs.get('email', instance.email) 
# Would the instance.password field be necessary? 
      instance.password = attrs.get('password', instance.password) 
     else: 
      return User(**attrs) 

ответ

1

Вы можете просто использовать CharField пароль. И вам вообще не нужен объект restore_object. Вы можете просто сделать это, определите поля, как вы, а затем:

serializer = NewUserSerializer(data=request.DATA) 
    if serializer.is_valid():   
     email = serializer.object["email"] 
     password = serializer.object["password"] 
     # do the stuff you want here 
+0

Почему я не хочу добавлять метод restore_object? Что делать, если пользователь решает изменить свой адрес электронной почты или пароль? – user1876508

+0

Я просто имел в виду, если бы он был включен для регистрации, эта логика может выйти из сериализатора. в любом случае, если вы хотите, чтобы он возвращал фактический экземпляр объекта пользователя, а ваша проблема - это пароль, вы должны просто использовать CharField для пароля, а в объекте restore_object используйте метод set_password, а не прямой присвоение. – Aldarund