重构(dvadmin):所有包引入都加apps.

pull/36/head
李强 2021-07-03 15:43:54 +08:00
parent a85e185d22
commit 959faf6ec4
63 changed files with 185 additions and 248 deletions

View File

@ -22,7 +22,7 @@ from django.urls import re_path, include
from django.views.static import serve from django.views.static import serve
from rest_framework.views import APIView from rest_framework.views import APIView
from apps.vadmin.utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
class CaptchaRefresh(APIView): class CaptchaRefresh(APIView):

View File

@ -2,6 +2,6 @@ from django.apps import AppConfig
class DpCmdbConfig(AppConfig): class DpCmdbConfig(AppConfig):
name = 'vadmin.celery' name = 'apps.vadmin.celery'

View File

@ -1,8 +1,8 @@
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
from rest_framework import serializers from rest_framework import serializers
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
class IntervalScheduleSerializer(CustomModelSerializer): class IntervalScheduleSerializer(CustomModelSerializer):

View File

@ -2,13 +2,11 @@ from django_celery_beat.admin import TaskSelectWidget
from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask from django_celery_beat.models import IntervalSchedule, CrontabSchedule, PeriodicTask
from rest_framework.views import APIView from rest_framework.views import APIView
from ..celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter from apps.vadmin.celery.filters import IntervalScheduleFilter, CrontabScheduleFilter, PeriodicTaskFilter
from ..celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer from apps.vadmin.celery.serializers import IntervalScheduleSerializer, CrontabScheduleSerializer, PeriodicTaskSerializer
from ..op_drf.views import CustomAPIView from apps.vadmin.op_drf.views import CustomAPIView
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..system.models import DictData from apps.vadmin.op_drf.response import SuccessResponse
from ..system.serializers import DictDataSerializer
from ..utils.response import SuccessResponse
class IntervalScheduleModelViewSet(CustomModelViewSet): class IntervalScheduleModelViewSet(CustomModelViewSet):

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class MonitorConfig(AppConfig): class MonitorConfig(AppConfig):
name = 'vadmin.monitor' name = 'apps.vadmin.monitor'
verbose_name = "系统监控" verbose_name = "系统监控"

View File

@ -1,6 +1,6 @@
import django_filters import django_filters
from .models import Server, Monitor from apps.vadmin.monitor.models import Server, Monitor
class ServerFilter(django_filters.rest_framework.FilterSet): class ServerFilter(django_filters.rest_framework.FilterSet):

View File

@ -1,3 +1,3 @@
from ..models.monitor import Monitor from apps.vadmin.monitor.models.monitor import Monitor
from ..models.server import Server from apps.vadmin.monitor.models.server import Server
from ..models.sys_files import SysFiles from apps.vadmin.monitor.models.sys_files import SysFiles

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, CASCADE 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): class Monitor(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, CASCADE 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): class SysFiles(CoreModel):

View File

@ -1,5 +1,5 @@
from .models import Server, Monitor from apps.vadmin.monitor.models import Server, Monitor
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
# ================================================= # # ================================================= #

View File

@ -5,10 +5,10 @@ import time
import psutil import psutil
from ..monitor.models import Server, Monitor, SysFiles from apps.vadmin.monitor.models import Server, Monitor, SysFiles
from ..op_drf.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
from ..system.models import ConfigSettings from apps.vadmin.system.models import ConfigSettings
from ..utils.decorators import BaseCeleryApp from apps.vadmin.utils.decorators import BaseCeleryApp
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
from platform import platform from platform import platform

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from .views import ServerModelViewSet, MonitorModelViewSet from apps.vadmin.monitor.views import ServerModelViewSet, MonitorModelViewSet
router = DefaultRouter() router = DefaultRouter()
router.register(r'server', ServerModelViewSet) router.register(r'server', ServerModelViewSet)

View File

