2010-09-11 5 views
3

Dans mon application django, j'ai un enregistrement multi-étapes, avec peu de paramètres conditionnels. Pour cette raison, j'ai pensé à stocker des données à partir de formulaires en session. Malheureusement, les sessions sérialisent les données à l'aide de pickle, qui ne prend pas en charge la sérialisation des fichiers et provoque
PicklingError: Can't pickle <type 'cStringIO.StringO'>: attribute lookup cStringIO.StringO failed. Comment contourner ce problème? Dois-je envoyer une image en tant que variable à toutes les vues suivantes, ou l'envoyer en tant que paramètre GET ou le faire d'une autre manière? Je ne suis pas sûr si un exemple de code est nécessaire puisque les problèmes semblent assez clairs.Comment traiter le stockage temporaire des fichiers téléchargés

Répondre

1

Si les fichiers en cours de téléchargement ont une taille supérieure à quelques Ko, vous ne souhaitez probablement pas les stocker dans la session (et vous ne voulez certainement pas les renvoyer au navigateur via un OBTENIR).

je peux penser à quelques options:

  • Vous pouvez réécrire votre formulaire d'inscription afin que les fichiers téléchargés viennent en dernier.
  • Vous pouvez faire votre formulaire en une seule étape, et simuler la multi-étape avec javascript (en cachant et en montrant DIV, par exemple).
  • Vous pouvez conserver les fichiers temporaires sur le disque, et stocker les noms de fichiers dans la session (n'oubliez pas de nettoyer régulièrement les anciens fichiers)
  • Vous pouvez simplifier votre inscription et faire le téléchargement de fichiers sur une page "profil" (peut-être appliquer une exigence «vous devez remplir le profil» avant de permettre l'accès au reste du site).
+0

Je suis plus intéressé par la troisième méthode, je suppose que depuis ce que je sais, django par lui-même stocker tous les fichiers dans temp. Mais comment puis-je stocker uniquement le chemin vers le fichier et non le fichier lui-même? Mon débogage montre que ImageFileField envoie un objet fichier, pas seulement un chemin de chaîne. –

Questions connexes