Création d'une application de sondage de base

DjangoDjangoAdvanced
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce tutoriel, nous allons vous guider dans la création d'une application de sondage de base.

Ceci est un Guided Lab, qui fournit des instructions étape par étape pour vous aider à apprendre et à pratiquer. Suivez attentivement les instructions pour compléter chaque étape et acquérir une expérience pratique. Les données historiques montrent que c'est un laboratoire de niveau avancé avec un taux de réussite de 29%. Il a reçu un taux d'avis positifs de 100% de la part des apprenants.

Présentation

Apprenons par l'exemple.

Dans tout ce tutoriel, nous allons vous guider dans la création d'une application de sondage de base.

Elle se compose de deux parties :

  • Un site public qui permet aux gens de consulter les sondages et de voter pour eux.
  • Un site d'administration qui vous permet d'ajouter, de modifier et de supprimer des sondages.

Nous supposerons que vous avez déjà installé Django. Vous pouvez vérifier si Django est installé et quelle est sa version en exécutant la commande suivante dans une invite de commande :

python -m django --version

Si Django est installé, vous devriez voir la version de votre installation. Sinon, vous obtiendrez une erreur indiquant "Aucun module nommé django".

Ce tutoriel est écrit pour Django, qui prend en charge Python 3.10 et versions ultérieures. Si la version de Django ne correspond pas, vous pouvez vous référer au tutoriel pour votre version de Django en utilisant le sélecteur de versions dans le coin inférieur droit de cette page, ou mettre à jour Django vers la version la plus récente.

Création d'un projet

Si c'est la première fois que vous utilisez Django, vous devrez prendre soin de certaines configurations initiales. Plus précisément, vous devrez générer automatiquement du code qui établit un projet Django - une collection de paramètres pour une instance de Django, y compris la configuration de la base de données, les options spécifiques à Django et les paramètres spécifiques à l'application.

À partir de la ligne de commande, utilisez cd pour accéder au répertoire où vous souhaitez stocker votre code, puis exécutez la commande suivante :

cd ~/project
django-admin startproject mysite

Cela créera un répertoire mysite dans votre répertoire actuel.

Regardons ce que startproject a créé :

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

Ces fichiers sont :

  • Le répertoire racine externe mysite/ est un conteneur pour votre projet. Son nom n'a pas d'importance pour Django ; vous pouvez le renommer comme vous le souhaitez.
  • manage.py : Une utilité de ligne de commande qui vous permet d'interagir avec ce projet Django de diverses manières.
  • Le répertoire interne mysite/ est le véritable package Python pour votre projet. Son nom est le nom de package Python que vous devrez utiliser pour importer tout ce qui se trouve à l'intérieur (par exemple mysite.urls).
  • mysite/__init__.py : Un fichier vide qui indique à Python que ce répertoire devrait être considéré comme un package Python.
  • mysite/settings.py : Paramètres/configuration pour ce projet Django.
  • mysite/urls.py : Les déclarations d'URL pour ce projet Django ; une "table des matières" de votre site alimenté par Django.
  • mysite/asgi.py : Un point d'entrée pour les serveurs web compatibles ASGI pour héberger votre projet.
  • mysite/wsgi.py : Un point d'entrée pour les serveurs web compatibles WSGI pour héberger votre projet.

Le serveur de développement

Vérifions que votre projet Django fonctionne. Si vous ne l'avez pas déjà fait, accédez au répertoire externe mysite et exécutez les commandes suivantes :

cd ~/project/mysite
python manage.py runserver

Vous verrez la sortie suivante sur la 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.

- 15:50:53 Django version, using settings'mysite.settings' Starting development server at <http://127.0.0.1:8000/> Quit the server with CONTROL-C.

Ignorez le message d'avertissement concernant les migrations de base de données non appliquées pour l'instant ; nous en reparlerons bientôt.

Vous avez démarré le serveur de développement Django, un serveur web léger écrit entièrement en Python. Nous l'avons inclus avec Django pour que vous puissiez développer rapidement, sans avoir à vous occuper de la configuration d'un serveur de production - tel qu'Apache - jusqu'à ce que vous soyez prêt pour la production.

C'est le moment de noter : ne pas utiliser ce serveur dans un environnement ressemblant à un environnement de production. Il est destiné uniquement à l'utilisation pendant le développement. (Nous sommes dans l'affaire de création de frameworks web, pas de serveurs web.)

Maintenant que le serveur est en cours d'exécution, accédez à http://127.0.0.1:8000/ avec votre navigateur web. Ou, exécutez curl 127.0.0.1:8000 dans le terminal. Vous verrez une page "Félicitations!", avec une fusée qui décoll. Ça a fonctionné!

Dans la machine virtuelle LabEx, nous devons ajouter le domaine LabEx à ALLOWED_HOSTS. Éditez mysite/settings.py et ajoutez * à la fin de ALLOWED_HOSTS, de sorte qu'il ressemble à ceci :

ALLOWED_HOSTS = ["*"]

Cela indique à Django qu'il est autorisé à traiter les requêtes avec n'importe quel en-tête d'hôte.

Django development server running

Changement du port

Par défaut, la commande runserver lance le serveur de développement sur l'adresse IP interne au port 8000.

Si vous voulez changer le port du serveur, passez-le en tant qu'argument de ligne de commande. Par exemple, cette commande lance le serveur sur le port 8080 :

python manage.py runserver 8080

Si vous voulez changer l'adresse IP du serveur, passez-la avec le port. Par exemple, pour écouter sur toutes les adresses IP publiques disponibles (ce qui est utile si vous exécutez Vagrant ou si vous voulez montrer votre travail sur d'autres ordinateurs du réseau), utilisez :

