173 lines
6.0 KiB
Python
173 lines
6.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
@Remark: 用户管理
|
|
"""
|
|
from django.contrib.auth.hashers import make_password
|
|
from rest_framework import serializers
|
|
|
|
from mysystem.models import Users,Role
|
|
from utils.jsonResponse import SuccessResponse, ErrorResponse
|
|
from utils.permission import CustomPermission
|
|
from utils.serializers import CustomModelSerializer
|
|
from utils.validator import CustomUniqueValidator
|
|
from utils.viewset import CustomModelViewSet
|
|
from rest_framework.permissions import IsAuthenticated
|
|
from django.db.models import Q
|
|
from utils.filters import UsersManageTimeFilter
|
|
|
|
class UserSerializer(CustomModelSerializer):
|
|
"""
|
|
用户管理-序列化器
|
|
"""
|
|
roleNames = serializers.SerializerMethodField(read_only=True) # 新增自定义字段
|
|
deptName = serializers.SerializerMethodField(read_only=True) # 新增自定义字段
|
|
|
|
def get_deptName(self,obj):
|
|
try:
|
|
return obj.dept.name
|
|
except:
|
|
return ""
|
|
|
|
def get_roleNames(self,obj):
|
|
return list(obj.role.values_list('name', flat=True))
|
|
|
|
class Meta:
|
|
model = Users
|
|
read_only_fields = ["id"]
|
|
exclude = ['password','user_permissions','groups']
|
|
extra_kwargs = {
|
|
'post': {'required': False},
|
|
}
|
|
|
|
|
|
class UserCreateSerializer(CustomModelSerializer):
|
|
"""
|
|
管理员用户新增-序列化器
|
|
"""
|
|
username = serializers.CharField(max_length=50,validators=[CustomUniqueValidator(queryset=Users.objects.all(), message="账号必须唯一")])
|
|
password = serializers.CharField(required=False, default=make_password("123456"))
|
|
|
|
is_staff = serializers.BooleanField(required=False,default=True)#是否允许登录后台
|
|
|
|
def create(self, validated_data):
|
|
if "password" in validated_data.keys():
|
|
if validated_data['password']:
|
|
validated_data['password'] = make_password(validated_data['password'])
|
|
validated_data['identity'] = 1
|
|
return super().create(validated_data)
|
|
|
|
def save(self, **kwargs):
|
|
data = super().save(**kwargs)
|
|
data.post.set(self.initial_data.get('post', []))
|
|
return data
|
|
|
|
class Meta:
|
|
model = Users
|
|
fields = "__all__"
|
|
read_only_fields = ["id"]
|
|
extra_kwargs = {
|
|
'post': {'required': False},
|
|
}
|
|
|
|
|
|
class UserUpdateSerializer(CustomModelSerializer):
|
|
"""
|
|
用户修改-序列化器
|
|
"""
|
|
username = serializers.CharField(max_length=50,validators=[CustomUniqueValidator(queryset=Users.objects.all(), message="账号必须唯一")])
|
|
password = serializers.CharField(required=False, allow_blank=True)
|
|
|
|
def update(self, instance, validated_data):
|
|
if "password" in validated_data.keys():
|
|
if validated_data['password']:
|
|
validated_data['password'] = make_password(validated_data['password'])
|
|
return super().update(instance,validated_data)
|
|
|
|
def save(self, **kwargs):
|
|
data = super().save(**kwargs)
|
|
data.post.set(self.initial_data.get('post', []))
|
|
return data
|
|
|
|
class Meta:
|
|
model = Users
|
|
read_only_fields = ["id"]
|
|
fields = "__all__"
|
|
extra_kwargs = {
|
|
'post': {'required': False, 'read_only': True},
|
|
}
|
|
|
|
|
|
class UserViewSet(CustomModelViewSet):
|
|
"""
|
|
后台管理员用户接口:
|
|
"""
|
|
queryset = Users.objects.filter(identity=1,is_delete=False).order_by('-create_datetime')
|
|
serializer_class = UserSerializer
|
|
create_serializer_class = UserCreateSerializer
|
|
update_serializer_class = UserUpdateSerializer
|
|
search_fields = ('name','username')
|
|
filterset_class = UsersManageTimeFilter
|
|
|
|
def user_info(self,request):
|
|
"""获取当前用户信息"""
|
|
user = request.user
|
|
role_list = user.role.values_list('id',"name")
|
|
role_ids = [i[0] for i in role_list]
|
|
role_names = ""
|
|
if user.identity == 0:
|
|
role_names = "超级管理员"
|
|
else:
|
|
role_names_list = [i[1] for i in role_list]
|
|
role_names = ','.join(role_names_list)
|
|
dept = getattr(user, 'dept', None)
|
|
dept_info = {}
|
|
if dept:
|
|
dept_info = {
|
|
'dept_id': dept.id,
|
|
'dept_name': dept.name
|
|
}
|
|
result = {
|
|
"name":user.name,
|
|
"mobile":user.mobile,
|
|
"gender":user.gender,
|
|
"email":user.email,
|
|
"username":user.username,
|
|
"identity":user.identity,
|
|
"avatar": user.avatar,
|
|
"dept": user.dept_id,
|
|
"dept_info":dept_info,
|
|
"is_superuser": user.is_superuser,
|
|
"role_ids": role_ids,
|
|
"role_names":role_names,
|
|
}
|
|
return SuccessResponse(data=result,msg="获取成功")
|
|
|
|
def update_user_info(self,request):
|
|
"""修改当前用户信息"""
|
|
user = request.user
|
|
reqData = request.data
|
|
Users.objects.filter(id=user.id).update(email=reqData.get('email'),name=reqData.get('name'),gender=reqData.get('gender'),mobile=reqData.get('mobile'))
|
|
return SuccessResponse(data=None, msg="修改成功")
|
|
|
|
|
|
def change_password(self,request,*args, **kwargs):
|
|
"""密码修改"""
|
|
user = request.user
|
|
instance = Users.objects.filter(id=user.id,identity__in=[0,1]).first()
|
|
data = request.data
|
|
old_pwd = data.get('oldPassword')
|
|
new_pwd = data.get('newPassword')
|
|
new_pwd2 = data.get('newPassword2')
|
|
if instance:
|
|
if new_pwd != new_pwd2:
|
|
return ErrorResponse(msg="2次密码不匹配")
|
|
elif instance.check_password(old_pwd):
|
|
instance.password = make_password(new_pwd)
|
|
instance.save()
|
|
return SuccessResponse(data=None, msg="修改成功")
|
|
else:
|
|
return ErrorResponse(msg="旧密码不正确")
|
|
else:
|
|
return ErrorResponse(msg="未获取到用户")
|