Simple application pour télécharger des fichiers avec Django

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:

Télécharger des fichiers avec Django
Télécharger des fichiers avec Django

<!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

Image

of