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.
128 lines
3.8 KiB
128 lines
3.8 KiB
|
10 months ago
|
import uuid
|
||
|
|
|
||
|
|
from rest_framework import serializers
|
||
|
|
|
||
|
|
from .role_serializer import RoleListSerializer
|
||
|
|
from ..models import UserProfile, Company
|
||
|
|
import re
|
||
|
|
|
||
|
|
|
||
|
|
class UserListSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
用户列表的序列化
|
||
|
|
"""
|
||
|
|
roles = serializers.SerializerMethodField()
|
||
|
|
company = serializers.SerializerMethodField()
|
||
|
|
parent_user = serializers.SerializerMethodField()
|
||
|
|
|
||
|
|
def get_roles(self, obj):
|
||
|
|
return obj.roles.values()
|
||
|
|
|
||
|
|
def get_company(self, obj):
|
||
|
|
return obj.company.values()
|
||
|
|
|
||
|
|
def get_parent_user(self, obj):
|
||
|
|
if obj.parent_id:
|
||
|
|
parent = UserProfile.objects.filter(id=obj.parent_id).values()
|
||
|
|
else:
|
||
|
|
parent = None
|
||
|
|
return parent
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = UserProfile
|
||
|
|
fields = ["id", "username", "name", "mobile", "email", "image", "area_name",
|
||
|
|
"is_active", "roles", "is_superuser", 'companyMid', 'company', 'label', 'is_sub', 'parent_user']
|
||
|
|
depth = 1
|
||
|
|
|
||
|
|
|
||
|
|
class UserModifySerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
用户编辑的序列化
|
||
|
|
"""
|
||
|
|
mobile = serializers.CharField(max_length=11)
|
||
|
|
username = serializers.CharField(required=True, allow_blank=False)
|
||
|
|
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = UserProfile
|
||
|
|
fields = ["id", "username", "name", "mobile", "email", "image",
|
||
|
|
"is_active", "roles", "is_superuser", 'label', 'company']
|
||
|
|
|
||
|
|
def validate_username(self, value):
|
||
|
|
return value
|
||
|
|
|
||
|
|
def validate_mobile(self, mobile):
|
||
|
|
REGEX_MOBILE = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$"
|
||
|
|
if not re.match(REGEX_MOBILE, mobile):
|
||
|
|
raise serializers.ValidationError("手机号码不合法")
|
||
|
|
user = UserProfile.objects.filter(mobile=mobile).first()
|
||
|
|
if user:
|
||
|
|
user_id = self.context['view'].kwargs.get("pk", "0")
|
||
|
|
# print(user_id, user.id)
|
||
|
|
if int(user_id) == user.id:
|
||
|
|
return mobile
|
||
|
|
else:
|
||
|
|
raise serializers.ValidationError("手机号 "+mobile+" 已经被注册")
|
||
|
|
return mobile
|
||
|
|
|
||
|
|
|
||
|
|
class UserCreateSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
创建用户序列化
|
||
|
|
"""
|
||
|
|
username = serializers.CharField(required=True, allow_blank=False)
|
||
|
|
mobile = serializers.CharField(max_length=11)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = UserProfile
|
||
|
|
fields = ["id", "MainId", "username", "name", "mobile", "email", "is_active", "area_name", "roles",
|
||
|
|
"password", "is_superuser", "companyMid", "company", 'label']
|
||
|
|
|
||
|
|
def validate_username(self, username):
|
||
|
|
if UserProfile.objects.filter(username=username):
|
||
|
|
raise serializers.ValidationError("用户名 "+username+" 已存在")
|
||
|
|
return username
|
||
|
|
|
||
|
|
def validate_mobile(self, mobile):
|
||
|
|
REGEX_MOBILE = "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$"
|
||
|
|
if not re.match(REGEX_MOBILE, mobile):
|
||
|
|
raise serializers.ValidationError("手机号码不合法")
|
||
|
|
if UserProfile.objects.filter(mobile=mobile):
|
||
|
|
raise serializers.ValidationError("手机号 "+mobile+" 已经被注册")
|
||
|
|
return mobile
|
||
|
|
|
||
|
|
def perform_create(self, serializer):
|
||
|
|
usermid = uuid.uuid4()
|
||
|
|
serializer.save(MainId=usermid)
|
||
|
|
|
||
|
|
|
||
|
|
class UserInfoListSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
公共users
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = UserProfile
|
||
|
|
fields = ("id", "name", "mobile", "email")
|
||
|
|
|
||
|
|
|
||
|
|
class CompanySerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
公司序列化
|
||
|
|
"""
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Company
|
||
|
|
fields = "__all__"
|
||
|
|
|
||
|
|
|
||
|
|
class CompanyRoleSerializer(serializers.ModelSerializer):
|
||
|
|
"""
|
||
|
|
公司角色序列化
|
||
|
|
"""
|
||
|
|
roles = RoleListSerializer(many=True)
|
||
|
|
|
||
|
|
class Meta:
|
||
|
|
model = Company
|
||
|
|
fields = "__all__"
|