コード例 #1
0
ファイル: login.py プロジェクト: liqianglog/django-vue-admin
 def post(self, request, *args, **kwargs):
     # 校验验证码
     self.jarge_captcha(request)
     serializer = self.get_serializer(data=request.data)
     if serializer.is_valid():
         user = serializer.object.get('user') or request.user
         token = serializer.object.get('token')
         response_data = jwt_response_payload_handler(token, user, request)
         response = SuccessResponse(response_data)
         if token:
             username = user.username
             session_id = jwt_get_session_id(token)
             key = f"{self.prefix}_{session_id}_{username}"
             if getattr(settings, "REDIS_ENABLE", False):
                 cache.set(key, token, self.ex.total_seconds())
             self.save_login_infor(request, '登录成功', session_id=session_id)
         if self.JWT_AUTH_COOKIE and token:
             expiration = (datetime.datetime.utcnow() + self.ex)
             response.set_cookie(self.JWT_AUTH_COOKIE,
                                 token,
                                 expires=expiration,
                                 domain=settings.SESSION_COOKIE_DOMAIN,
                                 httponly=False)
         return response
     self.save_login_infor(request, '登录失败,账户/密码不正确', False)
     return ErrorResponse(data=serializer.errors, msg='账户/密码不正确')
コード例 #2
0
 def get_user_messages(self, request: Request, *args, **kwargs):
     """
     获取用户自己消息列表
     """
     queryset = self.filter_queryset(self.get_queryset())
     queryset = queryset.filter(status=2)
     is_read = request.query_params.get('is_read', None)
     if is_read:
         if is_read == 'False':
             queryset = queryset.exclude(Q(messagepushuser_message_push__is_read=True),
                                         Q(messagepushuser_message_push__user=request.user))
         elif is_read == 'True':
             queryset = queryset.filter(messagepushuser_message_push__is_read=True,
                                        messagepushuser_message_push__user=request.user)
     queryset = queryset.filter(is_reviewed=True).distinct()
     page = self.paginate_queryset(queryset)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, *args, **kwargs)
     if page is not None:
         if getattr(self, 'values_queryset', None):
             return self.get_paginated_response(page)
         serializer = self.get_serializer(page, many=True)
         return self.get_paginated_response(serializer.data)
     if getattr(self, 'values_queryset', None):
         return SuccessResponse(page)
     serializer = self.get_serializer(queryset, many=True)
     return SuccessResponse(serializer.data)
コード例 #3
0
 def get_user_details(self, request: Request, *args, **kwargs):
     """
     获取用户详情
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     userId = request.query_params.get('userId')
     data = {
         'posts':
         PostSimpleSerializer(
             Post.objects.filter(status='1').order_by('postSort'),
             many=True).data,
         'roles':
         RoleSimpleSerializer(
             Role.objects.filter(status='1').order_by('roleSort'),
             many=True).data
     }
     if userId:
         instance = self.queryset.get(id=userId)
         serializer = self.get_serializer(instance)
         data['data'] = serializer.data
         data['postIds'] = [
             ele.get('id') for ele in serializer.data.get('post')
         ]
         data['roleIds'] = [
             ele.get('id') for ele in serializer.data.get('role')
         ]
         if hasattr(self, 'handle_logging'):
             self.handle_logging(request,
                                 instance=instance,
                                 *args,
                                 **kwargs)
     return SuccessResponse(data)
コード例 #4
0
ファイル: views.py プロジェクト: liqianglog/django-vue-admin
 def get_rate_info(self, request: Request, *args, **kwargs):
     """
     获取使用率 监控信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     pk = kwargs.get("pk")
     queryset = self.filter_queryset(self.get_queryset())
     queryset = queryset.filter(server__id=pk).order_by("create_datetime")
     # 间隔取值
     queryset_count = queryset.count()
     Interval_num = 1 if queryset_count < 200 else int(queryset_count / 100)
     queryset = queryset.values('cpu_sys', 'mem_num', 'mem_sys',
                                'create_datetime')[::Interval_num][:100]
     data = {
         "cpu": [],
         "memory": [],
         "datetime": [],
     }
     for ele in queryset:
         data["cpu"].append(round(float(ele.get('cpu_sys', 0)), 2))
         data["datetime"].append(
             ele.get('create_datetime').strftime('%Y-%m-%d %H:%M:%S'))
         data["memory"].append(
             round(float(ele.get('mem_num', 0)), 4) and round(
                 float(ele.get('mem_sys', 0)) /
                 float(ele.get('mem_num', 0)) * 100, 2))
     return SuccessResponse(data=data)
