django-vue-admin/dvadmin-backend/apps/system/views.py

120 lines
4.5 KiB
Python

import os
from django.conf import settings
from django.http import HttpResponse
from rest_framework.request import Request
from apps.op_drf.viewsets import CustomModelViewSet
from apps.system.filters import DictDetailsFilter, DictDataFilter, ConfigSettingsFilter
from apps.system.models import DictData, DictDetails, ConfigSettings, SaveFile
from apps.system.serializers import DictDataSerializer, DictDataCreateUpdateSerializer, DictDetailsSerializer, \
DictDetailsCreateUpdateSerializer, DictDetailsListSerializer, ConfigSettingsSerializer, \
ConfigSettingsCreateUpdateSerializer, SaveFileSerializer, SaveFileCreateUpdateSerializer
from utils.response import SuccessResponse
class DictDataModelViewSet(CustomModelViewSet):
"""
字典管理模型的CRUD视图
"""
queryset = DictData.objects.all()
serializer_class = DictDataSerializer
create_serializer_class = DictDataCreateUpdateSerializer
update_serializer_class = DictDataCreateUpdateSerializer
# list_serializer_class = ListRoleSerializer
# retrieve_serializer_class = DetailRoleSerializer
filter_class = DictDataFilter
# update_extra_permission_classes = (IsManagerPermission,)
# destroy_extra_permission_classes = (IsManagerPermission,)
# create_extra_permission_classes = (IsManagerPermission,)
search_fields = ('dictName',)
ordering = 'id' # 默认排序
class DictDetailsModelViewSet(CustomModelViewSet):
"""
字典详情 模型的CRUD视图
"""
queryset = DictDetails.objects.all()
serializer_class = DictDetailsSerializer
create_serializer_class = DictDetailsCreateUpdateSerializer
update_serializer_class = DictDetailsCreateUpdateSerializer
filter_class = DictDetailsFilter
# update_extra_permission_classes = (IsManagerPermission,)
# destroy_extra_permission_classes = (IsManagerPermission,)
# create_extra_permission_classes = (IsManagerPermission,)
search_fields = ('dictLabel',)
ordering = 'sort' # 默认排序
def dict_details_list(self, request: Request, *args, **kwargs):
"""
根据字典类型查询字典数据信息
:param request:
:param args:
:param kwargs:
:return:
"""
queryset = self.queryset.filter(dict_data__dictType=kwargs.get('pk')).order_by('sort')
if hasattr(self, 'handle_logging'):
self.handle_logging(request, *args, **kwargs)
serializer = DictDetailsListSerializer(queryset, many=True)
return SuccessResponse(serializer.data)
class ConfigSettingsModelViewSet(CustomModelViewSet):
"""
参数设置 模型的CRUD视图
"""
queryset = ConfigSettings.objects.all()
serializer_class = ConfigSettingsSerializer
create_serializer_class = ConfigSettingsCreateUpdateSerializer
update_serializer_class = ConfigSettingsCreateUpdateSerializer
filter_class = ConfigSettingsFilter
# update_extra_permission_classes = (IsManagerPermission,)
# destroy_extra_permission_classes = (IsManagerPermission,)
# create_extra_permission_classes = (IsManagerPermission,)
search_fields = ('configName',)
ordering = 'id' # 默认排序
def get_config_key(self, request: Request, *args, **kwargs):
"""
根据 参数键名 查询参数数据信息
:param request:
:param args:
:param kwargs:
:return:
"""
queryset = self.queryset.filter(configKey=kwargs.get('pk')).first()
# if hasattr(self, 'handle_logging'):
# self.handle_logging(request, *args, **kwargs)
return SuccessResponse(msg=queryset.configValue if queryset else '')
class SaveFileModelViewSet(CustomModelViewSet):
"""
参数设置 模型的CRUD视图
"""
queryset = SaveFile.objects.all()
serializer_class = SaveFileSerializer
create_serializer_class = SaveFileCreateUpdateSerializer
update_serializer_class = SaveFileCreateUpdateSerializer
# filter_class = ConfigSettingsFilter
search_fields = ('configName',)
ordering = 'id' # 默认排序
def download_file(self, request: Request, *args, **kwargs):
"""
下载文件
:param request:
:param args:
:param kwargs:
:return:
"""
instance = self.get_object()
file_path = os.path.join(settings.MEDIA_ROOT,str(instance.file))
with open(file_path, "rb") as f:
res = HttpResponse(f)
res["Content-Type"] = instance.type # 注意格式
res["Content-Disposition"] = 'filename="{}"'.format(instance.name)
return res