0

Comment gérer l'enregistrement des utilisateurs et l'API en utilisant django_rest_framework? Plus précisément, comment pourrais-je mettre en place un champ de mot de passe dans le UserSerializerComment gérer l'enregistrement des utilisateurs sur l'API basée sur 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) 

Répondre

1

Vous pouvez simplement utiliser un CharField mot de passe. Et vous n'avez même pas besoin d'un restore_object. Vous pouvez simplement le faire comme ceci, définir des champs comme vous le faites et puis:

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

Pourquoi ne pas ajouter une méthode restore_object? Que se passe-t-il si un utilisateur décide de changer son adresse e-mail ou son mot de passe? – user1876508

+0

J'étais juste méchant si c'était pour l'enregistrement cette logique peut sortir du sérialiseur. de toute façon, si vous voulez qu'il retourne l'instance réelle de l'objet Utilisateur et que vous vous souciez d'un mot de passe, utilisez simplement CharField pour le mot de passe et dans restore_object utilisez une méthode set_password, pas une affectation directe. – Aldarund

Questions connexes