120 lines
4.5 KiB
Python
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
|