コード例 #5
0
 def update_is_read(self, request: Request, *args, **kwargs):
     """
     修改为已读
     """
     instance, _ = MessagePushUser.objects.get_or_create(message_push_id=kwargs.get('pk'), user=request.user)
     instance.is_read = True
     instance.save()
     return SuccessResponse()
コード例 #6
0
 def get(self, request):
     new_key = CaptchaStore.pick()
     to_json_response = {
         "key": new_key,
         "image_url": captcha_image_url(new_key),
         "audio_url": captcha_audio_url(new_key) if ca_settings.CAPTCHA_FLITE_PATH else None,
     }
     return SuccessResponse(to_json_response)
コード例 #7
0
ファイル: login.py プロジェクト: liqianglog/django-vue-admin
 def post(self, request):
     user = request.user
     user.user_secret = uuid4()
     user.save()
     key = f"{self.prefix}_{user.username}"
     if getattr(settings, "REDIS_ENABLE", False):
         cache.delete(key)
     return SuccessResponse()
コード例 #8
0
 def clean_all(self, request: Request, *args, **kwargs):
     """
     清空定时任务日志
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     self.get_queryset().delete()
     return SuccessResponse(msg="清空成功")
コード例 #9
0
 def clearCache(self, request: Request, *args, **kwargs):
     """
     清理键值缓存
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     if getattr(settings, "REDIS_ENABLE", False):
         cache.delete('system_dict_details')
     return SuccessResponse(msg='清理成功!')
コード例 #10
0
 def get(self, request, *args, **kwargs):
     # 获取内存使用率
     memory_used_percent = get_memory_used_percent()
     # 获取cpu使用率
     cpu_used_percent = get_cpu_used_percent()
     # 获取硬盘使用率
     disk_used_percent = get_disk_used_percent()
     return SuccessResponse(data={"memory_used_percent": memory_used_percent,
                                  "cpu_used_percent": cpu_used_percent,
                                  "disk_used_percent": disk_used_percent
                                  })
コード例 #11
0
ファイル: views.py プロジェクト: liqianglog/django-vue-admin
 def get_monitor_info(self, request: Request, *args, **kwargs):
     """
     最新的服务器状态信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     pk = kwargs.get("pk")
     instance = Monitor.objects.filter(
         server__id=pk).order_by("-create_datetime").first()
     if not instance:
         return ErrorResponse(msg="未找到服务器信息id")
     serializer = self.get_serializer(instance)
     data = serializer.data
     return SuccessResponse(
         data={
             "cpu": {
                 "total": int(data.get('cpu_num'), 0),
                 "used": "",  # cpu核心 可不传,如指cpu当前主频,该值可以传
                 "rate": float(data.get('cpu_sys', 0)) / 100,
                 "unit": "核心",  # 默认单位 核心
             },
             "memory": {
                 "total":
                 int(int(data.get('mem_num', 0)) / 1024),
                 "used":
                 int(int(data.get('mem_sys', 0)) / 1024),
                 "rate":
                 int(data.get('mem_num', 0)) and round(
                     int(data.get('mem_sys', 0)) /
                     int(data.get('mem_num', 0)), 4),
                 "unit":
                 "MB",  # 默认单位 MB
             },
             "disk": [
                 {
                     "dir_name":
                     ele.get('dir_name'),
                     "total":
                     int(int(ele.get('total', 0)) / 1024 / 1024 / 1024),
                     "used":
                     int(int(ele.get('disk_sys', 0)) / 1024 / 1024 / 1024),
                     "rate":
                     int(ele.get('total', 0)) and round(
                         int(ele.get('disk_sys', 0)) /
                         int(ele.get('total', 0)), 4),
                     "unit":
                     "GB",  # 默认单位 GB
                 } for ele in SysFiles.objects.filter(monitor=instance).
                 values('dir_name', 'total', 'disk_sys')
             ]
         })
コード例 #12
0
 def export(self, request: Request, *args, **kwargs):
     """
     导出字典详情数据
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     dictType = request.query_params.get('dictType')
     field_data = ['字典详情主键', '字典标签', '字典键值', '是否默认', '字典状态', '字典排序', '创建者', '修改者', '备注']
     data = ExportDictDetailsSerializer(DictDetails.objects.filter(dict_data__dictType=dictType), many=True).data
     return SuccessResponse(export_excel_save_model(request, field_data, data, f'导出字典[{dictType}]详情数据.xls'))
