From 5a4d2684b484bdd6ecc53f13e89c1db455f97bcd Mon Sep 17 00:00:00 2001 From: Declerfayt Cedric Date: Thu, 10 Dec 2015 17:32:20 +0100 Subject: [PATCH 1/3] Add unkown user --- source/models.rst | 44 +++++++++++++++++++++++++++++++++++++++----- specs.md | 3 ++- 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/source/models.rst b/source/models.rst index cb86403..bac301f 100644 --- a/source/models.rst +++ b/source/models.rst @@ -77,10 +77,10 @@ Au niveau de notre modélisation: * La propriété ``external_id`` est de type ``UUIDField``. Lorsqu'une nouvelle instance sera instanciée, cette propriété prendra la valeur générée par la fonction ``uuid.uuid4()``. *A priori*, chacun des types de champs possède une propriété ``default``, qui permet d'initialiser une valeur sur une nouvelle instance. ******** -Elements +Souhaits ******** -Nos éléments ont besoin des propriétés suivantes: +Nos souhaits ont besoin des propriétés suivantes: * un identifiant * identifiant de la liste @@ -100,7 +100,7 @@ Après implémentation, cela ressemble à ceci: # wish/models.py - class Item(models.Model): + class Wish(models.Model): wishlist = models.ForeignKey(Wishlist) name = models.CharField(max_length=255) @@ -125,7 +125,17 @@ A nouveau, que peut-on constater ? Parts ******* -Les parts constituent la dernière étape de notre modélisation. Elles permettent à un utilisateur de participer au souhait émis par un autre utilisateur. Pour les modéliser, un part est liée d'un côté à un souhait, et d'autre part à un utilisateur. Cela nous donne ceci: + +Les parts ont besoins des propriétés suivantes: + + * un identifiant + * identifiant du souhait + * identifiant de l'utilisateur si connu + * identifiant de la personne si utilisateur non connu + * un commentaire + * une date de réalisation + +Elles constituent la dernière étape de notre modélisation. Elles permettent à un utilisateur de participer au souhait émis par un autre utilisateur. Pour les modéliser, un part est liée d'un côté à un souhait, et d'autre part à un utilisateur. Cela nous donne ceci: .. code-block:: python @@ -133,11 +143,16 @@ Les parts constituent la dernière étape de notre modélisation. Elles permette class Part(models.Model): - wish = models.ForeignKey('Wish') + wish = models.ForeignKey(Wish) user = models.ForeignKey(User) + unknown_user = models.ForeignKey(UnknownUser) + comment = models.TextField() + done_at = models.DateTimeField() La classe ``User`` référencée au début du snippet correspond à l'utilisateur géré par Django. Cette instance est accessible à chaque requête transmise au serveur, et est accessible grâce à l'objet ``request.user``, transmis à chaque fonction ou *Class-based-view*. C'est un des avantages d'un framework tout intégré: il vient *batteries-included* et beaucoup de détails ne doivent pas être pris en compte. Pour le moment, nous nous limiterons à ceci. Par la suite, nous verrons comment améliorer la gestion des profils utilisateurs, comment y ajouter des informations et comment gérer les cas particuliers. +La classe ``UnknownUser`` permet de représenter un utilisateur non enregistré sur le site et est définie au point suivant. + Maintenant que la classe ``Part`` est définie, il nous est également possible de calculer le pourcentage d'avancement pour la réalisation d'un souhait. Pour cela, il nous suffit d'ajouter une nouvelle méthode au niveau de la classe ``Wish``, qui va calculer le nombre de parts déjà promises, et nous donnera l'avancement par rapport au nombre total de parts disponibles: .. code-block:: python @@ -158,6 +173,25 @@ Maintenant que la classe ``Part`` est définie, il nous est également possible L'attribut ``@property`` va nous permettre d'appeler directement la méthode ``percentage()`` comme s'il s'agissait d'une propriété de la classe, au même titre que les champs ``number_of_parts`` ou ``numbers_available``. Attention que ce type de méthode fera un appel à la base de données à chaque appel. Il convient de ne pas surcharger ces méthodes de connexions à la base: sur de petites applications, ce type de comportement a très peu d'impacts. Ce n'est plus le cas sur de grosses applications ou sur des méthodes fréquemment appelées. Il convient alors de passer par un mécanisme de **cache**, que nous aborderons plus loin. +********************* +Utilisateurs inconnus +********************* + +Pour chaque réalisation d'un souhait par quelqu'un, il est nécessaire de sauver les données suivantes, même si l'utilisateur n'est pas enregistré sur le site: + + * un identifiant + * un nom + * une adresse email + +Ce qui donne après implémentation: + +.. code-block:: python + + class UnkownUser(models.Model): + + name = models.CharField(max_length=255) + email = models.CharField(max_length=255) + ********* A retenir ********* diff --git a/specs.md b/specs.md index d0cfbe5..5df473d 100644 --- a/specs.md +++ b/specs.md @@ -107,9 +107,10 @@ Les données suivantes peuvent être associées à une réalisation de souhait: #### Modélisation Les données suivantes peuvent être associées à une personne réalisant un souhait: + * un identifiant * un nom -* une adresse email facultative +* une adresse email #### Fonctionnalités From 39a81476db9a81ecbb92215ce365daf073bb5bde Mon Sep 17 00:00:00 2001 From: Declerfayt Cedric Date: Thu, 10 Dec 2015 17:42:38 +0100 Subject: [PATCH 2/3] Add how much part must be created by wish --- source/models.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/models.rst b/source/models.rst index bac301f..71e8fce 100644 --- a/source/models.rst +++ b/source/models.rst @@ -135,13 +135,15 @@ Les parts ont besoins des propriétés suivantes: * un commentaire * une date de réalisation -Elles constituent la dernière étape de notre modélisation. Elles permettent à un utilisateur de participer au souhait émis par un autre utilisateur. Pour les modéliser, un part est liée d'un côté à un souhait, et d'autre part à un utilisateur. Cela nous donne ceci: +Elles constituent la dernière étape de notre modélisation et représente la réalisation d'un souhait. Il y aura autant de part d'un souhait que le nombre de souhait à réaliser fois le nombre de part. + +Elles permettent à un utilisateur de participer au souhait émis par un autre utilisateur. Pour les modéliser, un part est liée d'un côté à un souhait, et d'autre part à un utilisateur. Cela nous donne ceci: .. code-block:: python from django.contrib.auth.models import User - class Part(models.Model): + class WishPart(models.Model): wish = models.ForeignKey(Wish) user = models.ForeignKey(User) From 5c50cef24d680b6e86fda058e665f6852647566f Mon Sep 17 00:00:00 2001 From: Fred Date: Wed, 16 Dec 2015 13:28:46 +0100 Subject: [PATCH 3/3] add sessions.rst --- source/views/sessions.rst | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 source/views/sessions.rst diff --git a/source/views/sessions.rst b/source/views/sessions.rst new file mode 100644 index 0000000..33f1d6f --- /dev/null +++ b/source/views/sessions.rst @@ -0,0 +1,4 @@ +Sessions +======== + +[Ne pas oublier d'en parler...] \ No newline at end of file