# Documentation Django 5.2.8

# Écriture de votre première application Django, 1ère partie

Apprenons avec un exemple.

Tout au long de ce tutoriel, nous vous guiderons dans la création d’une application simple de sondage.

Cela consistera en deux parties :

- Un site public qui permet à des gens de voir les sondages et d’y répondre.

- Un site d’administration qui permet d’ajouter, de modifier et de supprimer des sondages.

Nous supposerons que Django est déjà installé. Vous pouvez savoir si Django est installé et sa version en exécutant la commande suivante dans un terminal (indiqué par le préfixe $) :

/ 

    $ python -m django --version

    ...\> py -m django --version

Si Django est installé, vous devriez voir apparaître la version de l’installation. Dans le cas contraire, vous obtiendrez une erreur disant « No module named django » (aucun module nommé django).

This tutorial is written for Django 6.0, which supports Python 3.12 and later. If the Django version doesn’t match, you can refer to the tutorial for your version of Django by using the version switcher at the bottom right corner of this page, or update Django to the newest version. If you’re using an older version of Python, check Quelle version de Python puis-je utiliser avec Django ? to find a compatible version of Django.

Où obtenir de l’aide :

Si vous rencontrez des problèmes dans le parcours de ce tutoriel, rendez-vous dans la section Obtenir de l’aide de la FAQ.

## Création d’un projet

Si c’est la première fois que vous utilisez Django, vous devrez vous occuper de quelques éléments de configuration initiaux. Plus précisément, vous devrez lancer la génération automatique de code qui mettra en place un projet Django – un ensemble de réglages particuliers à une instance de Django, qui comprend la configuration de la base de données, des options spécifiques à Django et d’autres propres à l’application.

From the command line, `cd` into a directory where you’d like to store your code and run the following command to bootstrap a new Django project:

/ 

    $ django-admin startproject mysite djangotutorial

    ...\> django-admin startproject mysite djangotutorial

This will create a directory `djangotutorial` with a project called `mysite` inside. The directory name doesn’t matter to Django; you can rename it to anything you like. If it didn’t work, see Problèmes d’exécution de django-admin.

Note

Vous devez éviter de nommer vos projets en utilisant des noms réservés de Python ou des noms de composants de Django. Cela signifie en particulier que vous devez éviter d’utiliser des noms comme `django` (qui entrerait en conflit avec Django lui-même) ou `test` (qui entrerait en conflit avec un composant intégré de Python).

Voyons ce que `startproject` a créé :

    djangotutorial/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            asgi.py
            wsgi.py

Ces fichiers sont :

- `manage.py` : un utilitaire en ligne de commande qui vous permet d’interagir avec ce projet Django de différentes façons. Vous trouverez toutes les informations nécessaires sur `manage.py` dans django-admin et manage.py.

- `mysite/`: un répertoire correspondant au paquet Python effectif de votre projet. C’est le nom du paquet Python que vous devrez utiliser pour importer ce qu’il contient (par ex. `mysite.urls`).

- `mysite/__init__.py` : un fichier vide qui indique à Python que ce répertoire doit être considéré comme un paquet. Si vous êtes débutant en Python, lisez les informations sur les paquets (en) dans la documentation officielle de Python.

- `mysite/settings.py`: Settings/configuration for this Django project. Les réglages de Django will tell you all about how settings work.

- `mysite/urls.py` : les déclarations des URL de ce projet Django, une sorte de « table des matières » de votre site Django. Vous pouvez en lire plus sur les URL dans Distribution des URL.

- `mysite/asgi.py` : un point d’entrée pour les serveurs Web compatibles aSGI pour déployer votre projet. Voir Comment déployer avec ASGI pour plus de détails.

- `mysite/wsgi.py` : un point d’entrée pour les serveurs Web compatibles WSGI pour déployer votre projet. Voir Comment déployer avec WSGI pour plus de détails.

## Le serveur de développement

Vérifions que votre projet Django fonctionne. Déplacez-vous dans le répertoire `djangotutorial`, si vous n’y êtes pas déjà, et lancez les commandes suivantes :

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

Vous verrez les messages suivants défiler en ligne de commande :

    Performing system checks...

    System check identified no issues (0 silenced).

    You have unapplied migrations; your app may not work properly until they are
    applied. Run 'python manage.py migrate' to apply them.

    décembre 03, 2025 - 15:50:53
    Django version 6.0, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.

    WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
    For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/

Note

Ignorez pour l’instant l’avertissement au sujet des migrations de base de données non appliquées ; nous nous occuperons de la base de données tantôt.

Maintenant que le serveur tourne, allez à l’adresse http://127.0.0.1:8000 avec votre navigateur Web. Vous verrez une page avec le message « Félicitations ! » ainsi qu’une fusée qui décolle. Ça marche !

Vous avez démarré le serveur de développement de Django, un serveur Web léger entièrement écrit en Python. Nous l’avons inclus avec Django de façon à vous permettre de développer rapidement, sans avoir à vous occuper de la configuration d’un serveur de production – comme Apache – tant que vous n’en avez pas besoin.

