Simple exemple illustrant comment télécharger des fichiers avec Django (source):
1: Créer le site
django-admin.py startproject MonSuperSitecd MonSuperSite/
2: Créer une simple application
python manage.py startapp MonApp
3: Aller dans le répertoire MonSuperSite et ajouter le répertoire media:
cd MonSuperSite/mkdir media
puis dans le répertoire media créer le répertoire MaBiblio par exemple:
cd media/mkdir MaBiblio
Au final votre répertoire doit avoir la structure suivante:
MonSuperSite/MonSuperSite/media/MaBiblio/
4: Dans le répertoire MonSuperSite/MonSuperSite/ créer le répertoire db
cd ../../mkdir db
et éditer le fichier settings.py en ajoutant les lignes suivantes au début du fichier:
from os import path as os_pathPROJECT_PATH = os_path.abspath(os_path.split(__file__)[0])
et changer
MEDIA_ROOT = ''MEDIA_URL = ''
par
MEDIA_ROOT = os_path.join(PROJECT_PATH, 'media')MEDIA_URL = '/media/'
Modifier egalement
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.'NAME': os_path.join(PROJECT_PATH, 'db', 'cassandra.db'), # Or path to database file if using sqlite3.'USER': '', # Not used with sqlite3.'PASSWORD': '', # Not used with sqlite3.'HOST': '', # Set to empty string for localhost. Not used with sqlite3.'PORT': '', # Set to empty string for default. Not used with sqlite3.}}
et
INSTALLED_APPS = ('django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.sites','django.contrib.messages','django.contrib.staticfiles','MonApp',# Uncomment the next line to enable the admin:# 'django.contrib.admin',# Uncomment the next line to enable admin documentation:# 'django.contrib.admindocs',)
5: Editer le fichier urls.py comme ceci:
from django.conf.urls import patterns, include, urlurlpatterns = patterns('',url(r'^$', 'MonApp.views.AddDoc'),)
6: Dans le répertoire MonSuperSite/MonApp/ éditer le fichier models.py comme ceci:
# -*- coding: utf-8 -*-from django.db import modelsfrom django import formsclass Document(models.Model):docfile = models.FileField(upload_to='MaBiblio')class DocumentForm(forms.Form):docfile = forms.FileField(label='Selectionner un fichier',help_text='Taille max.: 42 megabytes')
7: Editer le fichier views.py:
from django.shortcuts import render_to_responsefrom django.template import RequestContextfrom django.http import HttpResponseRedirectfrom MonApp.models import Document, DocumentFormdef AddDoc(request):if request.method == 'POST':form = DocumentForm(request.POST, request.FILES)if form.is_valid():newdoc = Document(docfile = request.FILES['docfile'])newdoc.save()return HttpResponseRedirect('')else:form = DocumentForm()documents = Document.objects.all()return render_to_response('MonApp/Add_Document.html',{'documents': documents,'form': form},context_instance=RequestContext(request))
8: Dans le répertoire MonSuperSite/MonApp/ créer le repertoire templates
mkdir templates
puis dans le répertoire templates créer le répertoire MonApp:
cd templatesmkdir MonApp
Au final votre projet doit avoir la structure suivante:
MonSuperSite/MonApp/templates/MonApp/
9; Dans le répertoire MonSuperSite/MonApp/templates/MonApp/ créer le fichier Add_Document.html et editer ce dernier comme ceci:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>Télécharger des fichiers avec Django </title></head><body>{% if documents %}<ul>{% for document in documents %}<li>{{ document.docfile.name }}</li>{% endfor %}</ul>{% else %}<p>No documents.</p>{% endif %}<!-- Upload form. Note enctype attribute! --><form action="http://127.0.0.1:8000/" method="post" enctype="multipart/form-data">{% csrf_token %}<p>{{ form.non_field_errors }}</p><p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p><p>{{ form.docfile.errors }}{{ form.docfile }}</p><p><input type="submit" value="Upload" /></p></form></body></html>
10: Done !
python manage.py syncdbpython manage.py runserver
Tous les fichiers téléchargés seront placés dans le repértoire:
MonSuperSite/MonSuperSite/media/MaBiblio/
Recherches associées
| Liens | Site |
|---|---|
| Generating file to download with Django | stackoverflow |
| Need a minimal Django file upload example | stackoverflow |
| Deleting a record from database using Python | stackoverflow |
| how to save a file in django without creating model | stackoverflow |
| Django, how to update fields in a model without creating a new record? | stackoverflow |
| Python Django tutorial 14 - file uploading and updating database schema | youtube |
| How to check if a certain “instance” already exists within a database? (django/postgresSql) | stackoverflow |
| Django Form with no required fields | stackoverflow |
| Django: how do you serve media / stylesheets and link to them within templates | stackoverflow |
| In django changing the file name of uploading file | stackoverflow |
