You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.9 KiB
102 lines
2.9 KiB
from rest_framework.serializers import ModelSerializer, ValidationError
|
|
from rest_framework import serializers
|
|
from erp_system.models import UserModel
|
|
import re
|
|
|
|
# 用户注册基本的序列化类
|
|
from erp_system.serializers.roles_serialzier import RolesSerializer
|
|
|
|
|
|
class UserAddSerializer(ModelSerializer):
|
|
"""
|
|
仅仅用于用户注册
|
|
"""
|
|
|
|
class Meta:
|
|
model = UserModel
|
|
fields = ('id', 'username', 'password', 'phone', 'real_name')
|
|
extra_kwargs = {
|
|
'username': {
|
|
'max_length': 12,
|
|
'min_length': 2
|
|
},
|
|
'password': {
|
|
'max_length': 8,
|
|
'min_length': 3,
|
|
'write_only': True
|
|
|
|
},
|
|
}
|
|
|
|
def validate_phone(self, phone):
|
|
"""
|
|
自定义验证手机号码,规则:函数名=validate_<field_name>
|
|
"""
|
|
if not re.match(r'^1[3589]\d{9}$', phone):
|
|
raise ValidationError("请输入正确的手机号码")
|
|
return phone
|
|
|
|
def create(self, validated_data):
|
|
"""重写用户注册,否则直接把明文密码保存到数据库"""
|
|
user = UserModel.objects.create_user(**validated_data)
|
|
return user
|
|
|
|
|
|
from rest_framework.serializers import ModelSerializer, ValidationError, CharField, ValidationError
|
|
|
|
|
|
class UserUpdateDeleteSerializer(ModelSerializer):
|
|
"""
|
|
只用于:修改用户(修改用户的角色,修改用户的部门)和删除用户
|
|
"""
|
|
|
|
class Meta:
|
|
model = UserModel
|
|
fields = ('id', 'roles', 'dept')
|
|
|
|
|
|
class ResetPasswordSerializer(ModelSerializer):
|
|
"""
|
|
重置密码序列化器,只用与修改密码
|
|
"""
|
|
confirm_password = CharField(write_only=True)
|
|
|
|
class Meta:
|
|
model = UserModel
|
|
fields = ['id', 'password', 'confirm_password']
|
|
extra_kwargs = {
|
|
'password': {
|
|
'write_only': True
|
|
}
|
|
}
|
|
|
|
def validate(self, attrs):
|
|
# partial_update, 局部更新required验证无效, 手动验证数据
|
|
password = attrs.get('password')
|
|
confirm_password = attrs.get('confirm_password')
|
|
if not password:
|
|
raise ValidationError('字段password为必填项')
|
|
if not confirm_password:
|
|
raise ValidationError('字段confirm_password为必填项')
|
|
if password != confirm_password:
|
|
raise ValidationError('两次密码不一致')
|
|
return attrs
|
|
|
|
def save(self, *args):
|
|
# 重写save方法, 保存密码
|
|
self.instance.set_password(self.validated_data.get('password'))
|
|
self.instance.save()
|
|
return self.instance
|
|
|
|
|
|
class UserGetSerializer(ModelSerializer):
|
|
"""
|
|
只用于:查询用户
|
|
"""
|
|
roles = RolesSerializer(many=True, read_only=True)
|
|
dept_name = serializers.CharField(source='dept.name')
|
|
|
|
class Meta:
|
|
model = UserModel
|
|
fields = ('id', 'username', 'phone', 'real_name', 'roles', 'dept_name')
|