@ -1,13 +1,13 @@
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule
from rest_framework.request import Request from rest_framework.request import Request
from .filters import ServerFilter, MonitorFilter from apps.vadmin.monitor.filters import ServerFilter, MonitorFilter
from .models import Server, Monitor, SysFiles from apps.vadmin.monitor.models import Server, Monitor, SysFiles
from .serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer from apps.vadmin.monitor.serializers import ServerSerializer, MonitorSerializer, UpdateServerSerializer
from ..op_drf.response import SuccessResponse, ErrorResponse from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.permissions import CommonPermission from apps.vadmin.permission.permissions import CommonPermission
from ..system.models import ConfigSettings from apps.vadmin.system.models import ConfigSettings
class ServerModelViewSet(CustomModelViewSet): class ServerModelViewSet(CustomModelViewSet):

View File

@ -1,7 +1,7 @@
from django.apps import AppConfig
import logging import logging
from django.apps import AppConfig
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -2,7 +2,7 @@ from django.contrib.auth import get_user_model
from django.db import models from django.db import models
from django.db.models import SET_NULL 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): class IdField(models.CharField):

View File

@ -10,7 +10,7 @@ from django.utils import six
from mongoengine.queryset import visitor from mongoengine.queryset import visitor
from rest_framework.filters import BaseFilterBackend, SearchFilter, OrderingFilter 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__) logger = logging.getLogger(__name__)

View File

@ -4,11 +4,11 @@ from django.http import Http404
from django.shortcuts import get_object_or_404 as _get_object_or_404 from django.shortcuts import get_object_or_404 as _get_object_or_404
from rest_framework.settings import api_settings 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 . import mixins
from .pagination import Pagination, JsonPagination from .pagination import JsonPagination
from .response import SuccessResponse 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 from .views import CustomAPIView

View File

@ -1,5 +1,4 @@
import logging import logging
from django.core.cache import cache
class RedisHandler(logging.StreamHandler): class RedisHandler(logging.StreamHandler):
@ -7,4 +6,3 @@ class RedisHandler(logging.StreamHandler):
def emit(self, record): def emit(self, record):
msg = self.format(record) msg = self.format(record)
print(msg) print(msg)

View File

@ -40,7 +40,7 @@ class Command(BaseCommand):
class {name.capitalize()}Config(AppConfig): class {name.capitalize()}Config(AppConfig):
name = '{name}' name = 'apps.{name}'
verbose_name = "{name}App" verbose_name = "{name}App"
""" """
with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f: with open(os.path.join(app_path, "apps.py"), 'w', encoding='UTF-8') as f:

View File

