diff --git a/source/main.tex b/source/main.tex new file mode 100644 index 0000000..2dde5f8 --- /dev/null +++ b/source/main.tex @@ -0,0 +1,82 @@ +\documentclass[a4paper,12pt]{book} +\usepackage[utf8]{inputenc} +\usepackage{graphicx} +\usepackage{hyperref} + +\begin{document} + +\author{Cédric Declerfayt, Frederick Pauchet} +\title{Minor swing with Django} +\date{2016-2032} + +\frontmatter +\maketitle +\tableofcontents + +\mainmatter +\part{Environnement de travail} + +\chapter{Construire des applications maintenables} +\section{12 facteurs} + +Pour la méthode de travail et de développement, nous allons nous baser sur les \href{https://12factor.net/fr/}{Twelve-factorApp} - ou plus simplement les 12 facteurs. +L’idée derrière cette méthode, et indépendamment des langages de développement utilisés, consisteà suivre un ensemble de douze concepts, afin de: + +\begin{enumerate} + \item Faciliter la mise en place de phases d’automatisation; plus concrètement, de faciliter lesmises à jour applicatives, simplifier la gestion de l’hôte, diminuer la divergence entre lesdifférents environnements d’exécution et offrir la possibilité d’intégrer le projet dans unprocessus d’intégration continue ou déploiement continu + \item Faciliter la mise à pied de nouveaux développeurs ou de personnes souhaitant rejoindrele projet, dans la mesure où la mise à disposition d’un environnement sera grandementfacilitée + \item Minimiser les divergences entre les différents environnemens sur lesquels un projetpourrait être déployé + \item Augmenter l’agilité générale du projet, en permettant une meilleure évolutivité architecturale et une meilleure mise à l’échelle - Vous avez 5000 utilisateurs en plus? Ajoutez un serveur et on n’en parle plus ;-) +\end{enumerate} + +En pratique, les points ci-dessus permettront de monter facilement un nouvel environnement - qu’il soit sur la machine du petit nouveau dans l’équipe, sur un serveur Azure/Heroku/Digital Ocean ou votre nouveau Raspberry Pi Zéro planqué à la cave - et vous feront gagner un temps précieux. Pour reprendre de manière très brute les différentes idées derrière cette méthode, nous avons: + +\begin{enumerate} + \item ... + \item ... +\end{enumerate} + +\subsection{Une base de code unique, suivie par un système de contrôle de versions} + +\chapter{Boite à outils} +\chapter{Un projet Python} +\chapter{Un projet Django} + + +\part{Déploiement} +\chapter{Infrastructure et composants} +\chapter{Code source} +\chapter{Supervision et mise à disposition} +\chapter{Méthodes de déploiement} +\chapter{Ressources} + +\part{Backend} +\chapter{Modélisation} +\chapter{Migrations} +\chapter{Administration} +\chapter{Authentification} +\chapter{Shell} + +\part{Frontend} +\chapter{Formulaires} +\chapter{Vues} +\chapter{Templates} +\chapter{URLs et espaces de noms} + +\part{Concepts périphériques} +\chapter{Logging} +\chapter{Tests unitaires} + +\part{Go Live} +\chapter{Gwift} + +\chapter{Khana} + +\chapter{Applications \textit{Legacy}} + +\chapter{Refactoring} + +\backmatter +% bibliography, glossary and index would go here. + +\end{document} \ No newline at end of file diff --git a/source/part-3-django-concepts/models.adoc b/source/part-3-django-concepts/models.adoc index 0d52c7f..fa337e5 100644 --- a/source/part-3-django-concepts/models.adoc +++ b/source/part-3-django-concepts/models.adoc @@ -105,6 +105,38 @@ Les propriétés de la classe Meta les plus utiles sont les suivates: * `ordering` pour spécifier un ordre de récupération spécifique. * `verbose_name` pour indiquer le nom à utiliser au singulier pour définir votre classe * `verbose_name_plural`, pour le pluriel. +* `contraints` (Voir https://girlthatlovestocode.com/django-model[ici]-), par exemple + +[source,python] +---- + constraints = [ # constraints added + models.CheckConstraint(check=models.Q(year_born__lte=datetime.date.today().year-18), name='will_be_of_age'), + ] +---- + +==== Choix + +Voir https://girlthatlovestocode.com/django-model[ici] + +[source,python] +---- +class Runner(models.Model): + + # this is new: + class Zone(models.IntegerChoices): + ZONE_1 = 1, 'Less than 3.10' + ZONE_2 = 2, 'Less than 3.25' + ZONE_3 = 3, 'Less than 3.45' + ZONE_4 = 4, 'Less than 4 hours' + ZONE_5 = 5, 'More than 4 hours' + + name = models.CharField(max_length=50) + last_name = models.CharField(max_length=50) + email = models.EmailField() + id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + start_zone = models.PositiveSmallIntegerField(choices=Zone.choices, default=Zone.ZONE_5, help_text="What was your best time on the marathon in last 2 years?") # this is new +---- + ==== Shell