From f9a1002502adcc7553cb7c63cc85648acf87814f Mon Sep 17 00:00:00 2001 From: Fred Date: Wed, 14 Oct 2015 18:42:37 +0200 Subject: [PATCH] rewrite a little of step-03 --- .gitignore | 1 + book/README.md | 10 ++- book/SUMMARY.md | 8 +- book/gwift/models.md | 24 ++++++ book/gwift/specs.md | 113 +++++++++++++++++++++++++++ book/step-03-before-going-further.md | 2 + specs.md | 68 ++++++++-------- 7 files changed, 189 insertions(+), 37 deletions(-) create mode 100644 book/gwift/models.md create mode 100644 book/gwift/specs.md diff --git a/.gitignore b/.gitignore index be8f1a7..fee76e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ _book/ *.swp +*.pdf diff --git a/book/README.md b/book/README.md index e10b99d..e3a71c8 100644 --- a/book/README.md +++ b/book/README.md @@ -1 +1,9 @@ -# Introduction +Introduction +============ + +Pour commencer, nous allons nous concentrer sur la création d'un site ne contenant qu'une 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 l'utilisateur, c'est-à-dire ce que nous souhaitons qu'un utilisateur puisse faire avec l'application. Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement effectuer le développement. + diff --git a/book/SUMMARY.md b/book/SUMMARY.md index 8707e42..922f303 100644 --- a/book/SUMMARY.md +++ b/book/SUMMARY.md @@ -1,6 +1,8 @@ # Summary * [Introduction](README.md) - * [step-01](step-01-prerequisites.md) - * [step-02](step-02-create-django-app.md) - * [step-03](step-03-before-going-further.md) + * [Avant-propos](intro/step-01-prerequisites.md) + * [Une application Django](intro/step-02-create-django-app.md) + * [Avant d'aller plus loin](intro/step-03-before-going-further.md) +* [Gwift](gwift/specs.md) + * [Modèle](gwift/models.md) diff --git a/book/gwift/models.md b/book/gwift/models.md new file mode 100644 index 0000000..1408829 --- /dev/null +++ b/book/gwift/models.md @@ -0,0 +1,24 @@ +# Modélisation + +Comme on l'a vu dans la description des fonctionnalités, on va *grosso modo* avoir besoin des éléments suivants: + + * Des listes de souhaits + * Des éléments qui composent ces listes + * Des parts pouvant composer chacun de ces éléments + * Des utilisateurs pour gérer tout ceci. + +Nous proposons dans un premier temps d'éluder la gestion des utilisateurs, et de simplement se concentrer sur les fonctionnalités principales. + +## Listes de souhaits + +Comme déjà décrit précédemment, les listes de souhaits peuvent s'apparenter simplement à un objet ayant un nom et une description. Pour rappel, voici ce qui avait été défini dans les spécifications: + + * un identifiant + * un identifiant externe + * un nom + * une description + * le propriétaire + * une date de création + * une date de modification + +Ouvrez le fichier `wish/models.py` pour y définir ces différents champs. diff --git a/book/gwift/specs.md b/book/gwift/specs.md new file mode 100644 index 0000000..69cd39b --- /dev/null +++ b/book/gwift/specs.md @@ -0,0 +1,113 @@ +Single App +========== + +Pour commencer, nous allons nous concentrer sur la création d'un site ne contenant qu'une 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 l'utilisateur, c'est-à-dire ce que nous souhaitons qu'un utilisateur puisse faire avec l'application. + +Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement effectuer le développement + +Besoins utilisateur du site gwift +--------------------------------- + +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/step-03-before-going-further.md b/book/step-03-before-going-further.md index 4f2fe3d..deb0ba6 100644 --- a/book/step-03-before-going-further.md +++ b/book/step-03-before-going-further.md @@ -72,3 +72,5 @@ $ flake8 . --exclude="migrations" ``` Bref, on le voit: nous n'avons que très peu de modules, et aucun d'eux n'est commenté. + +En plus de cette méthode, Django permet également de rendre la documentation accessible depuis son interface d'administration. diff --git a/specs.md b/specs.md index 69cd39b..d0cfbe5 100644 --- a/specs.md +++ b/specs.md @@ -1,24 +1,18 @@ -Single App -========== - -Pour commencer, nous allons nous concentrer sur la création d'un site ne contenant qu'une 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 l'utilisateur, c'est-à-dire ce que nous souhaitons qu'un utilisateur puisse faire avec l'application. - -Ensuite, nous pourrons traduire ces besoins en fonctionnalités et finalement effectuer le développement +Gwift +===== Besoins utilisateur du site gwift --------------------------------- 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. @@ -36,16 +30,22 @@ Pour gérer les utilisateurs, nous utiliserons ce que Django met par défaut à ### Gestion des listes +Les listes seront gérées par leur créateur. Plusieurs pages seront développées pour permettre aux utilisateurs de: + + 1. Créer une liste + 1. Ajouter des éléments à cette liste. + #### 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 + + * un identifiant + * un identifiant externe + * un nom + * une description + * le propriétaire + * une date de création + * une date de modification #### Fonctionnalités @@ -60,17 +60,18 @@ Les données suivantes doivent être associées à une liste: #### 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. + + * 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 @@ -88,11 +89,12 @@ Les données suivantes peuvent être associées à un souhait: #### 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 + + * 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