请原谅我,如果这是一个新手问题,我昨天开始学习Django,我试图不养成坏习惯,即我试图从一开始就做“django方式”。
我有一个视图,它将二进制数据作为http post字段接收。现在Django当然会将我的二进制数据自动转换为unicode字符串。
我的问题是,我如何获取原始二进制数据?
我发生了一些事情。让request
成为我正在处理的请求。
request.raw_post_data
将涉及解析数据 - 当外观request.POST
实际存储原始数据时,我实际上只是试图绕过即时转换(此外,这是开发版中的新功能)。request.encoding="foo"
(并在之后重新分配)也不起作用,因为我仍然得到一个unicode字符串,除了感觉有点肮脏的黑客。在这里使用"base64"
(没有传输编码那么糟糕)给了我一个
AssertionError
。提前感谢您的想法!
编辑: 澄清 - 我不是在谈论这里的经典文件上传,而是作为存储在POST字段中的二进制数据。我想这样做,因为我想与该视图交互的唯一方法是通过上传脚本。在这种情况下,使用普通的POST字段可以使客户端和服务器更加简单。
答案 0 :(得分:4)
有些人可能会说,在标准表单字段中存储二进制数据在某种程度上是一个坏习惯:)
您可以使用Python的标准库方法将字符串转换回二进制表示。
查看binascii — Convert between binary and ASCI
编辑前发布:
这段代码怎么样(从POST接收数据)
def handleFile(self, request):
file = request.FILES["file"]
destination = open('filename.ext', 'wb')
for chunk in file.chunks():
destination.write(chunk)
destination.close()
适合我。