lty/qy_lty/userapp/serializers.py
2026-03-17 13:17:02 +08:00

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