p00003/accounts/serializers.py

58 lines
1.8 KiB
Python

from rest_framework import serializers
from accounts.models import CustomUser
from django.contrib.auth import authenticate
class CustomUserSerializer(serializers.ModelSerializer):
class Meta:
model = CustomUser
fields = ('id', 'username', 'email')
class UserRegistrationSerializer(serializers.ModelSerializer):
password1 = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)
class Meta:
model = CustomUser
fields = ('id', 'username', 'password1', 'password2', 'email')
extra_kwargs = {'password': {'write_only': True}}
def validate(self, attrs):
if attrs['password1'] != attrs['password2']:
raise serializers.ValidationError("Passwords must match")
password = attrs.get('password1', '')
if len(password) < 8:
raise serializers.ValidationError(
"Passwords must be at least 8 characters")
return attrs
def create(self, validated_data):
password = validated_data.pop('password1')
validated_data.pop('password2')
return CustomUser.objects.create_user(
password=password,
**validated_data)
# user = RegisteredUser(**validated_data)
# user = set_password(validated_data['password'])
# user.save()
# return user
class UserLoginSerializer(serializers.ModelSerializer):
email = serializers.CharField()
password = serializers.CharField(write_only=True)
class Meta:
model = CustomUser
fields = ('id', 'username', 'password1', 'password2', 'email')
extra_kwargs = {'password': {'write_only': True}}
def validate(self, data):
user = authenticate(**data)
if user and user.is_active:
return user
raise serializers.ValidationError("Credential Error")