Merge branch 'dev-intro' into 'master'

Dev intro

Proposition de modification de l'intro

See merge request !2
This commit is contained in:
Cédric 2016-01-07 12:48:31 +01:00
commit 3f11b16b91
3 changed files with 72 additions and 44 deletions

View File

@ -4,16 +4,16 @@ Environnement
Avant de démarrer le développement, il est nécessaire de passer un peu de temps sur la configuration de l'environnement.
Nous allons utiliser `Python <https://www.python.org/>`_, disponible sur la majorité des distributions GNU/Linux, ainsi que sur MacOS, dans des versions parfois différentes. Pour les utilisateurs de Windows, il sera sans doute nécessaire d'installer une version de l'interpréteur et de configurer la variable *PATH* pour votre utilisateur. Ajoutez-y ``virtualenv`` afin de créer un `environnement virtuel <http://sametmax.com/les-environnement-virtuels-python-virtualenv-et-virtualenvwrapper/>`_, puis ``virtualenvwrapper`` pour en faciliter la gestion, et les prérequis seront remplis.
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 devrons donc être adaptées si vous êtes dans un autre environnemnet.
Création de l'environnement
===========================
Virtualenv
==========
Commencez par créer un environnement virtuel, afin d'y stocker les dépendances. Vérifiez dans votre fichier ``~/.bashrc`` (ou tout fichier lancé au démarrage de votre session) que la variable ``WORKON_HOME`` est bien définie. Faites ensuite un ``source`` sur le fichier ``virtualenvwrapper.sh`` (à adapter en fonction de votre distribution):
Nous allons utiliser ``virtualenv`` afin de créer un `environnement virtuel <http://sametmax.com/les-environnement-virtuels-python-virtualenv-et-virtualenvwrapper/>`_ pour python et ``virtualenvwrapper`` pour en faciliter la gestion, et les prérequis seront remplis.
Suivant votre distribution, il sera sans doute nécessaire d'éditer le fichier ``~/.bashrc`` (ou tout fichier lancé au démarrage de votre session) et de vérifier que la variable ``WORKON_HOME`` est bien définie et de faire un ``source`` sur le fichier ``virtualenvwrapper.sh`` (à adapter en fonction de votre distribution):
.. code-block:: shell
@ -26,7 +26,10 @@ Commencez par créer un environnement virtuel, afin d'y stocker les dépendances
L'intérêt de ceci ? Ne pas devoir se soucier de l'emplacement des environnements virtuels, et pouvoir entièrement les découpler des sources sur lesquelles vous travaillez, en plus d'isoler le code, de créer un containeur pour les dépendances et d'être indépendant des librairies tierces déjà installées sur le système.
Lancez ``mkvirtualenv gwift-env``.
Création de l'environnement virtuel
===================================
Commencons par créer un environnement virtuel, afin d'y stocker les dépendances. Lancez ``mkvirtualenv gwift-env``.
.. code-block:: shell
@ -39,33 +42,37 @@ Ceci créera l'arborescence de fichiers suivante, qui peut à nouveau être un p
.. code-block:: shell
$ ls gwift-env
Include/ Lib/ Scripts/
$ ls .virtualenvs/gwift-env
bin include lib
Nous pouvons ensuite l'activer grâce à la commande ``source gwift-env/bin/activate`` avec ``virtualenv`` et ``workon gwift-env`` avec ``virtualenvwrapper``.
A présent, tous les binaires présents dans cet environnement prendront le pas sur les binaires du système. De la même manière, une variable ``PATH`` propre est définie et utilisée, afin que les librairies Python soient stockées dans le répertoire ``gwift-env/Lib/site-packages/``. C'est notamment ici que nous retrouverons le code-source de Django, ainsi que des librairies externes une fois que nous les aurons installées.
Nous pouvons ensuite l'activer grâce à la commande ``workon gwift-env``.
.. code-block:: shell
$ tree sources/ .virtualenvs/
sources/
├── gwift-book
├── gwift-project
└── other-project
.virtualenvs/
├── env-01
└── env-02
$ workon gwift-env
(gwift-env)$
Fichiers sources
================
A présent, tous les binaires présents dans cet environnement prendront le pas sur les binaires du système. De la même manière, une variable ``PATH`` propre est définie et utilisée, afin que les librairies Python y soient stockées. C'est donc dans cet environnement virutel que nous retrouverons le code-source de Django, ainsi que des librairies externes pour python une fois que nous les aurons installées.
Création du répertoire de travail
=================================
Nous commençons par créer le répertoire du projet, à savoir ``gwift-project``.
.. code-block:: shell
$ mkdir gwift-project
$ cd gwift-project
(gwift-env)$ mkdir gwift-project
(gwift-env)$ cd gwift-project
Dans ce répertoire, nous pouvons rajouter les répertoires utiles à la gestion d'un projet:
.. code-block:: shell
(gwift-env)$ mkdir docs requirements
(gwift-env)$ touch docs/README.md
Création du projet Django
=========================
Comme l'environnement est activé, on peut à présent y installer Django. La librairie restera indépendante du reste du système, et ne polluera pas les autres projets.
@ -73,7 +80,7 @@ C'est parti: ``pip install django``!
.. code-block:: shell
$ pip install django
(gwift-env)$ pip install django
Collecting django
Downloading Django-1.8.4-py2.py3-none-any.whl (6.2MB)
100% |################################| 6.2MB 91kB/s eta 0:00:01
@ -82,24 +89,24 @@ C'est parti: ``pip install django``!
Les commandes de création d'un nouveau site sont à présent disponibles, la principale étant ``django-admin startproject``. Par la suite, nous utiliserons ``manage.py``, qui constitue un *wrapper* autour de `django-admin`.
Pour démarrer notre projet, nous lançons ``django-admin startproject gwift``.
Pour démarrer notre projet, nous lançons donc ``django-admin startproject gwift``.
.. code-block:: shell
$ django-admin startproject gwift
(gwift-env)$ django-admin startproject gwift
Cette action aura pour effet de créer un nouveau dossier ``gwift``, dans lequel on trouve la structure suivante:
Cette action a pour effet de créer un nouveau dossier ``gwift``, dans lequel on trouve la structure suivante:
.. code-block:: shell
$ tree gwift
(gwift-env)$ tree gwift
gwift
|-- gwift
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| |-- wsgi.py
|-- manage.py
├── gwift
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py
Chacun de ces fichiers sert à:
@ -122,5 +129,26 @@ Au début de chaque fichier, il suffira d'ajouter la ligne ``-r base.txt``, puis
.. code-block:: shell
$ mkdir requirements
$ echo django >> requirements/base.txt
(gwift-env)$ echo django >> requirements/base.txt
Structure finale de l'environnement
===================================
Nous avons donc la strucutre finale pour notre environnement de travail:
.. code-block:: shell
(gwift-env)$ tree ~/gwift-project
gwift-project/
├── docs
│   └── README.md
├── gwift
│   ├── gwift
│   │ ├── __init__.py
│   │ ├── settings.py
│   │ ├── urls.py
│   │ └── wsgi.py
│   └── manage.py
└── requirements
└── base.txt