@ -9,11 +9,11 @@ from django.conf import settings
from django.contrib.auth.models import AnonymousUser from django.contrib.auth.models import AnonymousUser
from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin
from apps.vadmin.op_drf.response import ErrorJsonResponse
from apps.vadmin.permission.models import Menu from apps.vadmin.permission.models import Menu
from apps.vadmin.system.models import OperationLog 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 get_login_location, get_request_canonical_path, get_request_user, get_verbose_name
from ..utils.response import ErrorJsonResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -5,9 +5,9 @@ from rest_framework import status
from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyRelatedField from rest_framework.relations import ManyRelatedField, RelatedField, PrimaryKeyRelatedField
from rest_framework.request import Request 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 .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): class CreateModelMixin(mixins.CreateModelMixin):
@ -317,7 +317,8 @@ class ImportSerializerMixin:
# 示例数据 # 示例数据
queryset = self.filter_queryset(self.get_queryset()) queryset = self.filter_queryset(self.get_queryset())
return SuccessResponse( 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') updateSupport = request.data.get('updateSupport')
# 从excel中组织对应的数据结构然后使用序列化器保存 # 从excel中组织对应的数据结构然后使用序列化器保存
data = excel_to_data(request.data.get('file_url'), self.import_field_data) data = excel_to_data(request.data.get('file_url'), self.import_field_data)

View File

@ -1,5 +1,4 @@
from collections import OrderedDict from collections import OrderedDict
from typing import Any
from rest_framework.pagination import PageNumberPagination, _positive_int from rest_framework.pagination import PageNumberPagination, _positive_int
from rest_framework.utils.urls import replace_query_param from rest_framework.utils.urls import replace_query_param

View File

@ -1,7 +1,7 @@
""" """
常用的Response以及Django的ResponseDRF的Response 常用的Response以及Django的ResponseDRF的Response
""" """
from django.http.response import DjangoJSONEncoder from django.http.response import DjangoJSONEncoder, JsonResponse
from rest_framework.response import Response 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, def __init__(self, data=None, msg='success', status=None, template_name=None, headers=None, exception=False,
content_type=None): content_type=None):
std_data = { self.std_data = {
"code": 200, "code": 200,
"data": data, "data": data,
"msg": msg, "msg": msg,
"status": 'success' "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): 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, def __init__(self, data=None, msg='error', code=201, status=None, template_name=None, headers=None,
exception=False, content_type=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 = { std_data = {
"code": code, "code": code,
"data": data, "data": data,
"msg": msg, "msg": msg,
"status": 'error' "status": 'error'
} }
super().__init__(std_data, status, template_name, headers, exception, content_type) super().__init__(std_data, encoder, safe, json_dumps_params, **kwargs)

View File

@ -3,7 +3,7 @@
""" """
from rest_framework.validators import UniqueValidator, qs_exists from rest_framework.validators import UniqueValidator, qs_exists
from vadmin.utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
class CustomUniqueValidator(UniqueValidator): class CustomUniqueValidator(UniqueValidator):

View File

@ -6,11 +6,8 @@ from rest_framework.exceptions import APIException as DRFAPIException
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from ..utils import exceptions from apps.vadmin.utils import exceptions
from ..utils.model_util import ModelRelateUtils from .response import ErrorResponse
from .logging.view_logger import CustomerRelationshipViewLogger
from .response import SuccessResponse, ErrorResponse
from .serializers import CustomModelSerializer
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -11,7 +11,7 @@ from rest_framework.request import Request
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.viewsets import ViewSetMixin from rest_framework.viewsets import ViewSetMixin
from ..utils.exceptions import APIException from apps.vadmin.utils.exceptions import APIException
from . import mixins from . import mixins
from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter from .filters import MongoSearchFilter, MongoOrderingFilter, AdvancedSearchFilter, MongoAdvancedSearchFilter
from .generics import GenericAPIView from .generics import GenericAPIView

View File

@ -1,8 +1,8 @@
import django_filters import django_filters
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from ..permission.models import Menu, Dept, Post, Role from apps.vadmin.permission.models import Menu, Dept, Post, Role
from ..utils.model_util import get_dept from apps.vadmin.utils.model_util import get_dept
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -5,7 +5,7 @@ from django.conf import settings
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import connection from django.db import connection
from ....scripts import getSql from apps.vadmin.scripts import getSql
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -1,5 +1,5 @@
from ..models.dept import Dept from apps.vadmin.permission.models.dept import Dept
from ..models.menu import Menu from apps.vadmin.permission.models.menu import Menu
from ..models.post import Post from apps.vadmin.permission.models.post import Post
from ..models.role import Role from apps.vadmin.permission.models.role import Role
from ..models.users import UserProfile from apps.vadmin.permission.models.users import UserProfile

View File

@ -1,7 +1,7 @@
from django.db.models import CASCADE from django.db.models import CASCADE
from django.db.models import CharField, IntegerField, ForeignKey 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): class Dept(CoreModel):

View File

@ -1,7 +1,7 @@
from django.core.cache import cache from django.core.cache import cache
from django.db.models import IntegerField, ForeignKey, CharField, CASCADE, Q 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): class Menu(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import IntegerField, BooleanField, CharField, TextField 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): class Post(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import IntegerField, BooleanField, CharField, TextField, ManyToManyField 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): class Role(CoreModel):
@ -16,7 +16,7 @@ class Role(CoreModel):
roleSort = IntegerField(verbose_name="角色顺序") roleSort = IntegerField(verbose_name="角色顺序")
status = CharField(max_length=8, verbose_name="角色状态") status = CharField(max_length=8, verbose_name="角色状态")
admin = BooleanField(default=False, verbose_name="是否为admin") 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) remark = TextField(verbose_name="备注", help_text="备注", null=True, blank=True)
dept = ManyToManyField(to='permission.Dept', verbose_name='数据权限-关联部门', db_constraint=False) dept = ManyToManyField(to='permission.Dept', verbose_name='数据权限-关联部门', db_constraint=False)
menu = ManyToManyField(to='permission.Menu', verbose_name='关联菜单权限', db_constraint=False) menu = ManyToManyField(to='permission.Menu', verbose_name='关联菜单权限', db_constraint=False)

