【问题标题】:Trying to write a unit test for file upload to a django Restless API尝试为文件上传到 django Restless API 编写单元测试
【发布时间】:2015-08-31 07:55:31
【问题描述】:

我正在编写一个相当小的轻量级 REST api,所以我选择了 restless 作为最快/最简单的支持。我似乎不需要 django-REST 模块的所有复杂性和支持。我的服务只会接收和发送 json,但用户需要将文件上传到一个端点。目前我的文件上传视图/api代码如下:

class SubmissionCreate(Endpoint):

def post(self, request):
    # get the data from the post request
    data = {}
    data['input_data'] = request.FILES['input_data'].read().decode('UTF-8')
    data['submission_name'] = request.FILES['submission_name'].read().decode('UTF-8')

    submission_form = SubmissionForm(data)
    if submission_form.is_valid():
        s = submission_form.save()
        return {'message': 'file uploaded'}
    else:
        return {'error': 'Input information is not correctly formatted'}

我还写了一个带有上传文件请求的小客户端

import os
import requests
import json

url = 'http://127.0.0.1:8000/submission/create/'
payload = {'input_data': ('input.txt', open('./static/files/file1.txt', 'rb')), 'submission_name': 'test'}
r = requests.post(url, files=payload)

这很好用,我可以用我的客户端将文件推送到数据库。但显然,在我给出任何更复杂的行为之前,我想要一些适当的测试,所以我查看了文档并编写了以下测试

class SubmissionCreateTests(TestCase):

    def test_submissioncreate_will_accept_data(self):

        f = SimpleUploadedFile("file.txt", bytes("file_content", 'utf-8'))
        response = self.client.post(reverse('submission_data'), 
                    {'input_data': f, 'submission_name': 'test'})
        self.assertEqual(response.status_code, 200)

但是这会产生以下错误:

django.utils.datastructures.MultiValueDictKeyError: "'submission_name'"

如果我将 content_type 设置为 'application/x-www-form-urlencoded' 我会得到同样的错误。

如果我将 content_type 设置为“multipart/form-data”,我会收到 400 错误,但测试运行时没有抛出异常。

【问题讨论】:

    标签: python django rest file-upload request


    【解决方案1】:

    我试图解决这个问题,但最终切换到 Django-REST 框架更快更容易。文档对于 Djano-REST 来说要好得多,以至于设置和构建测试是微不足道的。对于 django 的 restless 或 django-restless 模块,似乎没有时间节省。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2022-01-15
      • 2014-07-14
      • 1970-01-01
      • 2019-03-16
      • 2020-05-28
      相关资源
      最近更新 更多