首页 > 解决方案 > 从 FileField 下载 DRF 文件

问题描述

我使用 DRF REST 来实现文件上传功能。

模型.py

class NetworkConfig(models.Model):
    ipaddress = models.GenericIPAddressField(verbose_name='Device IP')
    configfile = models.FileField(max_length=300,upload_to='networkconfig/')
    create_time = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name = 'NetworkConfig'
        verbose_name_plural = verbose_name
        db_table = 'NetworkConfig'

    def __str__(self):
        return self.ipaddress

序列化程序.py

class NetworkConfigSerializer(serializers.ModelSerializer):
    create_time = serializers.DateTimeField(read_only=True, format='%Y-%m-%d %H:%M:%S')

    class Meta:
        model = NetworkConfig
        fields = '__all__'

设置.py

MEDIA_ROOT = '/tmp/'

视图.py

class NetworkFilesViewSet(ViewSet):
    parser_classes = (MultiPartParser, FormParser)

    def upload(self,request):
        file_serializer = NetworkConfigSerializer(data=request.data)
        if file_serializer.is_valid():
            file_serializer.save()
            return Response(file_serializer.data, status=status.HTTP_201_CREATED)
        return Response(file_serializer.errors, status=status.HTTP_400_BAD_REQUEST)

网址.py

path(r'api/networkconfig', views.NetworkFilesViewSet.as_view({'post': 'upload'})),

当我使用邮递员上传文件时,MySQL 表如下所示:

id | ipaddress  | configfile             | create_time                
 1 | 10.12.2.19 | networkconfig/test.txt | 2020-09-09 19:17:58.723851

和 /tmp/networkconfig/ 中的文件存储。

现在我如何使用 FileField 中的 REST 下载这个文件?

标签: django-rest-framework

解决方案


推荐阅读