from django.contrib.auth import get_user_model from django.utils.translation import gettext_lazy as _ from rest_framework import serializers from rest_framework.validators import UniqueValidator from .validators.username import usernameValidator class Pucko_User_Serializer(serializers.ModelSerializer): class Meta: model = get_user_model() fields = ( 'username', 'email', 'is_staff', 'date_joined', 'slug' ) read_only_fields = ('is_staff', 'date_joined', 'slug') lookup_field = 'slug' extra_kwargs = {'url': {'lookup_field': 'slug'}} class Pucko_CreateUser_Serializer(serializers.ModelSerializer): username = serializers.CharField(required=True, validators=[UniqueValidator(queryset=get_user_model().objects.all()), usernameValidator()]) password = serializers.CharField(required=True, write_only=True) password2 = serializers.CharField(required=True, write_only=True) class Meta: model = get_user_model() fields = ('username', 'password', 'password2') def validate(self, attrs): if attrs['password'] != attrs['password2']: raise serializers.ValidationError({"password": _("Password fields didn't match")}) return attrs def create(self, validated_data): user = get_user_model().objects.create( username=validated_data['username'] ) user.set_password(validated_data['password']) user.save() return user class Pucko_Login_Serializer(serializers.ModelSerializer): username = serializers.CharField(required=True) password = serializers.CharField(required=True, write_only=True) class Meta: model = get_user_model() fields = ('username', 'password') class Pucko_Renew_Serializer(serializers.Serializer): expiry = serializers.DateTimeField(read_only=True) token = serializers.CharField(max_length=65, read_only=True) user = Pucko_User_Serializer(read_only=True) class Meta: fields = ("expiry", "token", "user") read_only_fields = ("expiry", "token", "user") class Logout_Serializer(serializers.Serializer): class Meta: fields = () class Change_Password_Serializer(serializers.Serializer): old_password = serializers.CharField(required=True, write_only=True) new_password = serializers.CharField(required=True, write_only=True) message = serializers.CharField(read_only=True) class Meta: fields = ("old_password", "new_password", "message")