重构(dvadmin):所有包引入都加apps.
parent
a85e185d22
commit
959faf6ec4
|
@ -22,7 +22,7 @@ from django.urls import re_path, include
|
|||
from django.views.static import serve
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from apps.vadmin.utils.response import SuccessResponse
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
|
||||
|
||||
class CaptchaRefresh(APIView):
|
||||
|
|
|
@ -2,6 +2,6 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class DpCmdbConfig(AppConfig):
|
||||
name = 'vadmin.celery'
|
||||
name = 'apps.vadmin.celery'
|
||||
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
|
||||
from rest_framework import serializers
|
||||
|
||||
from ..op_drf.serializers import CustomModelSerializer
|
||||
from ..utils.exceptions import APIException
|
||||
from apps.vadmin.op_drf.serializers import CustomModelSerializer
|
||||
from apps.vadmin.utils.exceptions import APIException
|
||||
|
||||
|
||||
class IntervalScheduleSerializer(CustomModelSerializer):
|
||||
|
|
|
@ -2,13 +2,11 @@ from django_celery_beat.admin import TaskSelectWidget
|
|||
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from ..celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter
|
||||
from ..celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer
|
||||
from ..op_drf.views import CustomAPIView
|
||||
from ..op_drf.viewsets import CustomModelViewSet
|
||||
from ..system.models import DictData
|
||||
from ..system.serializers import DictDataSerializer
|
||||
from ..utils.response import SuccessResponse
|
||||
from apps.vadmin.celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter
|
||||
from apps.vadmin.celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer
|
||||
from apps.vadmin.op_drf.views import CustomAPIView
|
||||
from apps.vadmin.op_drf.viewsets import CustomModelViewSet
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
|
||||
|
||||
class IntervalScheduleModelViewSet(CustomModelViewSet):
|
||||
|
|
|
@ -2,5 +2,5 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class MonitorConfig(AppConfig):
|
||||
name = 'vadmin.monitor'
|
||||
name = 'apps.vadmin.monitor'
|
||||
verbose_name = "系统监控"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
import django_filters
|
||||
|
||||
from .models import Server, Monitor
|
||||
from apps.vadmin.monitor.models import Server, Monitor
|
||||
|
||||
|
||||
class ServerFilter(django_filters.rest_framework.FilterSet):
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
from ..models.monitor import Monitor
|
||||
from ..models.server import Server
|
||||
from ..models.sys_files import SysFiles
|
||||
from apps.vadmin.monitor.models.monitor import Monitor
|
||||
from apps.vadmin.monitor.models.server import Server
|
||||
from apps.vadmin.monitor.models.sys_files import SysFiles
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, ForeignKey, CASCADE
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class Monitor(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, ForeignKey, CASCADE
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class SysFiles(CoreModel):
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from .models import Server, Monitor
|
||||
from ..op_drf.serializers import CustomModelSerializer
|
||||
from apps.vadmin.monitor.models import Server, Monitor
|
||||
from apps.vadmin.op_drf.serializers import CustomModelSerializer
|
||||
|
||||
|
||||
# ================================================= #
|
||||
|
|
|
@ -5,10 +5,10 @@ import time
|
|||
|
||||
import psutil
|
||||
|
||||
from ..monitor.models import Server, Monitor, SysFiles
|
||||
from ..op_drf.response import SuccessResponse
|
||||
from ..system.models import ConfigSettings
|
||||
from ..utils.decorators import BaseCeleryApp
|
||||
from apps.vadmin.monitor.models import Server, Monitor, SysFiles
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
from apps.vadmin.system.models import ConfigSettings
|
||||
from apps.vadmin.utils.decorators import BaseCeleryApp
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
from platform import platform
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.urls import re_path
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from .views import ServerModelViewSet, MonitorModelViewSet
|
||||
from apps.vadmin.monitor.views import ServerModelViewSet, MonitorModelViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
router.register(r'server', ServerModelViewSet)
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
|
||||
from rest_framework.request import Request
|
||||
|
||||
from .filters import ServerFilter, MonitorFilter
|
||||
from .models import Server, Monitor, SysFiles
|
||||
from .serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer
|
||||
from ..op_drf.response import SuccessResponse, ErrorResponse
|
||||
from ..op_drf.viewsets import CustomModelViewSet
|
||||
from ..permission.permissions import CommonPermission
|
||||
from ..system.models import ConfigSettings
|
||||
from apps.vadmin.monitor.filters import ServerFilter, MonitorFilter
|
||||
from apps.vadmin.monitor.models import Server, Monitor, SysFiles
|
||||
from apps.vadmin.monitor.serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer
|
||||
from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
|
||||
from apps.vadmin.op_drf.viewsets import CustomModelViewSet
|
||||
from apps.vadmin.permission.permissions import CommonPermission
|
||||
from apps.vadmin.system.models import ConfigSettings
|
||||
|
||||
|
||||
class ServerModelViewSet(CustomModelViewSet):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
import logging
|
||||
|
||||
from django.apps import AppConfig
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model
|
|||
from django.db import models
|
||||
from django.db.models import SET_NULL
|
||||
|
||||
from ..utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36
|
||||
from apps.vadmin.utils.string_util import uuid_8, uuid_16, uuid_32, uuid_36
|
||||
|
||||
|
||||
class IdField(models.CharField):
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.utils import six
|
|||
from mongoengine.queryset import visitor
|
||||
from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter
|
||||
|
||||
from ..utils.model_util import get_dept
|
||||
from apps.vadmin.utils.model_util import get_dept
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -4,11 +4,11 @@ from django.http import Http404
|
|||
from django.shortcuts import get_object_or_404 as _get_object_or_404
|
||||
from rest_framework.settings import api_settings
|
||||
|
||||
from apps.vadmin.utils.jsonpath_util import get_jsonpath, filter_json, search_json
|
||||
from apps.vadmin.utils.sort_util import sortList
|
||||
from . import mixins
|
||||
from .pagination import Pagination, JsonPagination
|
||||
from .pagination import JsonPagination
|
||||
from .response import SuccessResponse
|
||||
from ..utils.jsonpath_util import get_jsonpath, filter_json, search_json
|
||||
from ..utils.sort_util import sortList
|
||||
from .views import CustomAPIView
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
import logging
|
||||
from django.core.cache import cache
|
||||
|
||||
|
||||
class RedisHandler(logging.StreamHandler):
|
||||
|
@ -7,4 +6,3 @@ class RedisHandler(logging.StreamHandler):
|
|||
def emit(self, record):
|
||||
msg = self.format(record)
|
||||
print(msg)
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ class Command(BaseCommand):
|
|||
|
||||
|
||||
class {name.capitalize()}Config(AppConfig):
|
||||
name = '{name}'
|
||||
name = 'apps.{name}'
|
||||
verbose_name = "{name}App"
|
||||
"""
|
||||
with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f:
|
||||
|
|
|
@ -9,11 +9,11 @@ from django.conf import settings
|
|||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.utils.deprecation import MiddlewareMixin
|
||||
|
||||
from apps.vadmin.op_drf.response import ErrorJsonResponse
|
||||
from apps.vadmin.permission.models import Menu
|
||||
from apps.vadmin.system.models import OperationLog
|
||||
from ..utils.request_util import get_request_ip, get_request_data, get_request_path, get_browser, get_os, \
|
||||
from apps.vadmin.utils.request_util import get_request_ip, get_request_data, get_request_path, get_browser, get_os, \
|
||||
get_login_location, get_request_canonical_path, get_request_user, get_verbose_name
|
||||
from ..utils.response import ErrorJsonResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -5,9 +5,9 @@ from rest_framework import status
|
|||
from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyRelatedField
|
||||
from rest_framework.request import Request
|
||||
|
||||
from apps.vadmin.utils.export_excel import excel_to_data, export_excel_save_model
|
||||
from apps.vadmin.utils.request_util import get_verbose_name
|
||||
from .response import SuccessResponse
|
||||
from ..utils.export_excel import excel_to_data, export_excel_save_model
|
||||
from ..utils.request_util import get_verbose_name
|
||||
|
||||
|
||||
class CreateModelMixin(mixins.CreateModelMixin):
|
||||
|
@ -317,7 +317,8 @@ class ImportSerializerMixin:
|
|||
# 示例数据
|
||||
queryset = self.filter_queryset(self.get_queryset())
|
||||
return SuccessResponse(
|
||||
export_excel_save_model(request, self.import_field_data.values(), [], f'导入{get_verbose_name(queryset)}模板.xls'))
|
||||
export_excel_save_model(request, self.import_field_data.values(), [],
|
||||
f'导入{get_verbose_name(queryset)}模板.xls'))
|
||||
updateSupport = request.data.get('updateSupport')
|
||||
# 从excel中组织对应的数据结构,然后使用序列化器保存
|
||||
data = excel_to_data(request.data.get('file_url'), self.import_field_data)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
from collections import OrderedDict
|
||||
from typing import Any
|
||||
|
||||
from rest_framework.pagination import PageNumberPagination, _positive_int
|
||||
from rest_framework.utils.urls import replace_query_param
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
"""
|
||||
常用的Response以及Django的Response、DRF的Response
|
||||
"""
|
||||
from django.http.response import DjangoJSONEncoder
|
||||
from django.http.response import DjangoJSONEncoder, JsonResponse
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
||||
|
@ -26,13 +26,16 @@ class SuccessResponse(Response):
|
|||
|
||||
def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False,
|
||||
content_type=None):
|
||||
std_data = {
|
||||
self.std_data = {
|
||||
"code": 200,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'success'
|
||||
}
|
||||
super().__init__(std_data, status, template_name, headers, exception, content_type)
|
||||
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.std_data)
|
||||
|
||||
|
||||
class ErrorResponse(Response):
|
||||
|
@ -43,10 +46,46 @@ class ErrorResponse(Response):
|
|||
|
||||
def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None,
|
||||
exception=False, content_type=None):
|
||||
self.std_data = {
|
||||
"code": code,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'error'
|
||||
}
|
||||
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.std_data)
|
||||
|
||||
|
||||
class SuccessJsonResponse(JsonResponse):
|
||||
"""
|
||||
标准JsonResponse, SuccessJsonResponse(data)SuccessJsonResponse(data=data)
|
||||
(1)仅SuccessResponse无法使用时才能推荐使用SuccessJsonResponse
|
||||
"""
|
||||
|
||||
def __init__(self, data, msg='success', encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs):
|
||||
std_data = {
|
||||
"code": 200,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'success'
|
||||
}
|
||||
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
|
||||
|
||||
|
||||
class ErrorJsonResponse(JsonResponse):
|
||||
"""
|
||||
标准JsonResponse, 仅ErrorResponse无法使用时才能使用ErrorJsonResponse
|
||||
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorJsonResponse(code=xxx)
|
||||
"""
|
||||
|
||||
def __init__(self, data, msg='error', code=201, encoder=OpDRFJSONEncoder, safe=True, json_dumps_params=None,
|
||||
**kwargs):
|
||||
std_data = {
|
||||
"code": code,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'error'
|
||||
}
|
||||
super().__init__(std_data, status, template_name, headers, exception, content_type)
|
||||
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
"""
|
||||
from rest_framework.validators import UniqueValidator, qs_exists
|
||||
|
||||
from vadmin.utils.exceptions import APIException
|
||||
from apps.vadmin.utils.exceptions import APIException
|
||||
|
||||
|
||||
class CustomUniqueValidator(UniqueValidator):
|
||||
|
|
|
@ -6,11 +6,8 @@ from rest_framework.exceptions import APIException as DRFAPIException
|
|||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from ..utils import exceptions
|
||||
from ..utils.model_util import ModelRelateUtils
|
||||
from .logging.view_logger import CustomerRelationshipViewLogger
|
||||
from .response import SuccessResponse, ErrorResponse
|
||||
from .serializers import CustomModelSerializer
|
||||
from apps.vadmin.utils import exceptions
|
||||
from .response import ErrorResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ from rest_framework.request import Request
|
|||
from rest_framework.settings import api_settings
|
||||
from rest_framework.viewsets import ViewSetMixin
|
||||
|
||||
from ..utils.exceptions import APIException
|
||||
from apps.vadmin.utils.exceptions import APIException
|
||||
from . import mixins
|
||||
from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter
|
||||
from .generics import GenericAPIView
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import django_filters
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from ..permission.models import Menu, Dept, Post, Role
|
||||
from ..utils.model_util import get_dept
|
||||
from apps.vadmin.permission.models import Menu, Dept, Post, Role
|
||||
from apps.vadmin.utils.model_util import get_dept
|
||||
|
||||
UserProfile = get_user_model()
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.conf import settings
|
|||
from django.core.management.base import BaseCommand
|
||||
from django.db import connection
|
||||
|
||||
from ....scripts import getSql
|
||||
from apps.vadmin.scripts import getSql
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
from ..models.dept import Dept
|
||||
from ..models.menu import Menu
|
||||
from ..models.post import Post
|
||||
from ..models.role import Role
|
||||
from ..models.users import UserProfile
|
||||
from apps.vadmin.permission.models.dept import Dept
|
||||
from apps.vadmin.permission.models.menu import Menu
|
||||
from apps.vadmin.permission.models.post import Post
|
||||
from apps.vadmin.permission.models.role import Role
|
||||
from apps.vadmin.permission.models.users import UserProfile
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.db.models import CASCADE
|
||||
from django.db.models import CharField, IntegerField, ForeignKey
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class Dept(CoreModel):
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.core.cache import cache
|
||||
from django.db.models import IntegerField, ForeignKey, CharField, CASCADE, Q
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class Menu(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import IntegerField, BooleanField, CharField, TextField
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class Post(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import IntegerField, BooleanField, CharField, TextField, ManyToManyField
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class Role(CoreModel):
|
||||
|
@ -16,7 +16,7 @@ class Role(CoreModel):
|
|||
roleSort = IntegerField(verbose_name="角色顺序")
|
||||
status = CharField(max_length=8, verbose_name="角色状态")
|
||||
admin = BooleanField(default=False, verbose_name="是否为admin")
|
||||
dataScope = CharField(max_length=8,default='1', choices=DATASCOPE_CHOICES, verbose_name="权限范围",)
|
||||
dataScope = CharField(max_length=8, default='1', choices=DATASCOPE_CHOICES, verbose_name="权限范围", )
|
||||
remark = TextField(verbose_name="备注", help_text="备注", null=True, blank=True)
|
||||
dept = ManyToManyField(to='permission.Dept', verbose_name='数据权限-关联部门', db_constraint=False)
|
||||
menu = ManyToManyField(to='permission.Menu', verbose_name='关联菜单权限', db_constraint=False)
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.contrib.auth.models import UserManager, AbstractUser
|
|||
from django.core.cache import cache
|
||||
from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class UserProfile(AbstractUser, CoreModel):
|
||||
|
@ -25,7 +25,8 @@ class UserProfile(AbstractUser, CoreModel):
|
|||
user_type = IntegerField(default=0, verbose_name="用户类型")
|
||||
post = ManyToManyField(to='permission.Post', verbose_name='关联岗位', db_constraint=False)
|
||||
role = ManyToManyField(to='permission.Role', verbose_name='关联角色', db_constraint=False)
|
||||
dept = ForeignKey(to='permission.Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True, blank=True)
|
||||
dept = ForeignKey(to='permission.Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True,
|
||||
blank=True)
|
||||
|
||||
@property
|
||||
def get_user_interface_dict(self):
|
||||
|
|
|
@ -10,8 +10,8 @@ from rest_framework.permissions import (BasePermission,
|
|||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from .models import Dept
|
||||
from ..utils.model_util import get_dept
|
||||
from apps.vadmin.permission.models import Dept
|
||||
from apps.vadmin.utils.model_util import get_dept
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
User = get_user_model()
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
from ..op_drf.serializers import CustomModelSerializer
|
||||
from ..op_drf.validator import CustomUniqueValidator
|
||||
from ..permission.models import Menu, Dept, Post, Role
|
||||
from ..system.models import MessagePush
|
||||
from apps.vadmin.op_drf.serializers import CustomModelSerializer
|
||||
from apps.vadmin.op_drf.validator import CustomUniqueValidator
|
||||
from apps.vadmin.permission.models import Menu, Dept, Post, Role
|
||||
from apps.vadmin.system.models import MessagePush
|
||||
|
||||
UserProfile = get_user_model()
|
||||
|
||||
|
|
|
@ -3,8 +3,8 @@ import logging
|
|||
|
||||
from captcha.models import CaptchaStore
|
||||
|
||||
from ..utils.decorators import BaseCeleryApp
|
||||
from ..utils.response import SuccessResponse
|
||||
from apps.vadmin.utils.decorators import BaseCeleryApp
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@BaseCeleryApp(name='apps.vadmin.permission.tasks.clear_invalid_captcha')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.urls import re_path
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from ..permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \
|
||||
from apps.vadmin.permission.views import MenuModelViewSet, DeptModelViewSet, PostModelViewSet, RoleModelViewSet, \
|
||||
UserProfileModelViewSet
|
||||
|
||||
router = DefaultRouter()
|
||||
|
|
|
@ -2,18 +2,18 @@ from django.contrib.auth import authenticate, get_user_model
|
|||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from .permissions import CommonPermission, DeptDestroyPermission
|
||||
from ..op_drf.filters import DataLevelPermissionsFilter
|
||||
from ..op_drf.viewsets import CustomModelViewSet
|
||||
from ..permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter
|
||||
from ..permission.models import Role, Menu, Dept, Post
|
||||
from ..permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \
|
||||
from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
|
||||
from apps.vadmin.permission.permissions import CommonPermission, DeptDestroyPermission
|
||||
from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
|
||||
from apps.vadmin.op_drf.viewsets import CustomModelViewSet
|
||||
from apps.vadmin.permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter
|
||||
from apps.vadmin.permission.models import Role, Menu, Dept, Post
|
||||
from apps.vadmin.permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \
|
||||
MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \
|
||||
RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \
|
||||
PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \
|
||||
UserProfileImportSerializer
|
||||
from ..system.models import DictDetails
|
||||
from ..utils.response import SuccessResponse, ErrorResponse
|
||||
from apps.vadmin.system.models import DictDetails
|
||||
|
||||
UserProfile = get_user_model()
|
||||
|
||||
|
|
|
@ -2,5 +2,5 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class SystemConfig(AppConfig):
|
||||
name = 'vadmin.system'
|
||||
name = 'apps.vadmin.system'
|
||||
verbose_name = "系统管理"
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
import django_filters
|
||||
|
||||
from .models import LoginInfor, OperationLog, CeleryLog
|
||||
from ..system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile
|
||||
from apps.vadmin.system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile
|
||||
from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
|
||||
|
||||
|
||||
class DictDataFilter(django_filters.rest_framework.FilterSet):
|
||||
|
|
|
@ -1,10 +1,9 @@
|
|||
from ..models.config_settings import ConfigSettings
|
||||
from ..models.dict_data import DictData
|
||||
from ..models.dict_details import DictDetails
|
||||
from ..models.save_file import SaveFile
|
||||
from ..models.message_push import MessagePush
|
||||
from ..models.message_push import MessagePushUser
|
||||
from ..models.logininfor import LoginInfor
|
||||
from ..models.operation_log import OperationLog
|
||||
from ..models.celery_log import CeleryLog
|
||||
|
||||
from apps.vadmin.system.models.celery_log import CeleryLog
|
||||
from apps.vadmin.system.models.config_settings import ConfigSettings
|
||||
from apps.vadmin.system.models.dict_data import DictData
|
||||
from apps.vadmin.system.models.dict_details import DictDetails
|
||||
from apps.vadmin.system.models.logininfor import LoginInfor
|
||||
from apps.vadmin.system.models.message_push import MessagePush
|
||||
from apps.vadmin.system.models.message_push import MessagePushUser
|
||||
from apps.vadmin.system.models.operation_log import OperationLog
|
||||
from apps.vadmin.system.models.save_file import SaveFile
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, BooleanField, TextField
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class CeleryLog(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class ConfigSettings(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import TextField, CharField,ForeignKey
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class DictData(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class DictDetails(CoreModel):
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import CharField, BooleanField, TextField
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class LoginInfor(CoreModel):
|
||||
|
|
|
@ -2,8 +2,8 @@ from django.conf import settings
|
|||
from django.db import models
|
||||
from django.db.models import *
|
||||
|
||||
from ...op_drf.fields import UpdateDateTimeField, CreateDateTimeField
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
"""
|
||||
消息通知模型
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.db.models import TextField, CharField, BooleanField
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
class OperationLog(CoreModel):
|
||||
|
@ -12,7 +12,7 @@ class OperationLog(CoreModel):
|
|||
request_ip = CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True)
|
||||
request_browser = CharField(max_length=64, verbose_name="请求浏览器", null=True, blank=True)
|
||||
response_code = CharField(max_length=32, verbose_name="响应状态码", null=True, blank=True)
|
||||
request_location = CharField(max_length=64,verbose_name="操作地点", null=True, blank=True)
|
||||
request_location = CharField(max_length=64, verbose_name="操作地点", null=True, blank=True)
|
||||
request_os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True)
|
||||
json_result = TextField(verbose_name="返回信息", null=True, blank=True)
|
||||
status = BooleanField(default=False, verbose_name="响应状态")
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
import os
|
||||
import uuid
|
||||
|
||||
from django.db.models import CharField, FileField,BooleanField
|
||||
from django.db.models import CharField, FileField, BooleanField
|
||||
from django.utils import timezone
|
||||
|
||||
from ...op_drf.models import CoreModel
|
||||
from apps.vadmin.op_drf.models import CoreModel
|
||||
|
||||
|
||||
def files_path(instance, filename):
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
from django.core.cache import cache
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import LoginInfor, OperationLog, CeleryLog
|
||||
from ..op_drf.serializers import CustomModelSerializer
|
||||
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser
|
||||
from apps.vadmin.op_drf.serializers import CustomModelSerializer
|
||||
from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser
|
||||
from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
|
||||
|
||||
|
||||
# ================================================= #
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
from django.urls import re_path
|
||||
from rest_framework.routers import DefaultRouter
|
||||
|
||||
from ..system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
|
||||
from apps.vadmin.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
|
||||
ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \
|
||||
OperationLogModelViewSet, CeleryLogModelViewSet, SystemInfoApiView
|
||||
|
||||
|
|
|
@ -6,25 +6,25 @@ from django.db.models import Q
|
|||
from rest_framework.request import Request
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from .models import LoginInfor, OperationLog, CeleryLog
|
||||
from ..op_drf.filters import DataLevelPermissionsFilter
|
||||
from ..op_drf.viewsets import CustomModelViewSet
|
||||
from ..permission.permissions import CommonPermission
|
||||
from ..system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \
|
||||
from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
from apps.vadmin.op_drf.viewsets import CustomModelViewSet
|
||||
from apps.vadmin.permission.permissions import CommonPermission
|
||||
from apps.vadmin.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \
|
||||
SaveFileFilter, LoginInforFilter, OperationLogFilter, CeleryLogFilter
|
||||
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
||||
from ..system.models import MessagePushUser
|
||||
from ..system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
|
||||
from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
|
||||
from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
|
||||
from apps.vadmin.system.models import MessagePushUser
|
||||
from apps.vadmin.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
|
||||
DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \
|
||||
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
|
||||
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
|
||||
MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \
|
||||
OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer, CeleryLogSerializer, \
|
||||
ExportCeleryLogSerializer
|
||||
from ..utils.export_excel import export_excel_save_model
|
||||
from ..utils.file_util import get_all_files, remove_empty_dir, delete_files
|
||||
from ..utils.response import SuccessResponse
|
||||
from ..utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
|
||||
from apps.vadmin.utils.export_excel import export_excel_save_model
|
||||
from apps.vadmin.utils.file_util import get_all_files, remove_empty_dir, delete_files
|
||||
from apps.vadmin.utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
|
||||
|
||||
|
||||
class DictDataModelViewSet(CustomModelViewSet):
|
||||
|
|
|
@ -2,5 +2,5 @@ from django.apps import AppConfig
|
|||
|
||||
|
||||
class TemplateConfig(AppConfig):
|
||||
name = 'vadmin.template'
|
||||
name = 'apps.vadmin.template'
|
||||
verbose_name = "模板App"
|
||||
|
|
|
@ -22,9 +22,9 @@ from django.urls import re_path, include
|
|||
from rest_framework.documentation import include_docs_urls
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from .permission.views import GetUserProfileView, GetRouters
|
||||
from .utils.login import LoginView, LogoutView
|
||||
from .utils.response import SuccessResponse
|
||||
from apps.vadmin.permission.views import GetUserProfileView, GetRouters
|
||||
from apps.vadmin.utils.login import LoginView, LogoutView
|
||||
from apps.vadmin.op_drf.response import SuccessResponse
|
||||
|
||||
|
||||
class CaptchaRefresh(APIView):
|
||||
|
|
|
@ -12,8 +12,8 @@ from django.utils.translation import ugettext as _
|
|||
from rest_framework import exceptions
|
||||
from rest_framework_jwt.utils import jwt_decode_handler
|
||||
|
||||
from .jwt_util import jwt_get_session_id
|
||||
from ..permission.models.users import UserProfile
|
||||
from apps.vadmin.permission.models.users import UserProfile
|
||||
from apps.vadmin.utils.jwt_util import jwt_get_session_id
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
User = get_user_model()
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
import logging
|
||||
|
||||
from captcha.models import CaptchaStore
|
||||
from django.conf import settings
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.backends import ModelBackend
|
||||
from django.utils import timezone
|
||||
from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication
|
||||
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
UserModel = get_user_model()
|
||||
|
||||
|
|
|
@ -15,8 +15,8 @@ from rest_framework.response import Response
|
|||
from rest_framework_extensions.settings import extensions_api_settings
|
||||
|
||||
from application.celery import app
|
||||
from .string_util import bas64_encode_text, bas64_decode_text
|
||||
from ..system.models import CeleryLog
|
||||
from apps.vadmin.system.models import CeleryLog
|
||||
from apps.vadmin.utils.string_util import bas64_encode_text, bas64_decode_text
|
||||
|
||||
|
||||
def get_cache(alias=None):
|
||||
|
@ -34,12 +34,13 @@ def BaseCeleryApp(name, save_success_logs=True):
|
|||
:param save_success_logs: 是否保存成功的日志(适用于频率高的celery任务,成功不需要保存日志,则传False)
|
||||
:return:
|
||||
"""
|
||||
|
||||
def wraps(func):
|
||||
@app.task(name=name)
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
obj = CeleryLog()
|
||||
obj.name = ''.join(str(func.__doc__).replace(' ','').split('\n')[:2])
|
||||
obj.name = ''.join(str(func.__doc__).replace(' ', '').split('\n')[:2])
|
||||
obj.func_name = str(func.__name__)
|
||||
obj.kwargs = f"*args:{args}\n**kwargs:{kwargs}"
|
||||
start_time = datetime.now()
|
||||
|
|
|
@ -4,8 +4,7 @@ import traceback
|
|||
from rest_framework import exceptions
|
||||
from rest_framework.views import set_rollback
|
||||
|
||||
from .request_util import get_verbose_name
|
||||
from .response import ErrorResponse
|
||||
from apps.vadmin.op_drf.response import ErrorResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ import xlrd
|
|||
import xlwt
|
||||
from django.conf import settings
|
||||
|
||||
from ..system.models import SaveFile
|
||||
from ..system.serializers import SaveFileSerializer
|
||||
from apps.vadmin.system.models import SaveFile
|
||||
from apps.vadmin.system.serializers import SaveFileSerializer
|
||||
|
||||
|
||||
def len_byte(value):
|
||||
|
|
|
@ -10,12 +10,11 @@ from rest_framework.permissions import IsAuthenticated
|
|||
from rest_framework.views import APIView
|
||||
from rest_framework_jwt.views import ObtainJSONWebToken, jwt_response_payload_handler
|
||||
|
||||
from .exceptions import GenException
|
||||
from .jwt_util import jwt_get_session_id
|
||||
from .request_util import get_request_ip, get_os, get_browser, get_login_location
|
||||
from .response import SuccessResponse, ErrorResponse
|
||||
# from .jwt_util import jwt_response_payload_handler
|
||||
from ..system.models.logininfor import LoginInfor
|
||||
from apps.vadmin.system.models.logininfor import LoginInfor
|
||||
from apps.vadmin.utils.exceptions import GenException
|
||||
from apps.vadmin.utils.jwt_util import jwt_get_session_id
|
||||
from apps.vadmin.utils.request_util import get_request_ip, get_os, get_browser, get_login_location
|
||||
from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -62,7 +61,7 @@ class LoginView(ObtainJSONWebToken):
|
|||
else:
|
||||
raise GenException(message='验证码错误')
|
||||
|
||||
def save_login_infor(self, request, msg='',status=True,session_id=''):
|
||||
def save_login_infor(self, request, msg='', status=True, session_id=''):
|
||||
User = get_user_model()
|
||||
instance = LoginInfor()
|
||||
instance.session_id = session_id
|
||||
|
@ -89,7 +88,7 @@ class LoginView(ObtainJSONWebToken):
|
|||
session_id = jwt_get_session_id(token)
|
||||
key = f"{self.prefix}_{session_id}_{username}"
|
||||
cache.set(key, token, self.ex.total_seconds())
|
||||
self.save_login_infor(request, '登录成功',session_id=session_id)
|
||||
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,
|
||||
|
@ -98,7 +97,7 @@ class LoginView(ObtainJSONWebToken):
|
|||
domain=settings.SESSION_COOKIE_DOMAIN,
|
||||
httponly=False)
|
||||
return response
|
||||
self.save_login_infor(request, '登录失败,账户/密码不正确',False)
|
||||
self.save_login_infor(request, '登录失败,账户/密码不正确', False)
|
||||
return ErrorResponse(data=serializer.errors, msg='账户/密码不正确')
|
||||
|
||||
# def handle_exception(self, exc):
|
||||
|
|
|
@ -6,7 +6,7 @@ from django.apps.config import AppConfig
|
|||
from django.db.models.fields import Field
|
||||
from rest_framework.renderers import JSONRenderer
|
||||
|
||||
from ..permission.models import Dept
|
||||
from apps.vadmin.permission.models import Dept
|
||||
|
||||
|
||||
def get_primary_field(model, many=False):
|
||||
|
|
|
@ -1,91 +0,0 @@
|
|||
"""
|
||||
常用的Response以及Django的Response、DRF的Response
|
||||
"""
|
||||
from django.http.response import DjangoJSONEncoder, JsonResponse
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
||||
class OpDRFJSONEncoder(DjangoJSONEncoder):
|
||||
"""
|
||||
重写DjangoJSONEncoder
|
||||
(1)默认返回支持中文格式的json字符串
|
||||
"""
|
||||
|
||||
def __init__(self, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False,
|
||||
indent=None, separators=None, default=None):
|
||||
super().__init__(skipkeys=skipkeys, ensure_ascii=False, check_circular=check_circular,
|
||||
allow_nan=allow_nan, sort_keys=sort_keys, indent=indent, separators=separators,
|
||||
default=default)
|
||||
|
||||
|
||||
class SuccessResponse(Response):
|
||||
"""
|
||||
标准响应成功的返回, SuccessResponse(data)或者SuccessResponse(data=data)
|
||||
(1)默认错误码返回2000, 不支持指定其他返回码
|
||||
"""
|
||||
|
||||
def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False,
|
||||
content_type=None):
|
||||
self.std_data = {
|
||||
"code": 200,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'success'
|
||||
}
|
||||
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.std_data)
|
||||
|
||||
|
||||
class ErrorResponse(Response):
|
||||
"""
|
||||
标准响应错误的返回,ErrorResponse(msg='xxx')
|
||||
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorResponse(code=xxx)
|
||||
"""
|
||||
|
||||
def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None,
|
||||
exception=False, content_type=None):
|
||||
self.std_data = {
|
||||
"code": code,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'error'
|
||||
}
|
||||
super().__init__(self.std_data, status, template_name, headers, exception, content_type)
|
||||
|
||||
def __str__(self):
|
||||
return str(self.std_data)
|
||||
|
||||
|
||||
class SuccessJsonResponse(JsonResponse):
|
||||
"""
|
||||
标准JsonResponse, SuccessJsonResponse(data)SuccessJsonResponse(data=data)
|
||||
(1)仅SuccessResponse无法使用时才能推荐使用SuccessJsonResponse
|
||||
"""
|
||||
|
||||
def __init__(self, data, msg='success', encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs):
|
||||
std_data = {
|
||||
"code": 200,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'success'
|
||||
}
|
||||
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
|
||||
|
||||
|
||||
class ErrorJsonResponse(JsonResponse):
|
||||
"""
|
||||
标准JsonResponse, 仅ErrorResponse无法使用时才能使用ErrorJsonResponse
|
||||
(1)默认错误码返回2001, 也可以指定其他返回码:ErrorJsonResponse(code=xxx)
|
||||
"""
|
||||
|
||||
def __init__(self, data, msg='error', code=201, encoder=OpDRFJSONEncoder, safe=True, json_dumps_params=None,
|
||||
**kwargs):
|
||||
std_data = {
|
||||
"code": code,
|
||||
"data": data,
|
||||
"msg": msg,
|
||||
"status": 'error'
|
||||
}
|
||||
super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)
|
Loading…
Reference in New Issue