from django.contrib.auth import get_user_model from django.contrib.auth.models import User from rest_framework import serializers from rest_framework.authtoken.models import Token from rest_framework.authtoken.views import ObtainAuthToken from rest_framework.response import Response UserModel = get_user_model() class UserSerializer(serializers.HyperlinkedModelSerializer): password = serializers.CharField(write_only=True) def create(self, validated_data): user = UserModel.objects.create( username=validated_data['username'] ) user.set_password(validated_data['password']) user.email = validated_data['username'] user.last_name = self.initial_data['last_name'] user.first_name = self.initial_data['first_name'] user.save() return user class Meta: model = User fields = ['id', 'username', 'email', 'password', 'last_name', 'first_name', 'last_login'] class CurrentUserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ['id', 'username', 'email', 'first_name', 'last_name', 'last_login'] class CustomAuthToken(ObtainAuthToken): def post(self, request, *args, **kwargs): serializer = self.serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) user = serializer.validated_data['user'] token, created = Token.objects.get_or_create(user=user) return Response({ 'token': token.key, 'user_id': user.pk, 'email': user.email, 'last_name': user.last_name, 'first_name': user.first_name })