Télécharger un fichier dans Django

Vaibhav Vaibhav 30 janvier 2023
  1. Définir l’environnement Django
  2. Configurer le projet Django
  3. Tester le serveur
  4. Mettre à jour le fichier settings.py
  5. Créer un modèle
  6. Créer un formulaire pour télécharger des fichiers
  7. Ajouter des vues
  8. Configurer le fichier urls.py
  9. Essai
Télécharger un fichier dans Django

Cet article vous expliquera comment télécharger des fichiers dans Django. Nous allons créer une application simple avec un formulaire simple pour remplir les détails et sélectionner un fichier. Affichez également tous les fichiers téléchargés dans un tableau en dessous.

Avant de continuer, il est recommandé de créer un nouveau dossier ou répertoire pour ce projet afin de garder les choses organisées.

Définir l’environnement Django

Pour ce tutoriel, nous utiliserons un environnement virtuel. Il n’est pas obligatoire d’utiliser un environnement virtuel, mais c’est une bonne pratique d’avoir un environnement virtuel unique pour chaque projet.

Pour construire un environnement virtuel, nous avons besoin d’un package Python, virtualenv. Si vous ne l’avez pas sur votre machine, vous pouvez le télécharger en utilisant la commande suivante.

pip install virtualenv

Maintenant que vous avez installé le package, créons l’environnement.

Pour créer un environnement, exécutez la commande suivante.

virtualenv environment

environ est le nom de l’environnement virtuel que nous venons de créer. Cet environnement aura la version Python installée globalement sur votre machine et aucun package à l’exception de ceux par défaut.

Pour activer cet environnement et l’utiliser, exécutez la commande suivante.

environment\Scripts\activate

Maintenant, puisque nous apprenons Django, nous avons besoin de la bibliothèque Django installée. De plus, puisque nous apprenons à télécharger des fichiers, nous avons besoin d’un package Python supplémentaire pour gérer les images. Le nom du paquet est Pillow. Installons toutes les dépendances.

pip install django
pip install Pillow

Ou alors,

pip3 install django
pip3 install Pillow

Notez qu’au moment de la rédaction de cet article, la dernière version de Django est 3.2.

Configurer le projet Django

Pour configurer un projet Django, nous devons d’abord créer un projet Django, créer une application, enregistrer cette application et effectuer les migrations initiales.

Pour créer un projet Django, exécutez la commande suivante.

django-admin startproject DjangoFileUpload

Maintenant, changez le répertoire de travail pour ce projet à l’aide de la commande suivante.

cd DjangoFileUpload

Pour créer une application dans le projet Django, exécutez la commande suivante.

django-admin startapp Core

Ou alors,

python manage.py startapp Core

Core est le nom de l’application.

Pour enregistrer cette application, saisissez le nom de l’application dans la liste INSTALLED_APPS dans le fichier settings.py.

  • settings.py
INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "Core",  # Here
]

Django a besoin de quelques modèles pour fonctionner correctement. Par exemple, le système d’authentification ou le superutilisateur ne fonctionnera pas sans la migration initiale. Donc, pour effectuer les migrations initiales, exécutez la commande suivante.

python manage.py migrate

Production:

Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

Tester le serveur

Pour exécuter le serveur, utilisez la commande suivante. Si tout s’est déroulé sans erreur, vous devriez voir votre serveur Django s’exécuter à l’adresse http://127.0.0.1:8000/.

python manage.py runserver

Mettre à jour le fichier settings.py

Les fichiers téléchargés doivent être stockés quelque part. Dans Django, par défaut, tous les fichiers téléchargés sont stockés dans un dossier media. Vous pouvez toujours modifier le nom du dossier et l’URL qui lui est associée, mais nous nous en tiendrons à la convention de nommage par défaut.

Pour définir l’URL des fichiers multimédias, MEDIA_URL, et le chemin d’accès au dossier multimédia, MEDIA_ROOT, ajoutez les instructions suivantes dans le fichier settings.py.

  • settings.py
import os

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, "media")

N’oubliez pas d’importer le module os. Sinon, Python renverra une erreur.

Créer un modèle

Pour stocker les fichiers téléchargés, nous devons créer un modèle. Le champ de ce modèle contiendra le chemin d’accès au fichier téléchargé mais pas le fichier lui-même.

Nous allons créer un modèle Document pour stocker les détails sur les fichiers téléchargés.

  • Core\models.py
from django.db import models


class Document(models.Model):
    title = models.CharField(max_length=200)
    uploadedFile = models.FileField(upload_to="Uploaded Files/")
    dateTimeOfUpload = models.DateTimeField(auto_now=True)

Le modèle a un champ title d’un type de caractère pour stocker un titre personnalisé pour le fichier téléchargé, et dateTimeOfUpload stockera la date et l’heure du téléchargement du fichier. Le champ date-heure serait automatiquement défini lors de la création de l’objet modèle.

Pour stocker les fichiers, nous utilisons FileField(). Ce type couvre toutes sortes de fichiers. Mais si vous souhaitez être un peu précis avec les images, vous pouvez utiliser le ImageField() pour stocker les images. Pour tous les autres champs, il faut s’en tenir à FileField().

Le paramètre upload_to est utilisé pour définir le dossier, où les fichiers de ce modèle seront téléchargés à l’intérieur vers le dossier media.

Avant d’utiliser ce modèle, nous devons effectuer des migrations et les migrer. Pour cela, exécutez les deux commandes suivantes.

python manage.py makemigrations
python manage.py migrate

Créer un formulaire pour télécharger des fichiers

