186 lines
8.3 KiB
TeX
186 lines
8.3 KiB
TeX
\chapter{Introduction}
|
|
|
|
\begin{quote}
|
|
The only way to go fast, is to go well
|
|
|
|
--- Robert C. Martin
|
|
\end{quote}
|
|
|
|
Nous n'allons pas vous mentir: il existe énormément de tutoriaux très
|
|
bien réalisés sur "\emph{Comment réaliser une application Django}" et
|
|
autres "\emph{Déployer votre code en 2 minutes}". Nous nous disions
|
|
juste que ces tutoriaux restaient relativement haut-niveaux et se
|
|
limitaient à un contexte donné, sans réellement préparer à la
|
|
maintenance et au suivi de l'application nouvellement développée.
|
|
|
|
Les quelques idées ci-dessous de jeter les bases d'un bon développement, en
|
|
|
|
\begin{itemize}
|
|
\item Survolant l'ensemble des lignes directrices reconnues
|
|
\item Maintenant une bonne qualité de code
|
|
\item Parcourant les différentes étapes du développement qui mèneront jusqu'au déploiement
|
|
\item Maintenant correctement la base de données
|
|
\item Permettant à quiconque de reprendre ce qui aura déjà été écrit.
|
|
\end{itemize}
|
|
|
|
Ces idées ne s'appliquent pas uniquement à Django et à son cadre de travail, ni même au langage Python en particulier.
|
|
Ces deux sujets sont cependant de bons candidats et leur utilisation et cadre de travail sont bien définis, documentés et flexibles.
|
|
|
|
Django se présente comme un \emph{Framework Web pour perfectionnistes
|
|
ayant des deadlines} \cite{django} et suit ces quelques principes
|
|
\cite{django_design_philosophies}:
|
|
|
|
\begin{itemize}
|
|
\item
|
|
\textbf{Faible couplage et forte cohésion}, pour que chaque composant dispose de son indépendance, en n'ayant aucune connaissance des autres couches applicatives. Ainsi, le moteur de rendu ne connait absolument rien à l'existence du moteur de base de données, tout comme le système de vues ne sait pas quel moteur de rendu est utilisé.
|
|
\item
|
|
\textbf{Plus de fonctionnalités avec moins de code}: chaque application Django
|
|
doit utiliser le moins de code possible
|
|
\item
|
|
\textbf{\emph{Don't repeat yourself}}, chaque concept ou morceau de code ne
|
|
doit être présent qu'à un et un seul endroit de vos dépôts.
|
|
\item
|
|
\textbf{Rapidité du développement}, en masquant les aspects fastidieux du
|
|
développement web actuel
|
|
\end{itemize}
|
|
|
|
Mis côte à côte, le suivi de ces principes permet une bonne stabilité du
|
|
projet à moyen et long terme.
|
|
|
|
Sans être parfait, Django offre une énorme flexibilité qui permet de conserver un maximum d'options ouvertes et de facilement expérimenter différentes pistes, jusqu'au moment de prendre une vraie décision.
|
|
Pour la (grande) majorité des problèmes rencontrés lors du développement d'une application Web, Django proposera une solution pragmatique, compréhensible et facile à mettre en place: pour tout problème communément connu, vous disposerez d'une solution logique.
|
|
|
|
Tout pour plaire à n'importe quel directeur IT.
|
|
|
|
\textbf{Dans la première partie}, nous verrons comment partir d'un
|
|
environnement sain, comment le configurer correctement, comment
|
|
installer Django de manière isolée et comment démarrer un nouveau
|
|
projet. Nous verrons rapidement comment gérer les dépendances, les
|
|
versions et comment appliquer et suivre un score de qualité de notre
|
|
code. Ces quelques points pourront être appliqués pour n'importe quel
|
|
langage ou cadre de travail. Nous verrons aussi que la configuration
|
|
proposée par défaut par le framework n'est pas idéale dans la majorité
|
|
des cas.
|
|
|
|
Pour cela, nous présenterons différents outils, la rédaction de tests
|
|
unitaires et d'intégration pour limiter les régressions, les règles de
|
|
nomenclature et de contrôle du contenu, comment partir d'un squelette
|
|
plus complet, ainsi que les bonnes étapes à suivre pour arriver à un
|
|
déploiement rapide et fonctionnel avec peu d'efforts.
|
|
|
|
A la fin de cette partie, vous disposerez d'un code propre et d'un
|
|
projet fonctionnel, bien qu'encore un peu inutile.
|
|
|
|
textbf{Dans la deuxième partie}, nous aborderons les grands principes
|
|
de modélisation, en suivant les lignes de conduites du cadre de travail.
|
|
Nous aborderons les concepts clés qui permettent à une application de
|
|
rester maintenable, les formulaires, leurs validations, comment gérer
|
|
les données en entrée, les migrations de données et l'administration.
|
|
|
|
\textbf{Dans la troisième partie}, nous détaillerons précisément les
|
|
étapes de déploiement, avec la description et la configuration de
|
|
l'infrastructure, des exemples concrets de mise à disposition sur deux
|
|
distributions principales (Debian et CentOS), sur une \emph{*Plateform
|
|
as a Service*}, ainsi que l'utilisation de Docker et Docker-Compose.
|
|
|
|
Nous aborderons également la supervision et la mise à jour d'une
|
|
application existante, en respectant les bonnes pratiques
|
|
d'administration système.
|
|
|
|
\textbf{Dans la quatrième partie}, nous aborderons les architectures
|
|
typées \emph{entreprise}, les services et les différentes manières de
|
|
structurer notre application pour faciliter sa gestion et sa
|
|
maintenance, tout en décrivant différents types de scénarii, en fonction
|
|
des consommateurs de données.
|
|
|
|
\textbf{Dans la cinquième partie}, nous mettrons ces concepts en
|
|
pratique en présentant le développement en pratique de deux
|
|
applications, avec la description de problèmes rencontrés et la solution
|
|
qui a été choisie: définition des tables, gestion des utilisateurs,
|
|
\ldots\hspace{0pt} et mise à disposition.
|
|
|
|
\subsection{Pour qui ?}
|
|
|
|
Avant tout, pour moi. Comme le disait le Pr Richard Feynman: "\emph{Si
|
|
vous ne savez pas expliquer quelque chose simplement, c'est que vous ne
|
|
l'avez pas compris}". \footnote{Et comme l'ajoutait Aurélie Jean dans de
|
|
L'autre côté de la machine: \emph{"Si personne ne vous pose de
|
|
questions suite à votre explication, c'est que vous n'avez pas été
|
|
suffisamment clair !"} \cite{other_side}}
|
|
|
|
Ce livre s'adresse autant au néophyte qui souhaite se lancer dans le
|
|
développement Web qu'à l'artisan qui a besoin d'un aide-mémoire et qui
|
|
ne se rappelle plus toujours du bon ordre des paramètres, ou à l'expert
|
|
qui souhaiterait avoir un aperçu d'une autre technologie que son domaine
|
|
privilégié de compétences.
|
|
|
|
Beaucoup de concepts présentés peuvent être oubliés ou restés inconnus
|
|
jusqu'au moment où ils seront réellement nécessaires. A ce moment-là,
|
|
pour peu que votre mémoire ait déjà entraperçu le terme, il vous sera
|
|
plus facile d'y revenir et de l'appliquer.
|
|
|
|
\subsection{Pour aller plus loin}
|
|
|
|
Il existe énormément de ressources, autant spécifiques à Django que plus
|
|
généralistes. Il ne sera pas possible de toutes les détailler; faites un
|
|
tour sur
|
|
|
|
\begin{itemize}
|
|
\item
|
|
\url{https://duckduckgo.com},
|
|
\item
|
|
\url{https://stackoverflow.com},
|
|
\item
|
|
\url{https://ycombinator.com},
|
|
\item
|
|
\url{https://lobste.rs/},
|
|
\item
|
|
\url{https://lecourrierduhacker.com/}
|
|
\item
|
|
ou \url{https://www.djangoproject.com/}.
|
|
\end{itemize}
|
|
|
|
Restez curieux, ne vous enclavez pas dans une technologie en particulier
|
|
et gardez une bonne ouverture d'esprit.
|
|
|
|
\subsection{Conventions}
|
|
|
|
Les notes indiquent des anecdotes.
|
|
Les conseils indiquent des éléments utiles, mais pas spécialement
|
|
indispensables.
|
|
|
|
Les notes importantes indiquent des éléments à retenir.
|
|
|
|
Ces éléments indiquent des points d'attention. Les retenir vous fera
|
|
gagner du temps en débuggage.
|
|
|
|
Les avertissements indiquent un (potentiel) danger ou des éléments
|
|
pouvant amener des conséquences pas spécialement sympathiques.
|
|
|
|
Les morceaux de code source seront présentés de la manière suivante:
|
|
|
|
\begin{listing}[htbp]
|
|
\begin{minted}{Python}
|
|
# <folder>/<fichier>.<extension>
|
|
|
|
def function(param):
|
|
"""
|
|
"""
|
|
callback()
|
|
\end{minted}
|
|
\end{listing}
|
|
|
|
Chaque extrait de code reprendra
|
|
|
|
\begin{itemize}
|
|
\item l'emplacement du fichier, présenté sous forme de commentaire (ligne 1),
|
|
\item Des commentaires au niveau des fonctions et méthodes, si cela s'avère nécessaire
|
|
\item Un surlignage sur les parties importantes ou récemment modifiées
|
|
\end{itemize}
|
|
|
|
La plupart des commandes qui seront présentées dans ce livre le seront depuis un shell sous GNU/Linux.
|
|
Certaines d'entre elles pourraient devoir être adaptées si vous utilisez un autre système d'exploitation (macOS) ou n'importe quelle autre grosse bouse commerciale.
|
|
|
|
Les morceaux de code que vous trouverez ci-dessous seront développés pour Python3.9+ et Django 3.2+.
|
|
Ils nécessiteront peut-être quelques adaptations pour fonctionner sur une version antérieure.
|