Add LaTeX source folder
This commit is contained in:
parent
ac78de067c
commit
a6290ae866
|
@ -0,0 +1,3 @@
|
||||||
|
\chapter{Licence}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,293 @@
|
||||||
|
\documentclass[twoside=no,parskip=half,numbers=enddot,bibliography=totoc,index=totoc,listof=totoc]{scrbook}
|
||||||
|
\usepackage{makeidx}
|
||||||
|
\usepackage[french]{babel}
|
||||||
|
\usepackage{csquotes}
|
||||||
|
\usepackage{hyperref}
|
||||||
|
\usepackage{setspace}
|
||||||
|
\onehalfspacing
|
||||||
|
|
||||||
|
\makeindex
|
||||||
|
|
||||||
|
\title{Minor Swing with Django}
|
||||||
|
\author{Fred}
|
||||||
|
\date{Entre 2015 et 2032}
|
||||||
|
\publishers{Me, Myself and I Editions}
|
||||||
|
|
||||||
|
\setcounter{tocdepth}{1}
|
||||||
|
\begin{document}
|
||||||
|
\maketitle
|
||||||
|
|
||||||
|
\frontmatter
|
||||||
|
|
||||||
|
\include{chapters/licence.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 enormé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.
|
||||||
|
|
||||||
|
L'idée du texte ci-dessous est de jeter les bases d'un bon
|
||||||
|
développement, en survolant l'ensemble des outils permettant de suivre
|
||||||
|
des lignes directrices reconnues, de maintenir une bonne qualité de code
|
||||||
|
au travers des différentes étapes menant jusqu'au déploiement et de
|
||||||
|
s'assurer du maintient correct de la base de code, en permettant à
|
||||||
|
n'importe qui de reprendre ce qui aura déjà été écrit.
|
||||||
|
|
||||||
|
Ces idées ne s'appliquent pas uniquement à Django et à son cadre de
|
||||||
|
travail, ni même au langage Python. Ces deux sujets sont cependant de
|
||||||
|
bons candidats et leur cadre de travail est bien défini, documenté et
|
||||||
|
suffisamment flexible.
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
||||||
|
Plus de fonctionnalités avec moins de code: chaque application Django
|
||||||
|
doit utiliser le moins de code possible
|
||||||
|
\item
|
||||||
|
\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
|
||||||
|
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.
|
||||||
|
|
||||||
|
Comme nous le verrons par la suite, et sans être parfait, Django offre
|
||||||
|
une énorme flexibilité qui permet de se laisser le maximum d'options
|
||||||
|
ouvertes tout en permettant d'expérimenter facilement plusieurs pistes,
|
||||||
|
jusqu'au moment de prendre une vraie décision. Dans la majorité des cas
|
||||||
|
problématiques pouvant être rencontrés lors du développement d'une
|
||||||
|
application Web, Django proposera une solution pragmatique,
|
||||||
|
compréhensible et facile à mettre en place. En résumé de ce paragraphe,
|
||||||
|
pour tout problème commun, 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.
|
||||||
|
|
||||||
|
\hypertarget{_pour_qui}{%
|
||||||
|
\subsection{Pour qui ?}\label{_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.
|
||||||
|
|
||||||
|
\hypertarget{_pour_aller_plus_loin}{%
|
||||||
|
\subsection{Pour aller plus loin}\label{_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.
|
||||||
|
|
||||||
|
\hypertarget{_conventions}{%
|
||||||
|
\subsection{Conventions}\label{_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:
|
||||||
|
|
||||||
|
\chapter{Remerciements}
|
||||||
|
|
||||||
|
|
||||||
|
\tableofcontents
|
||||||
|
\listoffigures
|
||||||
|
\listoftables
|
||||||
|
|
||||||
|
\mainmatter
|
||||||
|
\part{Environnement et méthodes de travail}
|
||||||
|
|
||||||
|
\chapter{Poésie de la programmation}
|
||||||
|
Text
|
||||||
|
\chapter{Fiabilité, évolutivité et maintenabilité}
|
||||||
|
|
||||||
|
\chapter{Eléments d'architecture}
|
||||||
|
|
||||||
|
\chapter{Le langage Python}
|
||||||
|
|
||||||
|
\chapter{Démarrer un nouveau projet}
|
||||||
|
|
||||||
|
|
||||||
|
\part{Principes fondamentaux de Django}
|
||||||
|
|
||||||
|
\chapter{Modélisation}
|
||||||
|
|
||||||
|
\chapter{Migrations}
|
||||||
|
|
||||||
|
\chapter{Shell}
|
||||||
|
|
||||||
|
\chapter{Administration}
|
||||||
|
|
||||||
|
\chapter{Forms}
|
||||||
|
|
||||||
|
\chapter{Processus d'authentification}
|
||||||
|
|
||||||
|
\chapter{Context Processors}
|
||||||
|
|
||||||
|
\chapter{Conclusions}
|
||||||
|
|
||||||
|
\part{Méthodes de déploiement}
|
||||||
|
|
||||||
|
\chapter{Infrastructure et composants}
|
||||||
|
|
||||||
|
\chapter{Code source}
|
||||||
|
|
||||||
|
\chapter{Outils de supervision et de mise à disposition}
|
||||||
|
|
||||||
|
\chapter{Journaux}
|
||||||
|
|
||||||
|
\chapter{Méthodes}
|
||||||
|
|
||||||
|
\chapter{On-premise: Debian}
|
||||||
|
|
||||||
|
\chapter{PaaS: Heroku}
|
||||||
|
|
||||||
|
\chapter{Outils complémentaires}
|
||||||
|
|
||||||
|
\chapter{Ressources}
|
||||||
|
|
||||||
|
\chapter{Conclusions}
|
||||||
|
|
||||||
|
\part{Services Oriented Applications}
|
||||||
|
|
||||||
|
\chapter{Application Programming Interfaces}
|
||||||
|
|
||||||
|
\chapter{A/B Testing}
|
||||||
|
|
||||||
|
\chapter{Modèles et relations}
|
||||||
|
|
||||||
|
\chapter{Filtres et recherches}
|
||||||
|
|
||||||
|
\chapter{URLs et espaces de noms}
|
||||||
|
|
||||||
|
\chapter{i18n / l20n}
|
||||||
|
|
||||||
|
\chapter{Conclusions}
|
||||||
|
|
||||||
|
\part{Go Live!}
|
||||||
|
|
||||||
|
\chapter{Gwift}
|
||||||
|
|
||||||
|
\chapter{Khana}
|
||||||
|
|
||||||
|
\chapter{Tests unitaires}
|
||||||
|
|
||||||
|
\chapter{Refactoring}
|
||||||
|
|
||||||
|
\chapter{Conclusions}
|
||||||
|
|
||||||
|
\backmatter
|
||||||
|
|
||||||
|
\printindex
|
||||||
|
|
||||||
|
\bibliography{bibiography.bib}
|
||||||
|
|
||||||
|
\end{document}
|
Loading…
Reference in New Issue