View File

@ -38,14 +38,14 @@ Cette application servira à structurer les listes de souhaits, les éléments q
.. code-block:: shell
$ cd gwift
$ python manage.py startapp wish
(gwift-env)$ cd gwift
(gwift-env)$ python manage.py startapp wish
Résultat? Django nous a créé un répertoire ``wish``, dans lequel on trouve les fichiers suivants:
.. code-block:: shell
$ ls -l wish
(gwift-env)$ ls -l wish
admin.py __init__.py migrations models.py tests.py views.py
En résumé, chaque fichier a la fonction suivante:

View File

@ -58,8 +58,8 @@ Attention que celle-ci ne permet pas de vérifier que le code est **bien** test
.. code-block:: shell
$ coverage run --source "." manage.py test
$ coverage report
(gwift-env)$ coverage run --source "." manage.py test
(gwift-env)$ coverage report
Name Stmts Miss Cover
---------------------------------------------
@ -76,7 +76,7 @@ Attention que celle-ci ne permet pas de vérifier que le code est **bien** test
---------------------------------------------
TOTAL 89 32 64%
$ coverage html
(gwift-env)$ coverage html
Ceci vous affichera non seulement la couverture de code estimée, et générera également vos fichiers sources avec les branches non couvertes. Pour gagner un peu de temps, n'hésitez pas à créer un fichier ``Makefile`` à la racine du projet. L'exemple ci-dessous permettra, grâce à la commande ``make coverage``, d'arriver au même résultat que ci-dessus:
@ -117,13 +117,13 @@ Dans l'immédiat, nous nous contenterons d'avoir des modules documentés (quelle
.. code-block:: shell
pip install flake8_docstrings
(gwift-env)$ pip install flake8_docstrings
Lancez ensuite `flake8` avec la commande `flake8 . --exclude="migrations"`. Sur notre projet (presque) vide, le résultat sera le suivant:
.. code-block:: shell
$ flake8 . --exclude="migrations"
(gwift-env)$ flake8 . --exclude="migrations"
.\gwift\manage.py:1:1: D100 Missing docstring in public module
.\gwift\gwift\__init__.py:1:1: D100 Missing docstring in public module
.\gwift\gwift\urls.py:1:1: D400 First line should end with a period (not 'n')