C’est le moment de noter soigneusement ceci : n’utilisez jamais ce serveur pour quoi que ce soit qui s’approche d’un environnement de production. Il est fait seulement pour tester votre travail pendant le développement (notre métier est le développement d’environnements Web, pas de serveurs Web).

(pour servir le site sur un port différent, consultez la référence `runserver`)

Rechargement automatique de `runserver`

Le serveur de développement recharge automatiquement le code Python lors de chaque requête si nécessaire. Vous ne devez pas redémarrer le serveur pour que les changements de code soient pris en compte. Cependant, certaines actions comme l’ajout de fichiers ne provoquent pas de redémarrage, il est donc nécessaire de redémarrer manuellement le serveur dans ces cas.

## Création de l’application Polls

Maintenant que votre environnement – un « projet » – est en place, vous êtes prêt à commencer à travailler.

Chaque application que vous écrivez avec Django est en fait un paquet Python qui respecte certaines conventions. Django est livré avec un utilitaire qui génère automatiquement la structure des répertoires de base d’une application, ce qui vous permet de vous concentrer sur l’écriture du code, plutôt que sur la création de répertoires.

Projets vs. applications

Quelle est la différence entre un projet et une application ? Une application est une application Web qui fait quelque chose – par exemple un système de blog, une base de données publique ou une petite application de sondage. Un projet est un ensemble de réglages et d’applications pour un site Web particulier. Un projet peut contenir plusieurs applications. Une application peut apparaître dans plusieurs projets.

Vos applications peuvent se trouver à n’importe quel endroit de votre chemin de recherche Python. Dans ce didacticiel, nous allons créer une application de sondage dans le dossier `djangotutorial`.

Pour créer votre application, assurez-vous d’être dans le même répertoire que `manage.py` et saisissez cette commande :

/ 

    $ python manage.py startapp polls

    ...\> py manage.py startapp polls

Cela va créer un répertoire `polls`, qui est structuré de la façon suivante :

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

Cette structure de répertoire accueillera l’application de sondage.

## Écriture d’une première vue

Écrivons la première vue. Ouvrez le fichier `polls/views.py` et placez-y le code Python suivant :

`polls/views.py`

    from django.http import HttpResponse

    def index(request):
        return HttpResponse("Hello, world. You're at the polls index.")

Il s’agit ici de la vue la plus basique possible avec Django. Pou y accéder au travers d’un navigateur, il est nécessaire de la faire correspondre à une URL, et pour cela, il faut définir une configuration d’URL, appelée aussi «URLconf» pour faire court. Ces configurations d’URL sont définies dans chaque application Django sous la forme de fichiers Python nommés `urls.py`.

Pour définir une URLconf pour l’application `polls`, créez un fichier `polls/urls.py` avec le contenu suivant :

`polls/urls.py`

    from django.urls import path

    from . import views

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

Le répertoire de votre application devrait maintenant ressembler à ceci :

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        urls.py
        views.py

L’étape suivante est de configurer l’URLconf racine du projet `mysite` pour y inclure l’URLconf définie dans `polls.urls`. Pour cela, ajoutez une importation `django.urls.include` dans `mysite/urls.py` et insérez un appel à `include()` dans la liste `urlpatterns`, ce qui donnera :

`monsite/urls.py`

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

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

La fonction `path()` attend au minimum deux arguments : `route` et `view`. La fonction `include()` permet de référencer d’autres configurations d’URL. Quand Django rencontre un `include()`, il tronque le bout d’URL qui correspondait jusque là et passe la chaîne de caractères restante à la configuration d’URL incluse pour continuer le traitement.

L’idée derrière `include()` est de faciliter la connexion d’URL. Comme l’application de sondages possède son propre URLconf (`polls/urls.py`), ses URL peuvent être injectés sous « /polls/ », sous « /fun_polls/ » ou sous « /content/polls/ » ou tout autre chemin racine sans que cela change quoi que ce soit au fonctionnement de l’application.

When to use `include()`

Il faut toujours utiliser `include()` lorsque l’on veut inclure d’autres motifs d’URL. La seule exception est `admin.site.urls`, qui est une configuration d’URL pré-construite fournie par Django pour le site d’administration par défaut.

Vous avez maintenant relié une vue `index` dans la configuration d’URL. Vérifiez qu’elle fonctionne avec la commande suivante :

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

Ouvrez http://localhost:8000/polls/ dans votre navigateur et vous devriez voir le texte « Hello, world. You’re at the polls index. » qui a été défini dans la vue `index`.

Page non trouvée ?

Si vous obtenez une page d’erreur ici, vérifiez que vous accédez bien à http://localhost:8000/polls/ et non pas à http://localhost:8000/.

Lorsque vous serez familiarisé avec le flux de base des requêtes et réponses, lisez la partie 2 de ce tutoriel pour commencer de travailler avec la base de données.