from django.contrib.auth import authenticate from rest_framework import serializers from django.contrib.auth.models import User, Group class UserSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = User fields = ["url", "username", "email", "password", "groups"] class GroupSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Group fields = ["url", "name"] class AuthSerializer(serializers.Serializer): username = serializers.CharField() password = serializers.CharField( style={"input_type": "password"}, trim_whitespace=False ) def validate(self, attrs): username = attrs.get("username") password = attrs.get("password") user = authenticate( request=self.context.get("request"), username=username, password=password, ) if not user: msg = f"Invalid username or password." raise serializers.ValidationError(msg, code="authentication") attrs["user"] = user return