Files
SkillHub/backend/project/api/users/serializers.py
T
Data-Name-ID 851017847c [fix] auth
2024-04-01 17:31:33 +03:00

61 lines
1.7 KiB
Python

from django.contrib.auth.hashers import check_password, make_password
from rest_framework import serializers
from api.users.models import User
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = (
"email",
"birthday",
"avatar",
"country",
"city",
"bio",
"experience",
"password",
"first_name",
"last_name",
"specialization",
"achievements",
"username",
"skills",
)
extra_kwargs = {"password": {"write_only": True}}
def validate(self, attrs):
if User.objects.filter(username=attrs["username"]).exists():
raise serializers.ValidationError(
{"username": "Username already exists"}
)
return super().validate(attrs)
def create(self, validated_data):
validated_data["password"] = make_password(
validated_data["password"],
)
return super().create(validated_data)
class ChangePasswordSerializer(serializers.Serializer):
old_password = serializers.CharField(write_only=True)
new_password = serializers.CharField(source="password", write_only=True)
class Meta:
model = User
fields = ("old_password", "new_password")
def validate_old_password(self, value):
if not check_password(value, self.instance.password):
msg = "Wrong password"
raise serializers.ValidationError(msg)
return value
def update(self, instance, validated_data):
instance.set_password(validated_data["password"])
instance.save()
return instance