2025-03-17 18:06:54 +08:00

144 lines
4.3 KiB
Python

# -*- 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',)