Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 1 livre papier acheté 
= la version en ligne automatiquement offerte. Cliquez ici

Créer une application web en 30 minutes

Description de l’application à construire

Comme nous l’avons précisé au chapitre précédent, nous allons construire une application permettant de toucher plusieurs domaines techniques différents. Ce chapitre se concentre sur la partie principale : l’application web.

En effet, pour construire cette application, nous allons utiliser un générateur de code qui va faire une grosse partie du travail pour nous.

Pour des raisons pratiques, il faut donc commencer par ce chapitre pour pouvoir réaliser les suivants.

L’application dans sa globalité est un simple formulaire de contact.

La solution web retenue est Pyramid, qui est un framework web utilisant différents modules Python éprouvés qu’il agrège et sur lesquels il s’appuie pour offrir une solution fiable, mais très souple, puisqu’il est à tout moment possible de remplacer un des modules par un autre (par exemple changer le module gérant le templating, ou celui gérant l’authentification, ou encore celui gérant le routage…). Le découplage de ces modules est une des forces de ce framework.

La solution persistante que nous allons utiliser est PostgreSQL.

Il est à noter que la première édition de cet ouvrage utilisait TurboGears. Cette solution reste excellente et met en œuvre quelques composants similaires à Pyramid ainsi que de nombreux autres assez spécifiques et intéressants, mais elle se rapproche plus d’un framework tel que Django.

Ce dernier est un framework full-stack, c’est-à-dire qu’il intègre en son sein tous les composants élémentaires (il n’est plus nécessaire d’utiliser des projets annexes pour effectuer les tâches basiques ; d’un autre côté, le développeur a plus de contraintes)....

Mise en place

1. Isolation de l’environnement

Pour cette partie, nous allons utiliser le travail effectué au chapitre précédent.

Pour entrer dans votre environnement de travail, vous devez simplement vous positionner dans le répertoire du projet et exécuter les commandes :

$ docker compose up -d 
$ docker compose run project_main bash 

Vous ouvrirez ainsi un terminal dans votre environnement de travail.

Il est à noter que Pyramid fait quelques choix forts tels que celui qui consiste à utiliser cookie cutter pour générer le code initial du projet, ce que nous allons voir juste après.

Le template de code utilise une ancienne méthode pour réaliser le packaging de l’application, en se basant sur un fichier setup.py.

Je vous invite à faire les différents tutoriels de Pyramid pour approfondir cet aspect, en particulier car ce tutoriel-là évite de faire de la redite en présentant des aspects qui sont déjà dans les tutoriels et offre des compléments en présentant des techniques qui n’y sont pas.

Toujours est-il que, de notre côté, nous allons plutôt faire du packaging en utlisant poetry et donc le fichier pyproject.toml déjà initié au chapitre précédent, mais nous allons tout de même utiliser la même base de code que le tutoriel officiel de Pyramid, en utilisant le même template cookie cutter.

2. Création du projet

La première étape est d’installer Pyramid avec poetry, si vous ne l’avez pas fait précédemment :

$ poetry add pyramid  

Si cela s’est bien passé, la commande suivante doit fonctionner :

$ pserve -help 

pserve est le serveur web Python permettant de lancer l’application dans le but de la développer et offrant des outils pour le développement...

Réalisation de l’application

Maintenant, il faut passer à la réalisation de l’application. Pour cela, nous allons commencer par présenter les modèles dans leur intégralité, puis présenter les vues pour montrer comment les données sont organisées et affichées et enfin les contrôleurs pour les manipuler et relier les vues au modèle.

1. Modèles

Cette section est particulière car ce modèle est également celui qui sert de base aux prochains chapitres. Nous allons écrire le modèle dans un fichier project.py placé dans le répertoire project/models.

Il contient ceci :

# -*- coding: utf-8 -*- 
 
from datetime import datetime  
 
from sqlalchemy import (  
    Column, 
    ForeignKey,  
    Index,  
    Integer,  
    UnicodeText,  
    Unicode,  
    DateTime, 
    )  
 
 
from .meta import Base 
 
__all__ = ['Subject', 'Contact'] 
 
class Subject(Base):  
    __tablename__ = 'subjects'  
    id = Column(Integer, primary_key=True)  
    name = Column(Unicode(255), unique=True) 
 
Index('subject_name_index', Subject.name, unique=True, mysql_length=255)  
 
class Contact(Base):  
    __tablename__ = 'contacts'  
    id = Column(Integer, primary_key=True)  
    email = Column(Unicode(255), nullable=False)  
    subject_id = Column(Integer, ForeignKey(Subject.id))  
    text = Column(UnicodeText, nullable=False)...

Pour aller plus loin

On a présenté ici les rudiments permettant la création d’un site web à partir d’un framework minimaliste en Python 3. Il y aurait de quoi faire un livre entier sur ce seul sujet, parce que les compétences à acquérir sont très nombreuses : Pyramid permet de faire beaucoup plus de choses que ce qui est présenté ici et nécessite un vrai investissement, sans parler des technologies HTML, CSS, JavaScript, lesquelles doivent être associées à des talents de graphiste et d’ergonome.

Cette présentation peut également être complétée par d’autres sujets potentiellement complexes qui peuvent être la bonne gestion des utilisateurs ou des groupes, l’authentification par LDAP, les groupes LDAP, la gestion d’openID, l’utilisation de plusieurs bases de données ou la mise en place d’outils de profiling.

Enfin, pour terminer, lorsque l’on met en production une telle application, il faut utiliser un serveur tel qu’Apache, Gunicorn, Tornado ou NGINX et donc le WSGI. Ceci se réalise très rapidement et simplement, et grâce aux hôtes virtuels, il est possible d’intégrer cette application à une autre grappe d’applications tournant sur le même serveur.

Enfin, il est nécessaire d’avoir conscience que Pyramid n’est pas la seule solution et que pour parvenir à réaliser certaines fonctionnalités, il faut faire appel à d’autres modules Python, lesquels ne sont pas forcément tous portés sous Python 3, ce qui est encore à l’heure actuelle un obstacle. Pyramid se positionne comme étant un framework web au-dessus d’une base relationnelle, mais il peut travailler avec d’autres types de bases de données...