diff --git a/.gitignore b/.gitignore index dedff22..b0ad325 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ _book/ *.swp *.pdf *.*~ +build +*.log diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..3eac214 --- /dev/null +++ b/Makefile @@ -0,0 +1,192 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +PAPER = +BUILDDIR = build + +# User-friendly check for sphinx-build +ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) +$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) +endif + +# Internal variables. +PAPEROPT_a4 = -D latex_paper_size=a4 +PAPEROPT_letter = -D latex_paper_size=letter +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source + +.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " dirhtml to make HTML files named index.html in directories" + @echo " singlehtml to make a single large HTML file" + @echo " pickle to make pickle files" + @echo " json to make JSON files" + @echo " htmlhelp to make HTML files and a HTML help project" + @echo " qthelp to make HTML files and a qthelp project" + @echo " applehelp to make an Apple Help Book" + @echo " devhelp to make HTML files and a Devhelp project" + @echo " epub to make an epub" + @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" + @echo " latexpdf to make LaTeX files and run them through pdflatex" + @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" + @echo " text to make text files" + @echo " man to make manual pages" + @echo " texinfo to make Texinfo files" + @echo " info to make Texinfo files and run them through makeinfo" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " xml to make Docutils-native XML files" + @echo " pseudoxml to make pseudoxml-XML files for display purposes" + @echo " linkcheck to check all external links for integrity" + @echo " doctest to run all doctests embedded in the documentation (if enabled)" + @echo " coverage to run coverage check of the documentation (if enabled)" + +clean: + rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +dirhtml: + $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." + +singlehtml: + $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml + @echo + @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." + +pickle: + $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle + @echo + @echo "Build finished; now you can process the pickle files." + +json: + $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json + @echo + @echo "Build finished; now you can process the JSON files." + +htmlhelp: + $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp + @echo + @echo "Build finished; now you can run HTML Help Workshop with the" \ + ".hhp project file in $(BUILDDIR)/htmlhelp." + +qthelp: + $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp + @echo + @echo "Build finished; now you can run "qcollectiongenerator" with the" \ + ".qhcp project file in $(BUILDDIR)/qthelp, like this:" + @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Gwift.qhcp" + @echo "To view the help file:" + @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Gwift.qhc" + +applehelp: + $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp + @echo + @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." + @echo "N.B. You won't be able to view it unless you put it in" \ + "~/Library/Documentation/Help or install it in your application" \ + "bundle." + +devhelp: + $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp + @echo + @echo "Build finished." + @echo "To view the help file:" + @echo "# mkdir -p $$HOME/.local/share/devhelp/Gwift" + @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Gwift" + @echo "# devhelp" + +epub: + $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub + @echo + @echo "Build finished. The epub file is in $(BUILDDIR)/epub." + +latex: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo + @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." + @echo "Run \`make' in that directory to run these through (pdf)latex" \ + "(use \`make latexpdf' here to do that automatically)." + +latexpdf: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through pdflatex..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +latexpdfja: + $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex + @echo "Running LaTeX files through platex and dvipdfmx..." + $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja + @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." + +text: + $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text + @echo + @echo "Build finished. The text files are in $(BUILDDIR)/text." + +man: + $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man + @echo + @echo "Build finished. The manual pages are in $(BUILDDIR)/man." + +texinfo: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo + @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." + @echo "Run \`make' in that directory to run these through makeinfo" \ + "(use \`make info' here to do that automatically)." + +info: + $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo + @echo "Running Texinfo files through makeinfo..." + make -C $(BUILDDIR)/texinfo info + @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + +doctest: + $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest + @echo "Testing of doctests in the sources finished, look at the " \ + "results in $(BUILDDIR)/doctest/output.txt." + +coverage: + $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage + @echo "Testing of coverage in the sources finished, look at the " \ + "results in $(BUILDDIR)/coverage/python.txt." + +xml: + $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml + @echo + @echo "Build finished. The XML files are in $(BUILDDIR)/xml." + +pseudoxml: + $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml + @echo + @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/README.md b/README.md index 09d31db..00bb3b2 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,8 @@ # Installation -## Prérequis +Ce livre peut être compilé avec [Sphinx](...). -`sudo aptitude install nodejs`. -Après cela, lance `npm install` qui ira récupérer le contenu du fichier `package.json`. +Les lexers Pygments disponibles se trouvent sur cette page: http://pygments.org/docs/lexers/. Les principaux utilisés seront: -## Editeur - -Il existe un éditeur pour Gitbook, qui offre pas mal de fonctionnalités sans avoir à tripatouiller la documentation; il est disponible à [l'adresse suivante](https://www.gitbook.com/editor/linux). - -Pour l'installation, un petit `dpkg -i gitbook-editor.x.y.z.deb`. -Seul soucis: un compte Gitbook est requis. - -# Initialisation - -L'initiation du contenu peut se faire une fois que le module `gitbook-cli`aura été installé, grâce à la commande `nodejs node_modules/gitbook-cli/bin/gitbook.js init `. -Cette commande se base sur le fichier `SUMMARY.md` pour générer l'arborescence correcte des fichiers (vides, dans un premier temps). - -# Compilation - - * `nodejs node_modules/gitbook-cli/bin/gitbook.js build` - * `nodejs node_modules/gitbook-cli/bin/gitbook.js serve` - -## Formats supportés - -Pour les formats autres que HTML (PDF, Mobi & ePub), il faut installer `Calibre` grâce à un `aptitude install Calibre`. Attention qu'il y a un bon petit 300MB de dépendances... + * `shell` + * `python` diff --git a/book/SUMMARY.md b/book/SUMMARY.md deleted file mode 100644 index 7e30415..0000000 --- a/book/SUMMARY.md +++ /dev/null @@ -1,13 +0,0 @@ -# Summary - -* [Introduction](README.md) - * [Avant-propos](intro-01-prerequisites.md) - * [Une application Django](intro-02-create-django-app.md) - * [Avant d'aller plus loin](intro-03-before-going-further.md) -* [Gwift](gwift/README.md) - * [Besoins](gwift/specs.md) - * [Modèle](gwift/01-models.md) - * [Vues](gwift/02-views.md) - * [URLs](gwift/03-urls.md) - * [Forms](gwift/05-forms.md) - * [Administration](gwift/06-admin.md) diff --git a/book/gwift/03-urls.md b/book/gwift/03-urls.md deleted file mode 100644 index ffceb7d..0000000 --- a/book/gwift/03-urls.md +++ /dev/null @@ -1,28 +0,0 @@ -URLs -==== - -La gestion des URLs permet *grosso modo* d'assigner une adresse paramétrée ou non à une fonction Python. La manière simple consiste à modifier le fichier `gwift/settings.py` pour y ajouter nos correspondances. Par défaut, le fichier ressemble à ceci: - -```python -# gwift/urls.py - -from django.conf.urls import include, url -from django.contrib import admin - -urlpatterns = [ - url(r'^admin/', include(admin.site.urls)), -] -``` - -Le champ `urlpatterns` associe un ensemble d'adresses à des fonctions. Dans le fichier *nu*, seul le *pattern* `^admin/` [^1] est défini, et inclut toutes les adresses qui sont définies dans le fichier `admin.site.urls`. Reportez-vous à l'installation de l'environnement: ce fichier contient les informations suivantes: - -[^1] Rappelez-vous de vos expressions régulières: `^` indique le début de la chaîne. - -```python -# admin.site.urls.py - -``` - -## Reverse - - diff --git a/book/gwift/specs.md b/book/gwift/specs.md deleted file mode 100644 index 1043fa5..0000000 --- a/book/gwift/specs.md +++ /dev/null @@ -1,108 +0,0 @@ -Besoins -======= - -[A remplir] - - -Besoins utilisateur -------------------- - -Nous souhaitons développer un site où un utilisateur donné peut créer une liste contenant des souhaits et où d'autres utilisateurs, authentifiés ou non, peuvent choisir les souhaits qu'ils souhaitent réaliser. -Il sera nécessaire de s'authentifier pour : - - 1. Créer une liste associée à l'utilisateur en cours - 1. Ajouter un nouvel élément à une liste - -Il ne sera pas nécessaire de s'authentifier pour : - 1. Faire une promesse d'offre pour un élément appartenant à une liste, associée à un utilisateur. - -L'utilisateur ayant créé une liste pourra envoyer un email directement depuis le site aux personnes avec qui il souhaite partager sa liste, cet email contenant un lien permettant d'accéder à cette liste. - -A chaque souhait, on pourrait de manière facultative ajouter un prix. Dans ce cas, le souhait pourrait aussi être subdivisé en plusieurs parts, de manière à ce que plusieurs personnes puissent participer à sa réalisation. - -Un souhait pourrait aussi être réalisé plusieurs fois. - -Besoins fonctionnels du site gwift ----------------------------------- - -### Gestion des utilisateurs - -Pour gérer les utilisateurs, nous utiliserons ce que Django met par défaut à notre disposition. - -### Gestion des listes - -#### Modèlisation - -Les données suivantes doivent être associées à une liste: -* un identifiant -* un identifiant externe -* un nom -* une description -* le propriétaire -* une date de création -* une date de modification - -#### Fonctionnalités - - 1. Un utilisateur authentifié doit pouvoir créer, modifier, désactiver et supprimer une liste dont il est le propriétaire - 1. Un utilisateur doit pouvoir associer ou retirer des souhaits à une liste dont il est le propriétaire - 1. Il faut pouvoir accéder à une liste, avec un utilisateur authentifier ou non, *via* son identifiant externe - 1. Il faut pouvoir envoyer un email avec le lien vers la liste, contenant son identifiant externe - 1. L'utilisateur doit pouvoir voir toutes les listes qui lui appartiennent - -### Gestion des souhaits - -#### Modélisation - -Les données suivantes peuvent être associées à un souhait: -* un identifiant -* identifiant de la liste -* un nom -* une description -* le propriétaire -* une date de création -* une date de modification -* une image -* un nombre (1 par défaut) -* un prix facultatif -* un nombre de part facultatif, si un prix est fourni. - -#### Fonctionnalités - - 1. Un utilisateur authentifié doit pouvoir créer, modifier, désactiver et supprimer un souhait dont il est le propriétaire. - 1. On ne peut créer un souhait sans liste associée - 1. Il faut pouvoir fractionner un souhait uniquement si un prix est donné. - 1. Il faut pouvoir accéder à un souhait, avec un utilisateur authentifié ou non. - 1. Il faut pouvoir réaliser un souhait ou une partie seulement, avec un utilisateur authentifié ou non. - 1. Un souhait en cours de réalisation et composé de différente part ne peut plus être modifié. - 1. Un souhait en cours de réalisation ou réalisé ne peut plus être supprimé. - 1. On peut modifier le nombre de fois qu'un souhait doit être réalisé dans la limite des réalisations déjà effectuées. - -### Gestion des réalisations de souhaits - -#### Modélisation - -Les données suivantes peuvent être associées à une réalisation de souhait: -* identifiant du souhait -* identifiant de l'utilisateur si connu -* identifiant de la personne si utilisateur non connu -* un commentaire -* une date de réalisation - -#### Fonctionnalités - - 1. L'utilisateur doit pouvoir voir si un souhait est réalisé, en partie ou non. - 1. L'utilisateur doit pouvoir voir la ou les personnes ayant réaliser un souhait. - 1. Il y a autant de réalisation que de parts de souhait réalisées ou de nombre de fois que le souhait est réalisé. - -### Gestion des personnes réalisants les souhaits et qui ne sont pas connues - -#### Modélisation - -Les données suivantes peuvent être associées à une personne réalisant un souhait: -* un identifiant -* un nom -* une adresse email facultative - -#### Fonctionnalités - diff --git a/book/intro-02-create-django-app.md b/book/intro-02-create-django-app.md deleted file mode 100644 index a801323..0000000 --- a/book/intro-02-create-django-app.md +++ /dev/null @@ -1,56 +0,0 @@ -Une application Django -====================== - -Comme on l'a vu ci-dessus, `django-admin` permet de créer un nouveau projet. Django fait une distinction entre un **projet** et une **application**: - - * Projet: ensemble des applications, paramètres, pages HTML, middlwares, dépendances, ... qui font que votre code fait ce qu'il est sensé faire. - * Application: *contexte* éventuellement indépendant, permettant d'effectuer une partie isolée de ce que l'on veut faire. - -Pour `gwift`, on va notamment avoir une application pour la gestion des listes de souhaits et des éléments, une deuxième application pour la gestion des utilisateurs, voire une troisième application qui gérera les partages entre utilisateurs et listes. - -On voit bien ici le principe de **contexte**: l'application viendra avec son modèle, ses tests, ses vues, son paramétrage, ... Et pourra éventuellement être réutilisée dans un autre projet. C'est en ça que consistent les [paquets Django](https://www.djangopackages.com/) déjà disponibles: ce sont simplement de petites applications empaquetées pour être réutilisables (eg. [Django-Rest-Framework](https://github.com/tomchristie/django-rest-framework), [Django-Debug-Toolbar](https://github.com/django-debug-toolbar/django-debug-toolbar), ...). - -manage.py ---------- - -Comme expliqué un peu plus haut, le fichier `manage.py` est un *wrapper* sur les commandes `django-admin`. A partir de maintenant, nous n'utiliserons plus que celui-là pour tout ce qui touchera à la gestion de notre projet: - - * `manage.py check` pour vérifier que votre projet ne rencontre aucune erreur - * `manage.py runserver` pour lancer un serveur de développement - * `manage.py test` pour découvrir les tests unitaires disponibles et les lancer. - -La liste complète peut être affichée avec `manage.py help`. Vous remarquerez que ces commandes sont groupées: - - * **auth**: création d'un nouveau super-utilisateur, changer le mot de passe pour un utilisateur existant. - * **django**: vérifier la *compliance* du projet, lancer un *shell*, *dumper* les données de la base, effectuer une migration du schéma, ... - * **sessions**: suppressions des sessions en cours - * **staticfiles**: gestion des fichiers statiques et lancement du serveur de développement. - -Nous verrons plus tard comment ajouter de nouvelles commandes. - -Structure d'une application ---------------------------- - -Maintenant que l'on a vu à quoi servait `manage.py`, on peut créer notre nouvelle application grâce à la commande `manage.py startapp