Reputation: 77
Hello i want to create a simple registration api for my django rest api But when i want to test the registration with curl i get always get this error: {"username":["This field is required."],"password":["This field is required."]}
This is my curl cmd:
curl --request POST --url http://localhost:8000/auth/register/ --header 'content-type: application/json' --data '{"username": "user1","password": "hunter2"}'
views.py RegistrationApi
class RegistrationAPI(generics.GenericAPIView):
serializer_class = CreateUserSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)
})
serializers.py
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'password')
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(validated_data['username'],
None,
validated_data['password'])
return user
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'username')
Maybe there is something wrong with the serializers? I already tried so figure out where the problem is but i cant find it
Upvotes: 3
Views: 2578
Reputation: 2357
Try this:
class CreateUserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = User
fields = ('id', 'username', 'email', 'password')
extra_kwargs = {'password' : {'write_only': True}}
def create(self, validated_data):
user = User.objects.create_user(**validated_data)
return user
Or refer to link Django Rest Framework registrations
Upvotes: 2