コード例 #13
0
 def tree_select_list(self, request: Request, *args, **kwargs):
     """
     递归获取部门树
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     queryset = self.filter_queryset(self.get_queryset())
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, *args, **kwargs)
     serializer = DeptTreeSerializer(queryset, many=True)
     return SuccessResponse(serializer.data)
コード例 #14
0
 def profile(self, request: Request, *args, **kwargs):
     """
     获取用户个人信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.user.id)
     serializer = self.get_serializer(instance)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #15
0
 def change_status(self, request: Request, *args, **kwargs):
     """
     修改用户状态
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.data.get('userId'))
     instance.is_active = request.data.get('status')
     instance.save()
     serializer = self.get_serializer(instance)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #16
0
 def reset_pwd(self, request: Request, *args, **kwargs):
     """
     重置密码
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.data.get('userId'))
     serializer = self.get_serializer(instance)
     instance.set_password(request.data.get('password'))
     instance.save()
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #17
0
 def get(self, request, format=None):
     user_dict = UserProfileSerializer(request.user).data
     permissions_list = [
         '*:*:*'
     ] if user_dict.get('admin') else Menu.objects.filter(
         role__userprofile=request.user).values_list('perms', flat=True)
     delete_cache = request.user.delete_cache
     return SuccessResponse({
         'permissions': [ele for ele in permissions_list if ele],
         'roles':
         Role.objects.filter(userprofile=request.user).values_list(
             'roleKey', flat=True),
         'user':
         user_dict
     })
コード例 #18
0
 def put_avatar(self, request: Request, *args, **kwargs):
     """
     更新用户头像
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.user.id)
     instance.avatar = request.data.get('avatar_url', None)
     instance.save()
     serializer = self.get_serializer(instance)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #19
0
 def exclude_list(self, request: Request, *args, **kwargs):
     """
     过滤剔除同级部门
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     dept_queryset = Dept.objects.filter(id=kwargs.get('pk')).first()
     parentId = dept_queryset.parentId if dept_queryset else ''
     queryset = self.queryset.exclude(
         parentId=parentId).order_by('orderNum')
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, *args, **kwargs)
     serializer = self.get_serializer(queryset, many=True)
     return SuccessResponse(serializer.data)
コード例 #20
0
 def get_config_key(self, request: Request, *args, **kwargs):
     """
     根据 参数键名 查询参数数据信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     config_key_dic = cache.get('system_configKey') if getattr(settings, "REDIS_ENABLE", False) else ""
     if not config_key_dic:
         queryset = self.filter_queryset(self.get_queryset())
         config_key_dic = {ele.get('configKey'): ele.get('configValue') for ele in
                           queryset.values('configValue', 'configKey')}
         if getattr(settings, "REDIS_ENABLE", False):
             cache.set('system_configKey', config_key_dic, 84600)
     return SuccessResponse(msg=config_key_dic.get(kwargs.get('pk'), ''))
コード例 #21
0
def get_monitor_info():
    """
    定时获取系统监控信息
    :return:
    """
    # 获取服务器
    ip = getIP()
    if not ip:
        logger.error("无法获取到IP")
        return
    server_obj, create = Server.objects.get_or_create(ip=ip)
    if create:
        server_obj.name = ip
        terse = ('terse' in sys.argv or '--terse' in sys.argv)
        aliased = (not 'nonaliased' in sys.argv
                   and not '--nonaliased' in sys.argv)
        server_obj.os = platform(aliased, terse)
        server_obj.save()

    # 获取CPU和内存信息
    mem = psutil.virtual_memory()
    monitor_obj = Monitor()
    monitor_obj.cpu_num = psutil.cpu_count()
    monitor_obj.cpu_sys = float(psutil.cpu_percent(0.1))
    monitor_obj.mem_num = int(mem.total / 1024)
    monitor_obj.mem_sys = int(mem.used / 1024)
    monitor_obj.seconds = time.strftime(
        "%d天 %H 小时 %M 分 %S 秒",
        time.gmtime(int(time.time()) - int(psutil.boot_time())))
    monitor_obj.server = server_obj
    monitor_obj.save()

    # 保存磁盘信息
    for ele in psutil.disk_partitions():
        disk = psutil.disk_usage('/')

        sys_files_obj = SysFiles()
        sys_files_obj.dir_name = ele.mountpoint
        sys_files_obj.sys_type_name = ele.opts
        sys_files_obj.type_name = ele.fstype
        sys_files_obj.total = disk.total
        sys_files_obj.disk_sys = disk.used
        sys_files_obj.monitor = monitor_obj
        sys_files_obj.save()

    return SuccessResponse(msg="")
コード例 #22
0
 def put_profile(self, request: Request, *args, **kwargs):
     """
     更新用户个人信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.user.id)
     instance.name = request.data.get('name', None)
     instance.mobile = request.data.get('mobile', None)
     instance.email = request.data.get('email', None)
     instance.gender = request.data.get('gender', None)
     instance.save()
     serializer = self.get_serializer(instance)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #23
