144 lines
4.3 KiB
Python
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',) |