serializers.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from django.contrib.auth import get_user_model
  2. from django.contrib.auth.models import User
  3. from rest_framework import serializers
  4. from rest_framework.authtoken.models import Token
  5. from rest_framework.authtoken.views import ObtainAuthToken
  6. from rest_framework.response import Response
  7. UserModel = get_user_model()
  8. class UserSerializer(serializers.HyperlinkedModelSerializer):
  9. password = serializers.CharField(write_only=True)
  10. def create(self, validated_data):
  11. user = UserModel.objects.create(
  12. username=validated_data['username']
  13. )
  14. user.set_password(validated_data['password'])
  15. user.email = validated_data['username']
  16. user.last_name = self.initial_data['last_name']
  17. user.first_name = self.initial_data['first_name']
  18. user.save()
  19. return user
  20. class Meta:
  21. model = User
  22. fields = ['id', 'username', 'email', 'password', 'last_name', 'first_name', 'last_login']
  23. class CurrentUserSerializer(serializers.ModelSerializer):
  24. class Meta:
  25. model = User
  26. fields = ['id', 'username', 'email', 'first_name', 'last_name', 'last_login']
  27. class CustomAuthToken(ObtainAuthToken):
  28. def post(self, request, *args, **kwargs):
  29. serializer = self.serializer_class(data=request.data,
  30. context={'request': request})
  31. serializer.is_valid(raise_exception=True)
  32. user = serializer.validated_data['user']
  33. token, created = Token.objects.get_or_create(user=user)
  34. return Response({
  35. 'token': token.key,
  36. 'user_id': user.pk,
  37. 'email': user.email,
  38. 'last_name': user.last_name,
  39. 'first_name': user.first_name
  40. })