3

在我的 django 应用程序中,我有一个多步骤注册,几乎没有条件参数。因此,我想在会话中存储表单中的数据。不幸的是,会话使用 pickle 序列化数据,它不支持文件序列化并导致
PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed. 如何解决这个问题?我应该将图像作为变量发送到所有后续视图,还是将其作为 GET 参数发送或以其他方式发送?我不确定是否需要任何示例代码,因为问题看起来很清楚。

4

1 回答 1

1

如果上传的文件大于几 KB,那么您可能不想将它们存储在会话中(并且您绝对不想通过 GET 将它们发送回浏览器)。

我能想到几个选择:

  • 您可以重写您的注册表单,以便上传的文件排在最后。
  • 您可以使您的表单成为一个步骤,并使用 javascript 伪造多步骤(例如,通过隐藏和显示 DIV)。
  • 您可以将临时文件保存在磁盘上,并将文件名存储在会话中(记得定期清理旧文件)
  • 您可以简化您的注册,并在“个人资料”页面上上传文件(也许在允许访问网站的其余部分之前强制执行“您必须填写个人资料”的要求)。
于 2010-09-11T02:09:04.933 回答