55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from rest_framework import serializers
 | 
						|
from django.conf import settings
 | 
						|
from django_filters.rest_framework import FilterSet, CharFilter
 | 
						|
 | 
						|
from dvadmin.utils.serializers import CustomModelSerializer
 | 
						|
from dvadmin.utils.viewset import CustomModelViewSet
 | 
						|
from dvadmin.system.models import DownloadCenter
 | 
						|
 | 
						|
 | 
						|
class DownloadCenterSerializer(CustomModelSerializer):
 | 
						|
    url = serializers.SerializerMethodField(read_only=True)
 | 
						|
 | 
						|
    def get_url(self, instance):
 | 
						|
        if self.request.query_params.get('prefix'):
 | 
						|
            if settings.ENVIRONMENT in ['local']:
 | 
						|
                prefix = 'http://127.0.0.1:8000'
 | 
						|
            elif settings.ENVIRONMENT in ['test']:
 | 
						|
                prefix = 'http://{host}/api'.format(host=self.request.get_host())
 | 
						|
            else:
 | 
						|
                prefix = 'https://{host}/api'.format(host=self.request.get_host())
 | 
						|
            return (f'{prefix}/media/{str(instance.url)}')
 | 
						|
        return f'media/{str(instance.url)}'
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = DownloadCenter
 | 
						|
        fields = "__all__"
 | 
						|
        read_only_fields = ["id"]
 | 
						|
 | 
						|
 | 
						|
class DownloadCenterFilterSet(FilterSet):
 | 
						|
    task_name = CharFilter(field_name='task_name', lookup_expr='icontains')
 | 
						|
    file_name = CharFilter(field_name='file_name', lookup_expr='icontains')
 | 
						|
 | 
						|
    class Meta:
 | 
						|
        model = DownloadCenter
 | 
						|
        fields = ['task_status', 'task_name', 'file_name']
 | 
						|
 | 
						|
 | 
						|
class DownloadCenterViewSet(CustomModelViewSet):
 | 
						|
    queryset = DownloadCenter.objects.all()
 | 
						|
    serializer_class = DownloadCenterSerializer
 | 
						|
    filter_class = DownloadCenterFilterSet
 | 
						|
    permission_classes = []
 | 
						|
    extra_filter_class = []
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        # 判断是否是 Swagger 文档生成阶段,防止报错
 | 
						|
        if getattr(self, 'swagger_fake_view', False):
 | 
						|
            return self.queryset.model.objects.none()
 | 
						|
 | 
						|
        # 正常请求下的逻辑
 | 
						|
        if self.request.user.is_superuser:
 | 
						|
            return super().get_queryset()
 | 
						|
        return super().get_queryset().filter(creator=self.request.user)
 |