View File

@ -5,7 +5,7 @@ from django.contrib.auth.models import UserManager, AbstractUser
from django.core.cache import cache from django.core.cache import cache
from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE 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): class UserProfile(AbstractUser, CoreModel):
@ -25,7 +25,8 @@ class UserProfile(AbstractUser, CoreModel):
user_type = IntegerField(default=0, verbose_name="用户类型") user_type = IntegerField(default=0, verbose_name="用户类型")
post = ManyToManyField(to='permission.Post', verbose_name='关联岗位', db_constraint=False) post = ManyToManyField(to='permission.Post', verbose_name='关联岗位', db_constraint=False)
role = ManyToManyField(to='permission.Role', 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 @property
def get_user_interface_dict(self): def get_user_interface_dict(self):

View File

@ -10,8 +10,8 @@ from rest_framework.permissions import (BasePermission,
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .models import Dept from apps.vadmin.permission.models import Dept
from ..utils.model_util import get_dept from apps.vadmin.utils.model_util import get_dept
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()

View File

@ -1,10 +1,10 @@
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from rest_framework import serializers from rest_framework import serializers
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..op_drf.validator import CustomUniqueValidator from apps.vadmin.op_drf.validator import CustomUniqueValidator
from ..permission.models import Menu, Dept, Post, Role from apps.vadmin.permission.models import Menu, Dept, Post, Role
from ..system.models import MessagePush from apps.vadmin.system.models import MessagePush
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -3,8 +3,8 @@ import logging
from captcha.models import CaptchaStore from captcha.models import CaptchaStore
from ..utils.decorators import BaseCeleryApp from apps.vadmin.utils.decorators import BaseCeleryApp
from ..utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@BaseCeleryApp(name='apps.vadmin.permission.tasks.clear_invalid_captcha') @BaseCeleryApp(name='apps.vadmin.permission.tasks.clear_invalid_captcha')

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter 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 UserProfileModelViewSet
router = DefaultRouter() router = DefaultRouter()

View File

@ -2,18 +2,18 @@ from django.contrib.auth import authenticate, get_user_model
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .permissions import CommonPermission, DeptDestroyPermission from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..op_drf.filters import DataLevelPermissionsFilter from apps.vadmin.permission.permissions import CommonPermission, DeptDestroyPermission
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
from ..permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.models import Role, Menu, Dept, Post from apps.vadmin.permission.filters import MenuFilter, DeptFilter, PostFilter, RoleFilter, UserProfileFilter
from ..permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \ from apps.vadmin.permission.models import Role, Menu, Dept, Post
from apps.vadmin.permission.serializers import UserProfileSerializer, MenuSerializer, RoleSerializer, \
MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \ MenuCreateUpdateSerializer, DeptSerializer, DeptCreateUpdateSerializer, PostSerializer, PostCreateUpdateSerializer, \
RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \ RoleCreateUpdateSerializer, DeptTreeSerializer, MenuTreeSerializer, UserProfileCreateUpdateSerializer, \
PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \ PostSimpleSerializer, RoleSimpleSerializer, ExportUserProfileSerializer, ExportRoleSerializer, ExportPostSerializer, \
UserProfileImportSerializer UserProfileImportSerializer
from ..system.models import DictDetails from apps.vadmin.system.models import DictDetails
from ..utils.response import SuccessResponse, ErrorResponse
UserProfile = get_user_model() UserProfile = get_user_model()

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class SystemConfig(AppConfig): class SystemConfig(AppConfig):
name = 'vadmin.system' name = 'apps.vadmin.system'
verbose_name = "系统管理" verbose_name = "系统管理"

View File

@ -1,7 +1,7 @@
import django_filters import django_filters
from .models import LoginInfor, OperationLog, CeleryLog from apps.vadmin.system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile
from ..system.models import DictDetails, DictData, ConfigSettings, MessagePush, SaveFile from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
class DictDataFilter(django_filters.rest_framework.FilterSet): class DictDataFilter(django_filters.rest_framework.FilterSet):

View File

@ -1,10 +1,9 @@
from ..models.config_settings import ConfigSettings from apps.vadmin.system.models.celery_log import CeleryLog
from ..models.dict_data import DictData from apps.vadmin.system.models.config_settings import ConfigSettings
from ..models.dict_details import DictDetails from apps.vadmin.system.models.dict_data import DictData
from ..models.save_file import SaveFile from apps.vadmin.system.models.dict_details import DictDetails
from ..models.message_push import MessagePush from apps.vadmin.system.models.logininfor import LoginInfor
from ..models.message_push import MessagePushUser from apps.vadmin.system.models.message_push import MessagePush
from ..models.logininfor import LoginInfor from apps.vadmin.system.models.message_push import MessagePushUser
from ..models.operation_log import OperationLog from apps.vadmin.system.models.operation_log import OperationLog
from ..models.celery_log import CeleryLog from apps.vadmin.system.models.save_file import SaveFile

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, BooleanField, TextField 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): class CeleryLog(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE 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): class ConfigSettings(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import TextField, CharField,ForeignKey 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): class DictData(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, ForeignKey, BooleanField, CASCADE 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): class DictDetails(CoreModel):

View File

@ -1,6 +1,6 @@
from django.db.models import CharField, BooleanField, TextField 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): class LoginInfor(CoreModel):

