【问题标题】:How to parse multiple files in multipart form-data with django rest framework?如何使用 django rest 框架解析多部分表单数据中的多个文件?
【发布时间】:2018-05-24 09:14:55
【问题描述】:

我收到一个包含几个文件的数组。我的 request.data 看起来像这样:

<QueryDict: {'image': [<TemporaryUploadedFile: image_1.png (image/png)>, <TemporaryUploadedFile: image_2.png (image/png)>]

但是,如果我尝试解析这样的图像:

request.data['image']

我只能看到最后一张图片,django rest 框架将其识别为文件对象,而不是列表。 如果我尝试迭代它,我只能看到字节。

我正在使用 ModelViewset 并添加了这个解析器

    parser_classes = (MultiPartParser, FormParser)

【问题讨论】:

    标签: python django django-rest-framework multipartform-data


    【解决方案1】:

    QueryDict 具有获取与特定键关联的所有值的特殊功能:getlist(key) [doc]。所以你可以这样写:

    request.data<b>.getlist('image')</b>  # list of images

    然后您可以单独处理每个图像(例如在for 循环中)。

    或者像documentation中指定的那样:

    <b>QueryDict.getlist(key, default=None)</b>
    返回具有请求键的数据列表。如果键不存在且未提供默认值,则返回一个空列表。除非提供的 default 值是一个列表,否则它保证返回一个列表。

    如果您执行索引(如request.data[key]),那么Python 将在幕后调用__getitem__,这将导致:

    <b>QueryDict.__getitem__(key)</b>
    返回给定键的值。如果键有多个值,则返回最后一个值。如果密钥不存在,则引发 django.utils.datastructures.MultiValueDictKeyError。 (这是 Python 标准 KeyError 的子类,因此您可以坚持使用 KeyError。)

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2020-08-12
      相关资源
      最近更新 更多