ygu*_*guw 8 django serialization json django-forms django-views
我是Django的新手,并试图构建一个应用程序,为我的项目测试一些东西.我想阅读表单 - 做一些验证,然后将输入发送到另一个模块(比如一个单独运行的调度程序).调度程序rest api将使用表单数据(即文件)调用,调度程序将数据加载到模型中.我在调用rest api之前使用python请求并将数据序列化为json.这是我收到错误的地方.Django on request.FILES创建一个InMemoryUploadedFile类,它将数据加载到内存中,并将其序列化为Json并不简单.我尝试寻找其他方式(如图像序列化示例)但无法解决此问题.
forms.py
class UploadDatasetForm(forms.Form):
docfile = forms.FileField(label='Choose file')
Run Code Online (Sandbox Code Playgroud)
views.py
def test_upload(request):
if request.method == 'POST':
form = UploadDatasetForm(request.POST, request.FILES)
if form.is_valid():
in_file = request.FILES['docfile']
payload = {'doc_file': in_file}
msg = json.dumps(payload)
URL = 'http://localhost:8880/form'
r = requests.post(URL, data=msg)
return HttpResponse(json.dumps(r.text), content_type="application/json")
Run Code Online (Sandbox Code Playgroud)
错误:
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <InMemoryUploadedFile: A_test.csv (text/csv)> is not JSON serializable
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.非常感谢.
似乎您正在尝试序列化对InMemoryUploadedFile实例的引用-如果您只想对数据进行JSON序列化而不是对整个类实例进行JSON序列化,则可以读取数据。
更换:
payload = {'doc_file': in_file}
Run Code Online (Sandbox Code Playgroud)
用
payload = {'doc_file': in_file.read()}
Run Code Online (Sandbox Code Playgroud)
如果数据很大,您将要确保使用chunks():https : //docs.djangoproject.com/en/1.11/ref/files/uploads/#django.core.files.uploadedfile.UploadedFile.chunks
| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |