2019-12-03 13:22:18 +08:00
|
|
|
from django.conf import settings
|
2019-12-03 14:53:47 +08:00
|
|
|
from django.contrib.auth import login
|
2019-12-03 13:22:18 +08:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
from rest_framework.exceptions import ValidationError
|
|
|
|
|
|
|
|
|
|
from users.models import User
|
|
|
|
|
|
|
|
|
|
|
2020-07-23 23:56:24 +08:00
|
|
|
class PublicUserSerializer(serializers.HyperlinkedModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = User
|
|
|
|
|
fields = (
|
|
|
|
|
'username',
|
|
|
|
|
'gravatar',
|
|
|
|
|
settings.DRF_URL_FIELD_NAME,
|
|
|
|
|
)
|
|
|
|
|
extra_kwargs = {
|
|
|
|
|
settings.DRF_URL_FIELD_NAME: {
|
|
|
|
|
"view_name": "public-users:user-detail",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2019-12-03 13:22:18 +08:00
|
|
|
class UserSerializer(serializers.HyperlinkedModelSerializer):
|
|
|
|
|
class Meta:
|
|
|
|
|
model = User
|
|
|
|
|
fields = (
|
|
|
|
|
'username',
|
|
|
|
|
'email',
|
|
|
|
|
'gravatar',
|
|
|
|
|
'password',
|
|
|
|
|
'password_repeat',
|
|
|
|
|
settings.DRF_URL_FIELD_NAME,
|
|
|
|
|
)
|
|
|
|
|
extra_kwargs = {
|
|
|
|
|
settings.DRF_URL_FIELD_NAME: {
|
|
|
|
|
"view_name": "users:user-detail",
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
password = serializers.CharField(
|
|
|
|
|
write_only=True,
|
|
|
|
|
required=True,
|
|
|
|
|
allow_blank=False,
|
|
|
|
|
min_length=6,
|
|
|
|
|
max_length=32,
|
|
|
|
|
)
|
|
|
|
|
password_repeat = serializers.CharField(
|
|
|
|
|
write_only=True,
|
|
|
|
|
required=True,
|
|
|
|
|
allow_blank=False,
|
|
|
|
|
min_length=6,
|
|
|
|
|
max_length=32,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
def create(self, validated_data):
|
2019-12-05 20:18:05 +08:00
|
|
|
if validated_data['password'] != validated_data['password_repeat']:
|
2019-12-03 13:22:18 +08:00
|
|
|
raise ValidationError(
|
|
|
|
|
detail={
|
|
|
|
|
"password_repeat": "Tow password doesn't match",
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
validated_data.pop('password_repeat')
|
|
|
|
|
password = validated_data.pop('password')
|
|
|
|
|
user = super(UserSerializer, self).create(
|
|
|
|
|
validated_data,
|
|
|
|
|
)
|
|
|
|
|
user.set_password(password)
|
|
|
|
|
user.save()
|
2019-12-03 14:53:47 +08:00
|
|
|
login(
|
|
|
|
|
self.context['request'],
|
|
|
|
|
user=user,
|
|
|
|
|
backend=settings.AUTHENTICATION_BACKENDS[0],
|
|
|
|
|
)
|
2019-12-03 13:22:18 +08:00
|
|
|
return user
|