View File

@ -2,8 +2,8 @@ from django.conf import settings
from django.db import models from django.db import models
from django.db.models import * from django.db.models import *
from ...op_drf.fields import UpdateDateTimeField, CreateDateTimeField from apps.vadmin.op_drf.fields import UpdateDateTimeField, CreateDateTimeField
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
""" """
消息通知模型 消息通知模型

View File

@ -1,6 +1,6 @@
from django.db.models import TextField, CharField, BooleanField 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): class OperationLog(CoreModel):
@ -12,7 +12,7 @@ class OperationLog(CoreModel):
request_ip = CharField(max_length=32, verbose_name="请求ip地址", null=True, blank=True) 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) request_browser = CharField(max_length=64, verbose_name="请求浏览器", null=True, blank=True)
response_code = CharField(max_length=32, 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) request_os = CharField(max_length=64, verbose_name="操作系统", null=True, blank=True)
json_result = TextField(verbose_name="返回信息", null=True, blank=True) json_result = TextField(verbose_name="返回信息", null=True, blank=True)
status = BooleanField(default=False, verbose_name="响应状态") status = BooleanField(default=False, verbose_name="响应状态")

View File

@ -1,10 +1,10 @@
import os import os
import uuid import uuid
from django.db.models import CharField, FileField,BooleanField from django.db.models import CharField, FileField, BooleanField
from django.utils import timezone from django.utils import timezone
from ...op_drf.models import CoreModel from apps.vadmin.op_drf.models import CoreModel
def files_path(instance, filename): def files_path(instance, filename):

View File

@ -1,9 +1,9 @@
from django.core.cache import cache from django.core.cache import cache
from rest_framework import serializers from rest_framework import serializers
from .models import LoginInfor, OperationLog, CeleryLog from apps.vadmin.op_drf.serializers import CustomModelSerializer
from ..op_drf.serializers import CustomModelSerializer from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush, MessagePushUser from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
# ================================================= # # ================================================= #

View File

@ -1,7 +1,7 @@
from django.urls import re_path from django.urls import re_path
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
from ..system.views import DictDataModelViewSet, DictDetailsModelViewSet, \ from apps.vadmin.system.views import DictDataModelViewSet, DictDetailsModelViewSet, \
ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \ ConfigSettingsModelViewSet, SaveFileModelViewSet, MessagePushModelViewSet, LoginInforModelViewSet, \
OperationLogModelViewSet, CeleryLogModelViewSet, SystemInfoApiView OperationLogModelViewSet, CeleryLogModelViewSet, SystemInfoApiView

View File

