如何在Django中获取二进制发布数据!很好?

时间:2010-12-21 12:16:32

标签: django django-views python

请原谅我,如果这是一个新手问题,我昨天开始学习Django,我试图不养成坏习惯,即我试图从一开始就做“django方式”。

我有一个视图,它将二进制数据作为http post字段接收。现在Django当然会将我的二进制数据自动转换为unicode字符串。

我的问题是,我如何获取原始二进制数据?

我发生了一些事情。让request成为我正在处理的请求。

  • 使用request.raw_post_data将涉及解析数据 - 当外观request.POST实际存储原始数据时,我实际上只是试图绕过即时转换(此外,这是开发版中的新功能)。
  • 使用base64左右传输数据会起作用,但是当数据传输本身不是问题时,似乎需要太多开销。
  • 在获得该字段之前执行request.encoding="foo"(并在之后重新分配)也不起作用,因为我仍然得到一个unicode字符串,除了感觉有点肮脏的黑客。在这里使用"base64"(没有传输编码那么糟糕)给了我一个 AssertionError

提前感谢您的想法!

编辑: 澄清 - 我不是在谈论这里的经典文件上传,而是作为存储在POST字段中的二进制数据。我想这样做,因为我想与该视图交互的唯一方法是通过上传脚本。在这种情况下,使用普通的POST字段可以使客户端和服务器更加简单。

1 个答案:

答案 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()

适合我。