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.

219 lines
7.5 KiB
Python

9 months ago
import datetime
import logging
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import permission_classes as single_permission
from rest_framework.permissions import IsAuthenticated
from app.pagination import MyPageNumberPagination
from app.serializers import AuthUserSerializer
from app.models import AuthUser, EnterpriseModel
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
logger = logging.getLogger('mylogger')
class UserViewSet(ModelViewSet):
serializer_class = AuthUserSerializer
pagination_class = MyPageNumberPagination
authentication_classes = []
permission_classes = []
@staticmethod
def login(request, *args, **kwargs):
"""登录 POST"""
data = request.data
username = data.get('username')
password = data.get('password')
# 验证是否过期
enterprise_obj = EnterpriseModel.objects.filter(account=username, pwd=password).last()
if not enterprise_obj:
response = {
'success': False,
'msg': "该账号不存在",
'data': {
'username': None,
'roles': [],
'token': None,
'expires': None
}
}
return Response(response)
else:
flag = datetime.date.today() < enterprise_obj.end_valid_date
if not flag:
response = {
'success': False,
'msg': f"该账号已过期,有效时间为{enterprise_obj.start_valid_date}{enterprise_obj.end_valid_date}",
'data': {
'username': None,
'roles': [],
'token': None,
'expires': None
}
}
return Response(response)
serializer = TokenObtainPairSerializer(data=request.data)
try:
serializer.is_valid(raise_exception=True)
except Exception as e:
response = {
'success': False,
'msg': str(e),
'data': {
'username': None,
'roles': [],
'token': None,
'expires': None
}
}
return Response(response)
response = {
'success': True,
'msg': '登录成功',
'data': {
'username': username,
'roles': ['admin'],
'accessToken': serializer.validated_data.get("access"),
'refreshToken': serializer.validated_data.get("refresh"),
}
}
return Response(response)
@staticmethod
def get_user_info(request, *args, **kwargs):
return Response({
"code": 0,
"success": True,
"data": {
"userInfo": {
"id": 1,
"createTime": "2023-10-08T08:02:30.775742Z",
"updateTime": "2024-01-23T08:51:08.648364Z",
"userName": "admin",
"nickName": "管理员",
"phone": "",
"email": "",
"avatarId": 1,
"roleId": 1,
"postId": None,
"deptId": None,
"roleIds": "1",
"postIds": "",
"remark": "",
"enable": None,
"lastLoginTime": "2024-01-23T08:51:08.558393Z",
"roles": [
{
"label": "管理员",
"value": 1
}
],
"avatarUrl": "uploads/image/user/avatar/39c63ddb96a31b9610cd976b896ad4f0_20231016113731.jpg"
}
},
"msg": "获取成功"
})
@single_permission([IsAuthenticated])
def create(self, request, *args, **kwargs):
"""注册 POST 用户名 手机号 状态 性别 部门"""
data = request.data
username = data.get('username')
if not username:
return Response({'msg': '用户名不能为空'})
user_id = data.pop("id", None)
password = data.pop('password', None)
note = data.get("note", None)
# 新增用户
if not user_id:
try:
if AuthUser.objects.filter(username=username).first():
return Response({'msg': '该用户名已存在,请换一个', "success": False, "status": 400})
if not password:
password = "#Yaxin0504"
user = AuthUser.objects.create_user(username=username, password=password, note=note)
return Response({'msg': '用户添加成功', 'success': True, "status": 200})
except Exception as e:
response = {
"msg": f'添加失败, 原因:{e}',
"success": False,
"status": 400
}
return Response(response)
else:
try:
partial = kwargs.pop('partial', True)
try:
user = AuthUser.objects.filter(id=user_id).get()
except Exception as e:
logger.error(f"查询用户报错:{e}")
return Response({"msg": "该用户不存在", "status": 400, "success": False, "data": None})
if password:
user.set_password(password)
user.save()
if data:
serializer = self.get_serializer(user, data=data, partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
return Response({'msg': '用户更新成功', 'success': True, "status": 200})
except Exception as e:
response = {
"msg": f'用户更新失败, 原因:{e}',
"success": False,
"status": 400
}
return Response(response)
@single_permission([IsAuthenticated])
def list(self, request, *args, **kwargs):
data = request.query_params
user_id = data.get("id")
status = data.get("status", 1)
self.queryset = AuthUser.objects.filter(status=status).all().order_by("-id")
if not user_id:
return Response({
"data": super().list(request, *args, **kwargs).data,
"msg": None,
"success": True,
"status": 200
})
else:
try:
instance = self.queryset.filter(id=user_id).get()
except Exception as e:
logger.error(f"查询用户{user_id}报错:{e}")
return Response({"msg": "该用户不存在", "status": 400, "success": False, "data": None})
serializer = self.get_serializer(instance)
return Response({
"data": serializer.data,
"msg": None,
"success": True,
"status": 200
})
class AsyncRoutesViewSet(ModelViewSet):
def list(self, request, *args, **kwargs):
return Response(
{
"success": True,
"data": []
}
)