python manage.py runserver 0.0.0.0:8080

Maintenant, basculez sur l'onglet Web 8080 dans la machine virtuelle LabEx et vous verrez la même page "Félicitations".

Django development server page

Les documents complets pour le serveur de développement sont disponibles dans la référence runserver.

Rechargement automatique de runserver
Le serveur de développement recharge automatiquement le code Python pour chaque requête selon les besoins. Vous n'avez pas besoin de redémarrer le serveur pour que les modifications de code prennent effet. Cependant, certaines actions comme l'ajout de fichiers ne déclenchent pas un redémarrage, donc vous devrez redémarrer le serveur dans ces cas.

Création de l'application Polls

Maintenant que votre environnement - un "projet" - est configuré, vous êtes prêt à commencer à travailler.

Chaque application que vous écrivez dans Django est composée d'un package Python qui suit une certaine convention. Django est livré avec une utilité qui génère automatiquement la structure de répertoires de base d'une application, de sorte que vous pouvez vous concentrer sur l'écriture de 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 de registres publics ou une petite application de sondage. Un projet est une collection de configurations et d'applications pour un site web particulier. Un projet peut contenir plusieurs applications. Une application peut être incluse dans plusieurs projets.

Vos applications peuvent se trouver n'importe où sur votre Python path <tut-searchpath>. Dans ce tutoriel, nous allons créer notre application de sondage dans le même répertoire que votre fichier manage.py afin qu'elle puisse être importée comme un module de niveau supérieur autonome, plutôt qu'un sous-module de mysite.

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

cd ~/project/mysite
python manage.py startapp polls

Cela créera un répertoire polls, qui est structuré comme suit :

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

Cette structure de répertoires contiendra l'application de sondage.

Écrivez votre première vue

Écrivons la première vue. Ouvrez le fichier polls/views.py et mettez le code Python suivant dedans :

from django.http import HttpResponse


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

C'est la vue la plus simple possible en Django. Pour appeler la vue, nous devons la mapper à une URL - et pour cela, nous avons besoin d'une configuration d'URL (URLconf).

Pour créer une URLconf dans le répertoire polls, créez un fichier appelé urls.py. Votre structure de répertoires d'application devrait maintenant ressembler à ceci :

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

Dans le fichier polls/urls.py, incluez le code suivant :

from django.urls import path

from. import views

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

L'étape suivante consiste à pointer la configuration d'URL racine vers le module polls.urls. Dans mysite/urls.py, ajoutez une importation pour django.urls.include et insérez un ~django.urls.include dans la liste urlpatterns, de sorte que vous obtenez :

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

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

La fonction ~django.urls.include permet de référencer d'autres configurations d'URL.每当 Django 遇到 ~django.urls.include 时,它会截断到该点为止匹配的 URL 的任何部分,并将剩余的字符串发送到包含的 URLconf 进行进一步处理。

L'idée derrière ~django.urls.include est de faciliter l'utilisation des URLs en les connectant facilement. Étant donné que les sondages sont dans leur propre configuration d'URL (polls/urls.py), ils peuvent être placés sous "/polls/", ou sous "/fun_polls/", ou sous "/content/polls/", ou n'importe quel autre chemin racine, et l'application fonctionnera toujours.

Quand utiliser ~django.urls.include()
Vous devriez toujours utiliser include() lorsque vous incluez d'autres modèles d'URL. admin.site.urls est l'unique exception à cela.

Vous avez maintenant connecté une vue index à la configuration d'URL. Vérifiez que cela fonctionne avec la commande suivante :

python manage.py runserver 0.0.0.0:8080

Accédez à <http:///polls/> dans votre navigateur, et vous devriez voir le texte "Hello, world. You're at the polls index.", que vous avez défini dans la vue index.

Django URLconf structure

La fonction ~django.urls.path est passée quatre arguments, deux requis : route et view, et deux optionnels : kwargs et name. À ce stade, il est utile de réviser à quoi servent ces arguments.

Argument ~django.urls.path : route

route est une chaîne de caractères qui contient un modèle d'URL. Lorsqu'il traite une requête, Django commence par le premier modèle dans urlpatterns et parcourt la liste, comparant l'URL demandée avec chaque modèle jusqu'à ce qu'il trouve un qui correspond.

Les modèles ne cherchent pas les paramètres GET et POST, ni le nom de domaine. Par exemple, dans une requête à https://www.example.com/myapp/, la configuration d'URL cherchera myapp/. Dans une requête à https://www.example.com/myapp/?page=3, la configuration d'URL cherchera également myapp/.

Argument ~django.urls.path : view

Lorsque Django trouve un modèle correspondant, il appelle la fonction de vue spécifiée avec un objet ~django.http.HttpRequest en tant que premier argument et toutes les valeurs "capturées" à partir de la route en tant qu'arguments nommés. Nous donnerons un exemple de cela un peu plus loin.

Argument ~django.urls.path : kwargs

Des arguments nommés arbitraires peuvent être passés dans un dictionnaire à la vue cible. Nous n'allons pas utiliser cette fonctionnalité de Django dans le tutoriel.

Argument ~django.urls.path : name

Donner un nom à votre URL vous permet de vous y référer de manière non ambiguë d'autres parties de Django, en particulier à partir de templates. Cette fonction puissante vous permet de modifier globalement les modèles d'URL de votre projet tout en ne touchant qu'un seul fichier.

Sommaire

Félicitations! Vous avez terminé le laboratoire de création d'une application de sondage de base. Vous pouvez pratiquer d'autres laboratoires dans LabEx pour améliorer vos compétences.