Simple exemple illustrant comment télécharger des fichiers avec Django (source):
1: Créer le site
django-admin.py startproject MonSuperSite
cd 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_path
PROJECT_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, url
urlpatterns = 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 models
from django import forms
class 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_response
from django.template import RequestContext
from django.http import HttpResponseRedirect
from MonApp.models import Document, DocumentForm
def 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 templates
mkdir 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 syncdb
python 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 |