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() enterprise_obj = EnterpriseModel.objects.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': "用户登录失败,请查证用户名及密码", '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": [] } )