Dans l’application ou le dossier Core, créez un nouveau dossier, à savoir templates. À l’intérieur de ce dossier, créez un autre dossier, à savoir Core. Cela devrait être le nom de votre application. Enfin, créez un nouveau fichier dans ce dossier, à savoir upload-file.html.

Vous devriez maintenant avoir une structure de fichier comme celle-ci.

DjangoFileUpload/
    DjangoFileUpload/
        __init__.py
        asgi.py
        paramètres.py
        urls.py
        wsgi.py
    db.sqlite3
    gérer.py
    Cœur/
        migrations/
        modèles/
            Cœur/
                fichier-upload.html
        __init__.py
        admin.py
        apps.py
        modèles.py
        tests.py
        vues.py

À l’intérieur du upload-file.html, ajoutez le code HTML suivant.

  • Core\templates\Core\upload-file.html
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Django File Upload</title>
    <style>
        @import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

        * {
            font-family: "Roboto";
        }

        body {
            background-color: #F5F5F5;
        }

        form {
            background-color: #FFFFFF;
            padding: 25px;
        }

        table {
            width: 100%; 
            text-align: center;
            margin-top: 25px;
            padding: 25px;
            background-color: #FFFFFF;
        }

        table tr td {
            padding-top: 15px;            
        }
    </style>
</head>
<body>
    <form action="{% url 'Core:uploadFile' %}" method="POST" enctype="multipart/form-data">
        <input type="text" name="fileTitle" placeholder="Enter a title">
        <input type="file" name="uploadedFile">
        {% csrf_token %}
        <input type="submit" value="Upload">
    </form>
    <table>
        <tr>
            <th>ID</th>
            <th>Title</th>
            <th>File Path</th>
            <th>Upload Date & Time</th>
        </tr>
        {% for file in files %}
            <tr>
                <td>{{ file.id }}</td>
                <td>{{ file.title }}</td>
                <td>{{ file.uploadedFile.url }}</td>
                <td>{{ file.dateTimeOfUpload }}</td>
            </tr>
        {% endfor %}
    </table>
</body>
</html>

À l’intérieur du tableau, nous afficherons quelques détails sur les fichiers téléchargés.

Ajouter des vues

Pour afficher le modèle HTML et les informations sur celui-ci et stocker et gérer les téléchargements de fichiers, nous allons créer une vue uploadFile().

Référez-vous au code suivant

  • Core\views.py
from . import models
from django.shortcuts import render


def uploadFile(request):
    if request.method == "POST":
        # Fetching the form data
        fileTitle = request.POST["fileTitle"]
        uploadedFile = request.FILES["uploadedFile"]

        # Saving the information in the database
        document = models.Document(title=fileTitle, uploadedFile=uploadedFile)
        document.save()

    documents = models.Document.objects.all()

    return render(request, "Core/upload-file.html", context={"files": documents})

Cette vue rend le modèle HTML que nous venons de créer dans la section précédente. Le formulaire du modèle HTML est soumis à la même URL et géré dans cette vue. Si la méthode de la requête est POST, nous récupérons les informations saisies dans le formulaire et le fichier téléchargé, stockons ces informations dans le modèle et sauvegardons le modèle.

Sinon, dans le cas général, nous récupérons tous les fichiers qui ont été téléchargés et les envoyons dans un dictionnaire de contexte pour les afficher sur le modèle HTML.

Configurer le fichier urls.py

Enfin, configurons les URL. Avant de continuer, créez un nouveau fichier, à savoir urls.py dans l’application ou le dossier Core. Ce fichier contiendra toutes les URL associées à cette application Django. C’est une bonne pratique d’avoir un fichier urls.py séparé pour chaque application Django.

Dans ce fichier, ajoutez le code suivant.

from . import views
from django.urls import path
from django.conf import settings
from django.conf.urls.static import static

app_name = "Core"

urlpatterns = [
    path("", views.uploadFile, name="uploadFile"),
]

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Nous avons ajouté un modèle d’URL pour le modèle HTML upload-file.html. De plus, nous avons ajouté une URL supplémentaire pour les fichiers multimédias. Nous utiliserons les variables constantes que nous avons déclarées dans le fichier settings.py.

Puisque nous avons créé un nouveau fichier urls.py à l’intérieur de l’application Core, nous devons lier les URL définies ici avec le projet principal.

Pour ce faire, ajoutez la déclaration suivante dans la liste urlpatterns dans DjangoFileUpload\urls.py

path("", include("Core.urls")),

Votre fichier devrait ressembler à ceci.

Fichier : DjangoFileUpload\urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("Core.urls")),
]

Essai

Toutes nos félicitations! Il est maintenant temps de tester le projet. Suivez les étapes ci-dessous.

  • Démarrez le serveur à l’aide de la commande - python manage.py runserver
  • Aller à l’URL http://127.0.0.1:8000/
  • Remplissez le formulaire avec un titre, sélectionnez un fichier et soumettez le formulaire.

Vous devriez maintenant voir des détails sur le fichier dans le tableau sous le formulaire.

De plus, si vous vérifiez votre répertoire de travail, vous verrez qu’un dossier du nom de media a été créé, et à l’intérieur de ce dossier, il y a un autre dossier du nom de Uploaded Files. Ce dossier contient tous les fichiers téléchargés.

Vous pouvez télécharger des photos, des vidéos, des programmes, des PDF, des fichiers JSON, des fichiers HTML, etc. Notez que le temps de téléchargement dépend de la taille du fichier, alors soyez patient lors du téléchargement.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.