You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
243 lines
9.9 KiB
Python
243 lines
9.9 KiB
Python
import json
|
|
import logging
|
|
|
|
from django.contrib.auth import authenticate
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.db import transaction
|
|
from django.shortcuts import render
|
|
|
|
# Create your views here.
|
|
from rest_framework import viewsets
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
from django.contrib.auth.models import Group
|
|
from app.pagination import MyPageNumberPagination
|
|
from app.utils import generate_token, decode_token_exp_time
|
|
from department.models import Department
|
|
from .models import UserProfile
|
|
from .serializers import UserSerializer
|
|
from .utils import update_user_querydict
|
|
|
|
logger = logging.getLogger('mylogger')
|
|
|
|
|
|
class UserViewSet(viewsets.GenericViewSet):
|
|
def tp_login(self, request, *args, **kwargs):
|
|
"""登录 POST"""
|
|
data = request.data
|
|
username = data.get('username')
|
|
password = data.get('password')
|
|
login_user = authenticate(username=username, password=password)
|
|
if login_user and login_user.is_active and login_user.status == 1:
|
|
# 生成token
|
|
token = generate_token(login_user)
|
|
response = {
|
|
'success': True,
|
|
'msg': '登录成功',
|
|
'data': {
|
|
'username': login_user.username,
|
|
'roles': ['admin'] if login_user.is_superuser else ['common'],
|
|
'accessToken': token,
|
|
'expires': decode_token_exp_time(token)
|
|
}
|
|
}
|
|
return Response(response)
|
|
else:
|
|
response = {
|
|
'success': False,
|
|
'msg': '登录失败',
|
|
'data': {
|
|
'username': None,
|
|
'roles': [],
|
|
'accessToken': None,
|
|
'expires': None
|
|
}
|
|
}
|
|
return Response(response)
|
|
|
|
def create(self, request, *args, **kwargs):
|
|
"""注册 POST 用户名 手机号 状态 性别 部门"""
|
|
data = request.data
|
|
username = data.get('username')
|
|
if not username:
|
|
return Response({'msg': '用户名不能为空'})
|
|
phone_number = data.get('phone_number')
|
|
gender = data.get('gender')
|
|
password = data.get('password', '#Yaxin0504')
|
|
# role = data.get('role')
|
|
# role_obj = Group.objects.filter(name=role).first()
|
|
department_id = data.get('department_id')
|
|
department_obj = Department.objects.filter(id=department_id).first()
|
|
status = data.get('status', 1)
|
|
try:
|
|
if UserProfile.objects.filter(username=username).first():
|
|
return Response({'msg': '该用户名已存在,请换一个'})
|
|
user = UserProfile.objects.create_user(username=username, password=password, department=department_obj, status=status, gender=gender, phone_number=phone_number)
|
|
# user.groups.add(role_obj)
|
|
# user.save()
|
|
return Response({'msg': '添加成功', 'success': True})
|
|
except Exception as e:
|
|
response = {
|
|
"msg": f'添加失败, 原因:{e}'
|
|
}
|
|
return Response(response)
|
|
|
|
def query_users(self, request, *args, **kwargs):
|
|
"""查询所有用户,默认全部,可根据部门查询"""
|
|
query_params = dict(request.query_params)
|
|
logger.info(query_params)
|
|
querydict = update_user_querydict(query_params)
|
|
logger.info(querydict)
|
|
if query_params.get('department_id') and query_params.get('department_id') != ['']:
|
|
department_id = ''.join(query_params.get('department_id'))
|
|
depart_obj = Department.objects.filter(id=department_id).first()
|
|
if not depart_obj.parent_id:
|
|
# 父级部门
|
|
dp_ids = list(Department.objects.filter(parent_id=depart_obj.id).values_list('id', flat=True).distinct())
|
|
else:
|
|
dp_ids = [depart_obj.id]
|
|
queryset = UserProfile.objects.filter(department_id__in=dp_ids, **querydict).order_by('-id')
|
|
else:
|
|
queryset = UserProfile.objects.filter(**querydict).order_by('-id')
|
|
paginator = MyPageNumberPagination()
|
|
paginated_queryset = paginator.paginate_queryset(queryset, request)
|
|
serializer = UserSerializer(paginated_queryset, many=True)
|
|
paginator_response = paginator.get_paginated_response(serializer.data)
|
|
response_data = {
|
|
'count': paginator_response.data['count'],
|
|
'next': paginator_response.data['next'],
|
|
'previous': paginator_response.data['previous'],
|
|
'results': list(paginator_response.data['results']),
|
|
}
|
|
results = response_data.get('results')
|
|
res_list = json.loads(json.dumps(results))
|
|
for res_dict in res_list:
|
|
department_obj = Department.objects.filter(id=res_dict.get('department')).first()
|
|
if department_obj:
|
|
res_dict['department_name'] = department_obj.name
|
|
res_dict['department_id'] = res_dict.pop('department')
|
|
else:
|
|
res_dict['department_name'] = '暂无部门'
|
|
res_dict['department_id'] = '暂无'
|
|
response_data['results'] = res_list
|
|
return Response(response_data)
|
|
|
|
# def set_user_role(self, request, *args, **kwargs):
|
|
# try:
|
|
# user_id = request.data.get('user_id')
|
|
# user = UserProfile.objects.get(id=user_id)
|
|
# group = Group.objects.get(name=request.data.get('role_name'))
|
|
# is_member = group.user_set.filter(id=user.id).exists()
|
|
# if is_member:
|
|
# return Response({'msg': f'用户{user.username}已经是{group.name}啦'})
|
|
# user.groups.add(group)
|
|
# user.save()
|
|
# return Response({'msg': '修改用户角色成功'})
|
|
# except UserProfile.DoesNotExist:
|
|
# return Response({'msg': '该用户不存在'})
|
|
# except Group.DoesNotExist:
|
|
# return Response({'msg': '该角色不存在'})
|
|
# except Exception as e:
|
|
# return Response({'msg': f'更改用户角色失败: {e}'})
|
|
|
|
def update_user(self, request, pk, *args, **kwargs):
|
|
data = request.data
|
|
if 'username' in data:
|
|
user_obj = UserProfile.objects.exclude(id=pk).filter(username=data.get('username')).first()
|
|
if user_obj:
|
|
return Response({'msg': '更新失败,该用户名已存在,请换一个'})
|
|
# user_id = data.pop('user_id', None)
|
|
if 'password' in data:
|
|
# hashed_pwd = make_password(data.get('password'))
|
|
data['password'] = make_password(data.pop('password'))
|
|
try:
|
|
with transaction.atomic():
|
|
user = UserProfile.objects.filter(id=pk).update(**data)
|
|
return Response({'msg': '更新成功', 'success': True})
|
|
except UserProfile.DoesNotExist:
|
|
return Response({'msg': '该用户不存在'})
|
|
except Exception as e:
|
|
return Response({'msg': f'更新失败,原因{e}'})
|
|
|
|
def delete_user(self, request, pk, *args, **kwargs):
|
|
try:
|
|
with transaction.atomic():
|
|
user = UserProfile.objects.filter(id=pk).delete()
|
|
return Response({'msg': '删除成功', 'success': True})
|
|
except UserProfile.DoesNotExist:
|
|
return Response({'msg': '该用户不存在'})
|
|
except Exception as e:
|
|
return Response({'msg': f'删除失败,原因{e}'})
|
|
|
|
|
|
# class RoleView(APIView):
|
|
# def get(self, request):
|
|
# queryset = Group.objects.all().order_by('-id')
|
|
# paginator = MyPageNumberPagination()
|
|
# paginated_queryset = paginator.paginate_queryset(queryset, request)
|
|
#
|
|
# results = []
|
|
# for group in paginated_queryset:
|
|
# results.append({
|
|
# 'id': group.id,
|
|
# 'name': group.name,
|
|
# })
|
|
#
|
|
# response = {
|
|
# 'count': paginator.page.paginator.count,
|
|
# 'next': paginator.get_next_link(),
|
|
# 'previous': paginator.get_previous_link(),
|
|
# 'results': results
|
|
# }
|
|
#
|
|
# return Response(response)
|
|
#
|
|
# def post(self, request, *args, **kwargs):
|
|
# """添加角色"""
|
|
# data = request.data
|
|
# group_name = data.get('role_name')
|
|
# try:
|
|
# old_group = Group.objects.filter(name=group_name).first()
|
|
# if old_group:
|
|
# return Response({"msg": "该角色名已存在"})
|
|
# with transaction.atomic():
|
|
# group = Group.objects.create(name=group_name)
|
|
# group.save()
|
|
# return Response({"msg": "创建成功"})
|
|
# except Exception as e:
|
|
# return Response({"msg": f"创建失败:{e}"})
|
|
#
|
|
# #
|
|
# def put(self, request, pk):
|
|
# group_name = request.data.get('role_name')
|
|
# try:
|
|
# with transaction.atomic(): # 开启事务
|
|
# group = Group.objects.get(id=pk)
|
|
# group.name = group_name
|
|
# group.save()
|
|
# return Response({'success': True, 'msg': 'Group updated successfully'})
|
|
# except Group.DoesNotExist:
|
|
# return Response({'success': False, 'msg': 'Group not found'})
|
|
# except Exception as e:
|
|
# return Response({'success': False, 'msg': str(e)})
|
|
#
|
|
# def delete(self, request, pk):
|
|
# try:
|
|
# with transaction.atomic(): # 开启事务
|
|
# group = Group.objects.get(id=pk)
|
|
# group.delete()
|
|
# return Response({'success': True, 'msg': 'Group deleted successfully'})
|
|
# except Group.DoesNotExist:
|
|
# return Response({'success': False, 'msg': 'Group not found'})
|
|
# except Exception as e:
|
|
# return Response({'success': False, 'msg': str(e)})
|
|
#
|
|
# def modify_permission(self, request, *args, **kwargs):
|
|
# pass
|
|
|
|
|
|
|
|
|
|
|
|
|