# -*- coding: utf-8 -*- """ @Remark: 资源文件管理 """ import hashlib from rest_framework import serializers from rest_framework.permissions import IsAuthenticated from mysystem.models import FileGroup,FileManage from utils.jsonResponse import SuccessResponse from utils.serializers import CustomModelSerializer from utils.viewset import CustomModelViewSet import django_filters class FileGroupSimpleSerializer(CustomModelSerializer): """ 文件分组-序列化器 """ class Meta: model = FileGroup fields = ['id','name','parent'] read_only_fields = ["id"] class FileGroupCreateUpdateSerializer(CustomModelSerializer): """ 文件分组 创建/更新时的列化器 """ class Meta: model = FileGroup fields = '__all__' class FileGroupViewSet(CustomModelViewSet): """ 文件分组接口 list:查询 create:新增 update:修改 retrieve:单例 destroy:删除 """ queryset = FileGroup.objects.all().order_by("sort","create_datetime") serializer_class = FileGroupSimpleSerializer create_serializer_class = FileGroupCreateUpdateSerializer update_serializer_class = FileGroupCreateUpdateSerializer # filterset_fields = ['status'] search_fields = ('name', 'parent') def list(self, request, *args, **kwargs): queryset = self.filter_queryset(self.get_queryset()) serializer = self.get_serializer(queryset, many=True, request=request) tempdata = [{'id':None,'name':'我的图片','parent':""},{'id':-1,'name':'未分组','parent':None}] response_data = tempdata + serializer.data return SuccessResponse(data=response_data, msg="获取成功") class FileManageSerializer(CustomModelSerializer): """ 文件管理-序列化器 """ class Meta: model = FileManage fields = "__all__" read_only_fields = ["id"] class FileManageCreateUpdateSerializer(CustomModelSerializer): """ 文件管理 创建/更新时的列化器 """ def create(self, validated_data): file_engine = 'local' file_backup = False file = self.initial_data.get('file') if not file: raise ValueError("请上传文件") group = self.initial_data.get('group',None) file_size = file.size validated_data['name'] = str(file) validated_data['size'] = file_size md5 = hashlib.md5() for chunk in file.chunks(): md5.update(chunk) validated_data['md5sum'] = md5.hexdigest() validated_data['location'] = file_engine validated_data['mime_type'] = file.content_type if group: group = FileGroup.objects.get(id=group) else: group = None validated_data['group'] = group if file_backup: validated_data['url'] = file if file_engine == 'local': validated_data['url'] = file # 审计字段 try: request_user = self.request.user validated_data['dept_belong_id'] = request_user.dept.id validated_data['creator'] = request_user.id validated_data['modifier'] = request_user.id except: pass return super().create(validated_data) class Meta: model = FileManage fields = '__all__' class FileManageFilterset(django_filters.rest_framework.FilterSet): # 模糊搜索 group = django_filters.CharFilter(method='my_filter') def my_filter(self, queryset, field_name, value): value = str(value) if value == "-1": return queryset.filter(group__isnull=True) elif value: return queryset.filter(group_id = value) return queryset class Meta: model = FileManage fields = ['group'] class FileManageViewSet(CustomModelViewSet): """ 文件管理接口 list:查询 create:新增 update:修改 retrieve:单例 destroy:删除 """ queryset = FileManage.objects.all().order_by("-create_datetime") serializer_class = FileManageSerializer create_serializer_class = FileManageCreateUpdateSerializer update_serializer_class = FileManageCreateUpdateSerializer filterset_class = FileManageFilterset search_fields = ('name',)