0
 def role_dept_tree_select(self, request: Request, *args, **kwargs):
     """
     根据角色ID查询部门树结构
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     dept_queryset = Dept.objects.filter(
         role__id=kwargs.get('pk')).values_list('id', flat=True)
     queryset = self.filter_queryset(self.get_queryset())
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, *args, **kwargs)
     serializer = DeptTreeSerializer(queryset, many=True)
     return SuccessResponse({
         'depts': serializer.data,
         'checkedKeys': dept_queryset
     })
コード例 #24
0
 def update_pwd(self, request: Request, *args, **kwargs):
     """
     个人修改密码
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     instance = self.queryset.get(id=request.user.id)
     instance.password = request.data.get('newPassword', None)
     if not authenticate(username=request.user.username,
                         password=request.data.get('oldPassword', None)):
         return ErrorResponse(msg='旧密码不正确!')
     instance.set_password(request.data.get('newPassword'))
     instance.save()
     serializer = self.get_serializer(instance)
     if hasattr(self, 'handle_logging'):
         self.handle_logging(request, instance=instance, *args, **kwargs)
     return SuccessResponse(serializer.data)
コード例 #25
0
 def clearsavefile(self, request: Request, *args, **kwargs):
     """
     清理废弃文件
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     # 获取废弃文件列表
     file_list = get_all_files(os.path.join(settings.MEDIA_ROOT, 'system'))
     queryset_files = [os.path.join(os.path.join(settings.MEDIA_ROOT) + os.sep, ele) for ele in
                       list(self.get_queryset().values_list('file', flat=True))]
     queryset_files_dir = set(map(lambda absdir: os.path.abspath(absdir), queryset_files))
     delete_list = list(set(file_list) - queryset_files_dir)
     # 进行文件删除操作
     delete_files(delete_list)
     # 递归删除空文件
     remove_empty_dir(os.path.join(settings.MEDIA_ROOT, 'system'))
     return SuccessResponse(msg=f"成功清理废弃文件{len(delete_list)}个")
コード例 #26
0
 def get(self, request, format=None):
     kwargs = {}
     if not request.user.is_superuser:
         kwargs['role__userprofile'] = request.user
     menus = Menu.objects.filter(**kwargs) \
         .exclude(menuType='2').values('id', 'name', 'web_path', 'visible', 'status', 'isFrame', 'component_path',
                                       'icon', 'parentId', 'orderNum', 'isCache').distinct()
     data = []
     sys_show_hide = DictDetails.get_default_dictValue('sys_show_hide')
     for ele in menus:
         data.append({
             'id':
             ele.get('id'),
             'name':
             ele.get('web_path', '').split('/')[-1]
             and ele.get('web_path', '').split('/')[-1].capitalize(),
             'path':
             ele.get('web_path'),
             'orderNum':
             ele.get('orderNum'),
             'hidden':
             True if ele.get('visible') != '1' else False,
             'redirect':
             ele.get('web_path')
             if ele.get('isFrame') == '1' else 'noRedirect',
             'component':
             ele.get('component_path') or 'Layout',
             'meta': {
                 'title':
                 ele.get('name'),
                 'icon':
                 ele.get('icon'),
                 'noCache':
                 True if ele.get('isCache') == sys_show_hide else False
             },
             'parentId':
             ele.get('parentId')
         })
     return SuccessResponse(data)
コード例 #27
0
 def dict_details_list(self, request: Request, *args, **kwargs):
     """
     根据字典类型查询字典数据信息
     :param request:
     :param args:
     :param kwargs:
     :return:
     """
     dict_details_dic = cache.get('system_dict_details', {}) if getattr(settings, "REDIS_ENABLE", False) else {}
     if not dict_details_dic:
         queryset = self.filter_queryset(self.get_queryset())
         queryset_dic = queryset.order_by('sort').values('dict_data__dictType', 'dictLabel', 'dictValue',
                                                         'is_default')
         for ele in queryset_dic:
             dictType = ele.pop('dict_data__dictType')
             if dictType in dict_details_dic:
                 dict_details_dic[dictType].append(ele)
             else:
                 dict_details_dic[dictType] = [ele]
         if getattr(settings, "REDIS_ENABLE", False):
             cache.set('system_dict_details', dict_details_dic, 84600)
     return SuccessResponse(dict_details_dic.get(kwargs.get('pk'), []))
コード例 #28
0
 def create(self, request: Request, *args, **kwargs):
     serializer = self.get_serializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     self.perform_create(serializer)
     headers = self.get_success_headers(serializer.data)
     return SuccessResponse(serializer.data, status=201, headers=headers)
コード例 #29
0
ファイル: views.py プロジェクト: liqianglog/django-vue-admin
    def enabled_monitor_info(self, request: Request, *args, **kwargs):
        """
        更新和获取监控信息
        :param request:
        :param args:
        :param kwargs:
        :return:
        """
        enabled = request.query_params.get('enabled', None)
        save_days = request.query_params.get('save_days', None)
        interval = request.query_params.get('interval', None)
        # 定时获取系统监控信息
        periodictask_obj = PeriodicTask.objects.filter(
            task='apps.vadmin.monitor.tasks.get_monitor_info').first()
        if not periodictask_obj:
            intervalschedule_obj, _ = IntervalSchedule.objects.get_or_create(
                every=5, period="seconds")
            periodictask_obj = PeriodicTask()
            periodictask_obj.task = "apps.vadmin.monitor.tasks.get_monitor_info"
            periodictask_obj.name = "定时获取系统监控信息"
            periodictask_obj.interval = intervalschedule_obj
            periodictask_obj.enabled = False
            periodictask_obj.save()

        # 定时清理多余 系统监控信息
        clean_task_obj = PeriodicTask.objects.filter(
            task='apps.vadmin.monitor.tasks.clean_surplus_monitor_info').first(
            )
        if not clean_task_obj:
            crontab_obj, _ = CrontabSchedule.objects.get_or_create(
                day_of_month="*",
                day_of_week="*",
                hour="1",
                minute="0",
                month_of_year="*")
            clean_task_obj = PeriodicTask()
            clean_task_obj.task = "apps.vadmin.monitor.tasks.clean_surplus_monitor_info"
            clean_task_obj.name = "定时清理多余-系统监控信息"
            clean_task_obj.crontab = crontab_obj
            clean_task_obj.enabled = True
            clean_task_obj.save()
        # 配置添加
        config_obj = ConfigSettings.objects.filter(
            configKey='sys.monitor.info.save_days').first()
        if not config_obj:
            config_obj = ConfigSettings()
            config_obj.configKey = "sys.monitor.info.save_days"
            config_obj.configName = "定时清理多余系统监控信息"
            config_obj.configValue = "30"
            config_obj.configType = "Y"
            config_obj.status = "1"
            config_obj.remark = "定时清理多余-系统监控信息,默认30天"
            config_obj.save()

        if enabled:
            # 更新监控状态
            periodictask_obj.enabled = True if enabled == "1" else False
            periodictask_obj.save()

            # 更新 定时清理多余 系统监控信息 状态
            clean_task_obj.enabled = True if enabled == "1" else False
            clean_task_obj.save()
        # 更新保留天数
        if save_days and config_obj:
            config_obj.configValue = save_days
            config_obj.save()
        # 更新监控获取频率
        if interval:
            periodictask_obj.interval.every = interval
            periodictask_obj.interval.save()
        return SuccessResponse(
            data={
                "enabled": periodictask_obj.enabled,
                "interval": periodictask_obj.interval.every,
                "save_days": config_obj.configValue if config_obj else "30",
            })