@ -6,25 +6,25 @@ from django.db.models import Q
from rest_framework.request import Request from rest_framework.request import Request
from rest_framework.views import APIView from rest_framework.views import APIView
from .models import LoginInfor, OperationLog, CeleryLog from apps.vadmin.op_drf.filters import DataLevelPermissionsFilter
from ..op_drf.filters import DataLevelPermissionsFilter from apps.vadmin.op_drf.response import SuccessResponse
from ..op_drf.viewsets import CustomModelViewSet from apps.vadmin.op_drf.viewsets import CustomModelViewSet
from ..permission.permissions import CommonPermission from apps.vadmin.permission.permissions import CommonPermission
from ..system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \ from apps.vadmin.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter, MessagePushFilter, \
SaveFileFilter, LoginInforFilter, OperationLogFilter, CeleryLogFilter SaveFileFilter, LoginInforFilter, OperationLogFilter, CeleryLogFilter
from ..system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush from apps.vadmin.system.models import DictData, DictDetails, ConfigSettings, SaveFile, MessagePush
from ..system.models import MessagePushUser from apps.vadmin.system.models import LoginInfor, OperationLog, CeleryLog
from ..system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \ from apps.vadmin.system.models import MessagePushUser
from apps.vadmin.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \ DictDetailsCreateUpdateSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \ ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer, \
ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \ ExportConfigSettingsSerializer, ExportDictDataSerializer, ExportDictDetailsSerializer, \
MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \ MessagePushSerializer, MessagePushCreateUpdateSerializer, ExportMessagePushSerializer, LoginInforSerializer, \
OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer, CeleryLogSerializer, \ OperationLogSerializer, ExportOperationLogSerializer, ExportLoginInforSerializer, CeleryLogSerializer, \
ExportCeleryLogSerializer ExportCeleryLogSerializer
from ..utils.export_excel import export_excel_save_model from apps.vadmin.utils.export_excel import export_excel_save_model
from ..utils.file_util import get_all_files, remove_empty_dir, delete_files from apps.vadmin.utils.file_util import get_all_files, remove_empty_dir, delete_files
from ..utils.response import SuccessResponse from apps.vadmin.utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
from ..utils.system_info_utils import get_memory_used_percent, get_cpu_used_percent, get_disk_used_percent
class DictDataModelViewSet(CustomModelViewSet): class DictDataModelViewSet(CustomModelViewSet):

View File

@ -2,5 +2,5 @@ from django.apps import AppConfig
class TemplateConfig(AppConfig): class TemplateConfig(AppConfig):
name = 'vadmin.template' name = 'apps.vadmin.template'
verbose_name = "模板App" verbose_name = "模板App"

View File

@ -22,9 +22,9 @@ from django.urls import re_path, include
from rest_framework.documentation import include_docs_urls from rest_framework.documentation import include_docs_urls
from rest_framework.views import APIView from rest_framework.views import APIView
from .permission.views import GetUserProfileView, GetRouters from apps.vadmin.permission.views import GetUserProfileView, GetRouters
from .utils.login import LoginView, LogoutView from apps.vadmin.utils.login import LoginView, LogoutView
from .utils.response import SuccessResponse from apps.vadmin.op_drf.response import SuccessResponse
class CaptchaRefresh(APIView): class CaptchaRefresh(APIView):

View File

@ -12,8 +12,8 @@ from django.utils.translation import ugettext as _
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework_jwt.utils import jwt_decode_handler from rest_framework_jwt.utils import jwt_decode_handler
from .jwt_util import jwt_get_session_id from apps.vadmin.permission.models.users import UserProfile
from ..permission.models.users import UserProfile from apps.vadmin.utils.jwt_util import jwt_get_session_id
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
User = get_user_model() User = get_user_model()

View File

@ -1,13 +1,10 @@
import logging import logging
from captcha.models import CaptchaStore
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend from django.contrib.auth.backends import ModelBackend
from django.utils import timezone from django.utils import timezone
from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication from rest_framework.authentication import SessionAuthentication as DjangoSessionAuthentication
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
UserModel = get_user_model() UserModel = get_user_model()

View File

