Django 如何处理上传文件的临时存储

Django 如何处理上传文件的临时存储,django,django-file-upload,django-sessions,static-files,Django,Django File Upload,Django Sessions,Static Files,在我的django应用程序中,我有一个多步骤注册,几乎没有条件参数。正因为如此,我想出了在会话中存储表单数据的方法。不幸的是,会话使用pickle序列化数据,pickle不支持文件序列化并导致 PicklingError:无法pickle:属性查找cStringIO.StringO失败。如何解决这个问题?我应该将图像作为变量发送到以下所有视图,还是将其作为GET参数发送,或者以其他方式发送?我不确定是否需要任何示例代码,因为问题似乎很清楚。如果正在上载的文件大小超过几KB,那么您可能不想在会话中

在我的django应用程序中,我有一个多步骤注册,几乎没有条件参数。正因为如此,我想出了在会话中存储表单数据的方法。不幸的是,会话使用pickle序列化数据,pickle不支持文件序列化并导致

PicklingError:无法pickle:属性查找cStringIO.StringO失败
。如何解决这个问题?我应该将图像作为变量发送到以下所有视图,还是将其作为GET参数发送,或者以其他方式发送?我不确定是否需要任何示例代码,因为问题似乎很清楚。

如果正在上载的文件大小超过几KB,那么您可能不想在会话中存储它们(并且您肯定不想通过GET将它们发送回浏览器)

我可以想出几个选择:

  • 你可以重写你的注册表格,以便上传的文件排在最后
  • 您可以使表单成为一个单步,并使用javascript(例如,通过隐藏和显示DIV)伪造多步
  • 您可以将临时文件保存在磁盘上,并在会话中存储文件名(记住定期清理旧文件)
  • 您可以简化注册,并在“个人资料”页面上传文件(在允许访问网站的其余部分之前,可能强制执行“您必须填写个人资料”要求)
我想我最感兴趣的是第三种方法,因为据我所知,django本身将所有文件存储在temp中。但是我如何只存储文件的路径而不是文件本身呢?我的调试显示ImageFileField发送文件对象,而不仅仅是字符串路径。