5

我正在使用 django rest 框架 django rest swagger 创建简单的 swagger 文档。

Python: 3.6
Django: 3.0.3
django-rest-swagger: 2.2.0
djangorestframework: 3.11.0

这是模型.py

class Image(models.Model):
    file = models.ImageField(upload_to='photos', null=True, blank=True)
    is_active = models.BooleanField(default=False, null=True, blank=True)
    created_at = models.DateTimeField(default=timezone.now)

    class Meta:
        db_table = 'image'

    def __str__(self):
        return self.file.name

我创建了serializers.py

class ImageSerializer(serializers.ModelSerializer):

    class Meta:
        model = Image
        fields = ('id', 'file', 'created_at')

这里还有image_view.py

from rest_framework import generics
from rest_framework.parsers import FormParser, MultiPartParser, FileUploadParser

from api.serializers import ImageSerializer
from api.models import Image


class ImageView(generics.CreateAPIView):
    serializer_class = ImageSerializer
    parser_classes = (FileUploadParser, )

    def post(self, request, *args, **kwargs):
        """
           Image Moodel
           ---
           parameters:
               - name: file
                 type: file
           responseMessages:
               - code: 201
                 message: Created
       """
        file = request.data.get('file')
        image = Image(file=file, name=file.name)
        return self.create(request, *args, **kwargs)

图片上传显示为字符串。

在此处输入图像描述

如何解决这个问题?

4

2 回答 2

1

快速查阅 Swagger 文档,看起来取决于您所针对的 OpenAPI 版本,这是正确的行为。OpenAPI 规范的版本 3 不支持文件类型的概念,而 v2 确实具有文件格式的概念。考虑到定义 JSON 的 RFC RFC7159具有被视为有效 JSON 一部分的有限值类型列表,这是有道理的。

更多信息可以在这里找到

附录:我不能直接说您用于生成文档的框架,但对于图像/文件上传,该format属性可用于指定文件的上传方式,即二进制,base64 编码。您可以在此处找到有关文件上传和 OpenAPI 规范的更多信息

查看您的框架文档,它似乎还针对较旧的 Swagger 1.2/OpenAPI v2 规范,在这种情况下,这仍然是正确的行为,如 OpenAPI v2 中关于数据类型的详细说明

于 2020-04-07T21:05:46.573 回答
0

您可以像这样设置解析器:

parser_classes = (FormParser, MultiPartParser)

然后在招摇你可以有文件上传按钮

于 2021-09-15T09:41:29.933 回答