@ -15,8 +15,8 @@ from rest_framework.response import Response
from rest_framework_extensions.settings import extensions_api_settings from rest_framework_extensions.settings import extensions_api_settings
from application.celery import app from application.celery import app
from .string_util import bas64_encode_text, bas64_decode_text from apps.vadmin.system.models import CeleryLog
from ..system.models import CeleryLog from apps.vadmin.utils.string_util import bas64_encode_text, bas64_decode_text
def get_cache(alias=None): def get_cache(alias=None):
@ -34,12 +34,13 @@ def BaseCeleryApp(name, save_success_logs=True):
:param save_success_logs: 是否保存成功的日志(适用于频率高的celery任务成功不需要保存日志则传False) :param save_success_logs: 是否保存成功的日志(适用于频率高的celery任务成功不需要保存日志则传False)
:return: :return:
""" """
def wraps(func): def wraps(func):
@app.task(name=name) @app.task(name=name)
@functools.wraps(func) @functools.wraps(func)
def wrapper(*args, **kwargs): def wrapper(*args, **kwargs):
obj = CeleryLog() 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.func_name = str(func.__name__)
obj.kwargs = f"*args{args}\n**kwargs{kwargs}" obj.kwargs = f"*args{args}\n**kwargs{kwargs}"
start_time = datetime.now() start_time = datetime.now()

View File

@ -4,8 +4,7 @@ import traceback
from rest_framework import exceptions from rest_framework import exceptions
from rest_framework.views import set_rollback from rest_framework.views import set_rollback
from .request_util import get_verbose_name from apps.vadmin.op_drf.response import ErrorResponse
from .response import ErrorResponse
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)

View File

@ -7,8 +7,8 @@ import xlrd
import xlwt import xlwt
from django.conf import settings from django.conf import settings
from ..system.models import SaveFile from apps.vadmin.system.models import SaveFile
from ..system.serializers import SaveFileSerializer from apps.vadmin.system.serializers import SaveFileSerializer
def len_byte(value): def len_byte(value):

View File

@ -10,12 +10,11 @@ from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView from rest_framework.views import APIView
from rest_framework_jwt.views import ObtainJSONWebToken, jwt_response_payload_handler from rest_framework_jwt.views import ObtainJSONWebToken, jwt_response_payload_handler
from .exceptions import GenException from apps.vadmin.system.models.logininfor import LoginInfor
from .jwt_util import jwt_get_session_id from apps.vadmin.utils.exceptions import GenException
from .request_util import get_request_ip, get_os, get_browser, get_login_location from apps.vadmin.utils.jwt_util import jwt_get_session_id
from .response import SuccessResponse, ErrorResponse from apps.vadmin.utils.request_util import get_request_ip, get_os, get_browser, get_login_location
# from .jwt_util import jwt_response_payload_handler from apps.vadmin.op_drf.response import SuccessResponse, ErrorResponse
from ..system.models.logininfor import LoginInfor
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -62,7 +61,7 @@ class LoginView(ObtainJSONWebToken):
else: else:
raise GenException(message='验证码错误') 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() User = get_user_model()
instance = LoginInfor() instance = LoginInfor()
instance.session_id = session_id instance.session_id = session_id
@ -89,7 +88,7 @@ class LoginView(ObtainJSONWebToken):
session_id = jwt_get_session_id(token) session_id = jwt_get_session_id(token)
key = f"{self.prefix}_{session_id}_{username}" key = f"{self.prefix}_{session_id}_{username}"
cache.set(key, token, self.ex.total_seconds()) 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: if self.JWT_AUTH_COOKIE and token:
expiration = (datetime.datetime.utcnow() + self.ex) expiration = (datetime.datetime.utcnow() + self.ex)
response.set_cookie(self.JWT_AUTH_COOKIE, response.set_cookie(self.JWT_AUTH_COOKIE,
@ -98,7 +97,7 @@ class LoginView(ObtainJSONWebToken):
domain=settings.SESSION_COOKIE_DOMAIN, domain=settings.SESSION_COOKIE_DOMAIN,
httponly=False) httponly=False)
return response return response
self.save_login_infor(request, '登录失败,账户/密码不正确',False) self.save_login_infor(request, '登录失败,账户/密码不正确', False)
return ErrorResponse(data=serializer.errors, msg='账户/密码不正确') return ErrorResponse(data=serializer.errors, msg='账户/密码不正确')
# def handle_exception(self, exc): # def handle_exception(self, exc):

View File

@ -6,7 +6,7 @@ from django.apps.config import AppConfig
from django.db.models.fields import Field from django.db.models.fields import Field
from rest_framework.renderers import JSONRenderer 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): def get_primary_field(model, many=False):

View File

@ -1,91 +0,0 @@
"""
常用的Response以及Django的ResponseDRF的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)