72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
from rest_framework import serializers
|
|
from allauth.account.adapter import get_adapter
|
|
from allauth.account.utils import setup_user_email
|
|
from dj_rest_auth.registration.serializers import RegisterSerializer
|
|
from dj_rest_auth.serializers import UserDetailsSerializer
|
|
from .models import ParadiseUser
|
|
|
|
|
|
class ParadiseUserSerializer(serializers.ModelSerializer):
|
|
"""
|
|
用于用户数据完整操作的序列化器
|
|
管理员使用
|
|
"""
|
|
class Meta:
|
|
model = ParadiseUser
|
|
fields = '__all__'
|
|
extra_kwargs = {
|
|
'password': {'write_only': True} # 确保密码字段永远不会被序列化返回
|
|
}
|
|
|
|
|
|
class UserInfoSerializer(serializers.ModelSerializer):
|
|
"""
|
|
用于展示用户信息的序列化器
|
|
用户自己查看
|
|
"""
|
|
class Meta:
|
|
model = ParadiseUser
|
|
fields = ['id', 'username', 'email', 'phone_number', 'date_joined', 'last_login',
|
|
'favorability', 'gender', 'resident_city', 'birthday', 'zodiac_sign',
|
|
'mbti', 'interests', 'social_identity']
|
|
read_only_fields = ['id', 'date_joined', 'last_login']
|
|
|
|
|
|
class ProfileUpdateSerializer(serializers.ModelSerializer):
|
|
"""
|
|
用于用户更新个人资料的序列化器
|
|
"""
|
|
class Meta:
|
|
model = ParadiseUser
|
|
fields = ['gender', 'resident_city', 'birthday', 'zodiac_sign',
|
|
'mbti', 'interests', 'social_identity']
|
|
|
|
|
|
class CustomUserDetailsSerializer(UserDetailsSerializer):
|
|
"""
|
|
自定义 dj_rest_auth 用户详情序列化器
|
|
确保不返回敏感字段
|
|
"""
|
|
class Meta(UserDetailsSerializer.Meta):
|
|
model = ParadiseUser
|
|
exclude = ['password', 'user_permissions', 'groups']
|
|
read_only_fields = ['id', 'date_joined', 'last_login']
|
|
|
|
|
|
class CustomRegisterSerializer(RegisterSerializer):
|
|
email = serializers.EmailField(required=False)
|
|
phone_number = serializers.CharField(required=False, allow_blank=True, max_length=15)
|
|
|
|
def get_cleaned_data(self):
|
|
data = super().get_cleaned_data()
|
|
data['phone_number'] = self.validated_data.get('phone_number', '')
|
|
return data
|
|
|
|
def save(self, request):
|
|
user = super().save(request)
|
|
user.phone_number = self.cleaned_data.get('phone_number')
|
|
user.save()
|
|
return user
|
|
|
|
|