auth serializer
This commit is contained in:
0
backend/api/auth/__init__.py
Normal file
0
backend/api/auth/__init__.py
Normal file
70
backend/api/auth/serializers.py
Normal file
70
backend/api/auth/serializers.py
Normal file
@@ -0,0 +1,70 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.utils import IntegrityError
|
||||
|
||||
from api.models import UserProfile
|
||||
|
||||
class UserResponceSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField()
|
||||
email = serializers.EmailField()
|
||||
name = serializers.CharField(source='first_name')
|
||||
surname = serializers.CharField(source='last_name')
|
||||
phone_number = serializers.CharField(source='userprofile.phone_number')
|
||||
image = serializers.CharField(source='userprofile.image')
|
||||
uuid = serializers.SerializerMethodField()
|
||||
def get_uuid(self, obj):
|
||||
try:
|
||||
return str(obj.userprofile.uuid)[:6]
|
||||
except Exception as e:
|
||||
print(f"Serializer UUID Error: {e}") # лог ошибки
|
||||
return None
|
||||
|
||||
class ClientRegisterSerializer(serializers.ModelSerializer):
|
||||
phone_number = serializers.CharField(max_length=13)
|
||||
privacy_accepted = serializers.BooleanField()
|
||||
email = serializers.EmailField(required=True)
|
||||
username = serializers.CharField(source='first_name')
|
||||
uuid = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = User
|
||||
fields = ['id', 'uuid', 'username', 'email', 'password', 'phone_number', 'privacy_accepted']
|
||||
extra_kwargs = {
|
||||
'password' : {'write_only':True},
|
||||
'email' : {'required' : True, 'unique': True},
|
||||
'phone_number' : {'required' : True, 'unique': True},
|
||||
}
|
||||
|
||||
def validate_phone_number(self, value):
|
||||
if len(value) > 18:
|
||||
raise serializers.ValidationError("Номер телефона не может быть таким длинным")
|
||||
return value
|
||||
|
||||
def validate_privacy_accepted(self, value):
|
||||
if not value:
|
||||
raise serializers.ValidationError("Необходимо принять условия политики конфиденциальности")
|
||||
|
||||
def create(self, validated_data):
|
||||
privacy_accepted = validated_data.pop('privacy_accepted')
|
||||
phone_number = validated_data.pop('phone_number')
|
||||
name = validated_data.pop('first_name')
|
||||
|
||||
try:
|
||||
user = User.objects.create_user(
|
||||
username=validated_data['name'],
|
||||
email=validated_data['email'],
|
||||
password=validated_data['password'],
|
||||
first_name = name,
|
||||
)
|
||||
|
||||
UserProfile.objects.create(
|
||||
user=user,
|
||||
phone_number=phone_number,
|
||||
privacy_accepted=privacy_accepted
|
||||
)
|
||||
|
||||
return user
|
||||
|
||||
except IntegrityError:
|
||||
raise serializers.ValidationError({"email": "Пользователь с таким email уже существует"})
|
||||
6
backend/api/auth/views.py
Normal file
6
backend/api/auth/views.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from rest_framework import serializers
|
||||
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.utils import IntegrityError
|
||||
from django.contrib.auth.hashers import make_password
|
||||
|
||||
Reference in New Issue
Block a user