Besoin d'un minimum de Django reinhardt téléchargement de fichier exemple
Comme un débutant à Django, je vais avoir de la difficulté à faire un téléchargement de l'app dans Django 1.3. Je ne pouvais pas trouver une date exemple/snippets. Quelqu'un peut-il poster un minimum mais complet (Modèle, Vue, Modèle) exemple de code pour le faire?
- Cette question est très utile à partir de la documentation et de l'apprentissage de la perspective. Pourquoi le fermer? Est parfois pas très sympa pour les débutants.
Vous devez vous connecter pour publier un commentaire.
Ouf, documentation de Django n'a pas vraiment le bon exemple à ce sujet. J'ai passé plus de 2 heures pour déterrer tous les morceaux pour comprendre comment cela fonctionne. Avec cette connaissance, j'ai mis en place un projet qui permet de télécharger des fichiers et de leur montrer que liste. Télécharger de la source pour le projet, visitez https://github.com/axelpale/minimal-django-file-upload-example ou le clone:
Mise à jour 2013-01-30: La source sur GitHub a aussi la mise en œuvre de Django 1.4 en plus de 1,3. Même si, il ya quelques changements le tutoriel suivant est également utile pour la 1.4.
Mise à jour 2013-05-10: mise en Œuvre de Django 1.5 sur GitHub. Des changements mineurs dans la redirection en urls.py et l'utilisation de l'url de la balise de modèle dans list.html. Grâce à hubert3 pour l'effort.
Mise à jour 2013-12-07: Django 1.6 pris en charge sur GitHub. L'un d'importation changé dans myapp/urls.py. Grâce à Arthedian.
Mise à jour 2015-03-17: Django 1.7 pris en charge sur GitHub, grâce à aronysidoro.
Mise à jour 2015-09-04: Django 1.8 pris en charge sur GitHub, grâce à nerogit.
Mise à jour 2016-07-03: Django 1.9 pris en charge sur GitHub, grâce à daavve et nerogit
Arborescence du projet
Une base de Django 1.3 projet avec une seule application et médias/répertoire pour le téléchargement.
1. Paramètres: myproject/settings.py
De télécharger et de servir des fichiers, vous devez spécifier où Django stocke les fichiers téléchargés et de ce que l'URL de Django sert. MEDIA_ROOT et MEDIA_URL sont dans settings.py par défaut, mais ils sont vides. Voir les premières lignes dans Django Gestion Des Fichiers pour plus de détails. Souvenez-vous aussi de définir la base de données et ajouter myapp à INSTALLED_APPS
2. Modèle: myproject/myapp/models.py
Suivant vous avez besoin d'un modèle avec un FileField. Ce champ stocke les fichiers par exemple pour media/documents/2011/12/24/basé sur la date actuelle et MEDIA_ROOT. Voir FileField de référence.
3. Forme: myproject/myapp/forms.py
Pour gérer télécharger bien, vous avez besoin d'un formulaire. Cette forme n'a qu'un seul champ, mais c'est suffisant. Voir Forme FileField de référence pour plus de détails.
4. Vue: myproject/myapp/views.py
Un point de vue où toute la magie se produit. Faites attention comment
request.FILES
sont traitées. Pour moi, c'était vraiment dur à repérer le fait querequest.FILES['docfile']
peuvent être enregistrés à des modèles.FileField juste comme ça. Le modèle save() gère le stockage du fichier sur le système de fichiers automatiquement.5. Projet d'Url: myproject/urls.py
Django ne sert pas MEDIA_ROOT par défaut. Que serait dangereux dans l'environnement de production. Mais en stade de développement, on pourrait couper court. Attention à la dernière ligne. Cette ligne permet de Django pour servir des fichiers à partir de MEDIA_URL. Cela ne fonctionne que dans le développement de la scène.
Voir django.conf.les url.statique.référence statique pour plus de détails. Voir aussi cette discussion sur la signification des fichiers multimédia.
6. App Url: myproject/myapp/urls.py
À rendre la vue accessible, vous devez spécifier des url pour elle. Rien de spécial ici.
7. Modèle: myproject/myapp/templates/myapp/list.html
La dernière partie: modèle de liste et le formulaire de téléchargement ci-dessous il. Le formulaire doit être enctype-attribut "multipart/form-data" et de la méthode définie à "post" pour faire de l'upload de Django possible. Voir Les Uploads de fichier de documentation pour plus de détails.
La FileField a de nombreux attributs qui peuvent être utilisées dans les modèles. E. g. {{ document.d'un document.url }} et {{ document.d'un document.name}}, comme dans le modèle. Voir plus à ce sujet dans À l'aide de fichiers dans les modèles article et Le Fichier de l'objet de la documentation.
8. Initialiser
Il suffit d'exécuter syncdb et runserver.
Résultats
Enfin, tout est prêt. Sur par défaut de Django environnement de développement, la liste des documents téléchargés peuvent être vu à
localhost:8000/list/
. Aujourd'hui, les fichiers sont téléchargés vers le /chemin/vers/monprojet/media/documents/2011/12/17/et peut être ouvert à partir de la liste.J'espère que cette réponse vous aidera à quelqu'un comme beaucoup comme il m'aurait aidée.
{% url list %}
devient{% url "list" %}
.newdoc = Document(docfile = request.FILES['docfile']) newdoc.save()
vous pouvez utiliserform.save()
[Errno 13] Permission denied: '/media/documents/test_file_PeKLdiC.csv'
. Ai-je besoin pour donner à l'utilisateur la propriété d'une certaine manière? E. g.sudo chown django:django /media/documents -R
ou quelque chose comme ça?scp
à lamedia
dir comme alternative à la télécharger. Comment ferais-je ce qui concerne le modèle d'entrée? J'ai compris que le téléchargement va faire le stockage de fichiers ET la base de données d'entrée. Lorsque vous faites scp j'ai besoin de remplir manuellement la db? Est-il compliqué?Généralement lorsque vous essayez de leur "juste obtenir un exemple de travail", il est préférable de "juste de commencer à écrire le code'. Il n'y a pas de code ici pour vous aider, de sorte qu'il permet de répondre à la question beaucoup plus de travail pour nous.
Si vous voulez prendre un fichier, vous avez besoin de quelque chose comme cela dans un fichier html quelque part:
Qui vous donnera le bouton parcourir, un bouton télécharger pour commencer l'action (soumettre le formulaire) et notez le enctype donc Django sait vous donner
request.FILES
En vue quelque part, vous pouvez accéder au fichier avec
Il y a une énorme quantité d'informations dans l' téléchargement du fichier docs
Je vous recommande de lire la page à fond et juste de commencer à écrire du code - ensuite revenir avec des exemples et des traces de pile quand ça ne fonctionne pas.
enctype="multipart/form-data"
ce dont j'avais besoin pour faire ce travail, merci!Démo
Mise à jour de Akseli Palén réponse. voir la dépôt github, fonctionne avec Django 2
Un minimum de Django upload de fichier exemple
1. Créer un projet django
Exécuter startproject::
maintenant un dossier(échantillon) est créé le::
2. créer une application
Créer une app::
Maintenant un dossier(
uploader
) avec ces fichiers sont créés::3. Mise à jour settings.py
Sur
sample/settings.py
ajouter'uploader.apps.UploaderConfig'
àINSTALLED_APPS
et ajouterMEDIA_ROOT
etMEDIA_URL
, c'est à dire::4. Mise à jour urls.py
dans
sample/urls.py
ajouter::5. Mise à jour models.py
mise à jour
uploader/models.py
::6. Mise à jour views.py
mise à jour
uploader/views.py
::7. créer des modèles
Créer un dossier modèles dans le dossier uploader, puis créer un fichier home.html, c'est à dire
sample/uploader/templates/home.html
::8. Synchroniser la base de données
Synchroniser la base de données et runserver::
visite http://localhost.com:8000
FileField
tout suhail utilisé unImageField
, quelqu'un pourrait-il expliquer le choix?FileField
.ImageField
doit de l'image seulement de téléchargement. la mise à jour va travailler avec Django 1.11.Je dois dire que je trouve la documentation de django à confusion.
Aussi pour l'exemple le plus simple pourquoi sont des formes d'être mentionné?
L'exemple que j'ai eu à travailler dans le views.py est :-
Le fichier html ressemble le code ci-dessous, bien que cet exemple ne télécharge un fichier et le code pour enregistrer les handles de fichiers multiples :-
Ces exemples ne sont pas de mon code, ils ont été optained de deux autres exemples que j'ai trouvé.
Je suis un parent débutant à django, il est donc très probable que je suis pas certains point clé.
FileField
et unmodel.Form
. Pour les débutants (et pour les tâches insignifiantes), le traitement manuel des fichiers téléchargés comme indiqué ci-dessus est moins déroutant.S'étendant sur Henry exemple:
Vous pouvez appeler cette
handle_uploaded_file
fonction de votre point de vue avec le fichier téléchargé objet. Cela permettra d'enregistrer le fichier avec un nom unique (avec le préfixe de nom de fichier de l'original du fichier téléchargé) dans le système de fichiers et retour le chemin d'accès complet du fichier enregistré. Vous pouvez enregistrer le chemin d'accès dans la base de données, et de faire quelque chose avec le fichier plus tard.request.FILES['myfile']
) àhandle_uploaded_file
, pas larequest
lui-même.prefix=source.name
il ajouté caractères supplémentaires à la fin du fichier, de jouer avec l'extension de fichier. E. g.upload.csv
a été changé àupload.csv5334
. Changer l'suffix=source.name
fixe pour moi.J'ai également eu l'obligation similaire. La plupart des exemples sur le net, demandant la création de modèles et de créer des formes que je n'ai pas envie de l'utiliser. Voici mon code final.
Et en HTML à télécharger j'ai écrit:
Suivant est le HTML qui affiche le contenu du fichier:
Ici, il peut vous aide à:
créer un champ de fichier dans votre models.py
Pour télécharger le fichier(dans votre admin.py):
et utiliser ce champ dans vos templates.
Vous pouvez vous référer à des exemples de serveur dans les Beaux-Uploader, qui a django version.
https://github.com/FineUploader/server-examples/tree/master/python/django-fine-uploader
Il est très élégant et le plus important de tous, il fournit en vedette js lib. Le modèle n'est pas inclus dans le serveur-exemples, mais vous pouvez trouver de démonstration sur son site internet.
Fine Uploader: http://fineuploader.com/demos.html
django-fine-uploader
views.py
UploadView les dépêches de la poste et supprimer la demande pour les différents gestionnaires.
forms.py
Ne sais pas si il y a des inconvénients à cette approche, mais même la plus minime, en views.py:
J'ai affronté le problème similaire, et résolu par django admin du site.