我正在编写一个相当小的轻量级REST api,所以我选择了不安分作为最快/最简单的支持。我似乎并不需要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'}
我还写了一个带有Requests to upload files
的小客户端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错误,但测试运行没有异常抛出。
答案 0 :(得分:0)
我试图解决这个问题,但最终切换到Django-REST框架变得更快更容易。对于Djano-REST来说文档要好得多,因此设置它并构建测试是微不足道的。关于django的不安分或django-restless模块似乎没有时间节省。