61 lines
1.7 KiB
Python
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
|