gwift-book/source/main.adoc

4.9 KiB
Raw Blame History

Minor swing with Django

On ne va pas se mentir: il existe enormément de tutoriaux très bien réalisés sur "Comment réaliser une application Django" et autres "Déployer votre code en 2 minutes". On se disait juste que ces tutoriaux restaient relativement haut-niveau et se limitaient à un contexte donné.

Lidée du texte ci-dessous est de jeter les bases dun bon développement, en survolant lensemble des outils permettant de suivre des lignes directrices reconnues, de maintenir une bonne qualité de code au travers des différentes étapes (du développement au déploiement) et de sassurer du maintient correct de la base de code, en permettant à nimporte qui de reprendre le développement.

Ces idées ne sappliquent pas uniquement à Django et à son cadre de travail, ni même au langage Python. Juste que ces deux bidules sont de bons candidats et que le cadre de travail est bien défini et suffisamment flexible.

Django se présente comme un `Framework Web pour perfectionnistes ayant des deadlines <https://www.djangoproject.com/>`_.

  • Faible couplage et forte cohésion, pour que chaque composant ait son indépendance.

  • Moins de code, plus de fonctionnalités.

  • `Dont repeat yourself <https://fr.wikipedia.org/wiki/Sec>`_: ne pas se répéter!

  • Rapidité du développement (après une courbe dapprentissage relativement ardue, malgré tout)

Mis côté à côté, lapplication de ces principes permet une meilleure stabilité du projet. Dans la suite de ce chapitre, on verra comment configurer lenvironnement, comment installer Django de manière isolée et comment démarrer un nouveau projet. On verra comment gérer correctement les dépendances, les versions et comment applique un score sur note code.

Finalement, on verra aussique la configuration proposée par défaut par le framework nest pas idéale pour la majorité des cas.

Pour cela, on présentera différents outils (mypy, flake8, black, …​), la rédaction de tests unitaires et dintégration pour limiter les régressions, les règles de nomenclature et de contrôle du contenu, ainsi que les bonnes étapes à suivre pour arriver à un déploiement rapide et fonctionnel avec peu defforts.

Et tout ça à un seul et même endroit. Oui. :-)

Bonne lecture.

Environnement de travail

Avant de démarrer le développement, il est nécessaire de passer un peu de temps sur la configuration de lenvironnement.

Les morceaux de code seront développés pour Python3.4+ et Django 1.8+. Ils nécessiteront peut-être quelques adaptations pour fonctionner sur une version antérieure.

Remarque : les commandes qui seront exécutés dans ce livre le seront depuis un shell sous GNU/Linux. Certaines devront donc être adaptées si vous êtes dans un autre environnemnet.

Unresolved directive in <stdin> - include::toolchain/12-factors.adoc[]

Unresolved directive in <stdin> - include::toolchain/venvs.adoc[]

Unresolved directive in <stdin> - include::toolchain/django.adoc[]

Unresolved directive in <stdin> - include::toolchain/maintainable-applications.adoc[]

Unresolved directive in <stdin> - include::toolchain/tools.adoc[]

Unresolved directive in <stdin> - include::toolchain/external_tools.adoc[]

Unresolved directive in <stdin> - include::toolchain/summary.adoc[]

Déploiement

Et sécurisation du serveur.

Unresolved directive in <stdin> - include::deploy/index.adoc[]

Unresolved directive in <stdin> - include::deploy/centos.adoc[]

Unresolved directive in <stdin> - include::deploy/database.adoc[]

Modélisation

Dans ce chapitre, on va parler de plusieurs concepts utiles au développement rapide dune application. On parlera de modélisation, de migrations, dadministration auto-générée.

Unresolved directive in <stdin> - include::django/models.adoc[]

Unresolved directive in <stdin> - include::django/querysets.adoc[]

Unresolved directive in <stdin> - include::django/forms.adoc[]

Unresolved directive in <stdin> - include::django/migrations.adoc[]

Unresolved directive in <stdin> - include::django/mvc.adoc[]

Unresolved directive in <stdin> - include::django/logging.adoc[]

Unresolved directive in <stdin> - include::django/admin.adoc[]

Go Live !

Pour commencer, nous allons nous concentrer sur la création dun site ne contenant quune seule application, même si en pratique le site contiendra déjà plusieurs applications fournies pas django, comme nous le verrons plus loin.

Pour prendre un exemple concret, nous allons créer un site permettant de gérer des listes de souhaits, que nous appellerons gwift (pour GiFTs and WIshlisTs :)).

La première chose à faire est de définir nos besoins du point de vue de lutilisateur, cest-à-dire ce que nous souhaitons quun utilisateur puisse faire avec lapplication.

Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement effectuer le développement

Unresolved directive in <stdin> - include::gwift/specs.adoc[]

Unresolved directive in <stdin> - include::gwift/models.adoc[]

Unresolved directive in <stdin> - include::gwift/tests.adoc[]

Unresolved directive in <stdin> - include::gwift/key-points.adoc[]

Unresolved directive in <stdin> - include::gwift/refactoring.adoc[]

Unresolved directive in <stdin> - include::gwift/user-management.adoc[]

Unresolved directive in <stdin> - include::gwift/console.adoc[]

Unresolved directive in <stdin> - include::gwift/metamodel.adoc[]

1. Supervision des logs

2. feedbacks utilisateurs

En bonus

Unresolved directive in <stdin> - include::bonus/code-snippets.adoc[]