Как бороться с временным хранением загружаемых файлов - PullRequest
3 голосов
/ 11 сентября 2010

В моем приложении django у меня многошаговая регистрация с несколькими условными параметрами.Из-за этого я решил хранить данные из форм в сессии.К сожалению, сеансы сериализуют данные, используя pickle, который не поддерживает сериализацию файлов и вызывает
PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed.Как обойти эту проблему?Должен ли я отправить изображение в качестве переменной для всех последующих представлений, или отправить его в качестве параметра GET, или сделать это другим способом?Я не уверен, нужен ли какой-либо пример кода, поскольку проблемы кажутся достаточно ясными.

1 Ответ

1 голос
/ 11 сентября 2010

Если размер загружаемых файлов превышает несколько КБ, то, вероятно, вы не хотите сохранять их в сеансе (и вам определенно не нужно отправлять их обратно в браузер с помощью GET ).

Я могу придумать несколько вариантов:

  • Вы можете переписать свою регистрационную форму, чтобы загружаемые файлы были последними.
  • Вы можете сделать свою форму одним шагом и подделать многошаговую с помощью javascript (например, скрывая и показывая DIV).
  • Вы можете хранить временные файлы на диске и сохранять имена файлов в сеансе (не забывая периодически очищать старые файлы)
  • Вы могли бы упростить свою регистрацию и выполнить загрузку файла на странице «профиля» (возможно, при соблюдении требования «Вы должны заполнить профиль», прежде чем разрешить доступ к остальной части сайта).
...