forked from kongfp/General-Platform-Backend
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
219 lines
7.5 KiB
Python
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": []
|
|
}
|
|
)
|