CAW1 2017 Projet de Félix ROBINET, Eliot HAUTEFEUILLE et Benjamin ESPERON

De Ensiwiki
Aller à : navigation, rechercher
Project schedule.png
Titre du projet Site d'organisation de repas et de partage de recettes
Cadre Projets web
Page principale CAW1_Demonstration_Realisation

Équipe Félix Robinet, Eliot Hautefeuille, Benjamin Esperon
Encadrants Sébastien Viardot


ScreenCast

ScreenCast


Le projet

Le principe du projet est de faire une appli web qui va permettre de faire plusieurs choses :

  • Organiser des événements / repas, où les utilisateurs vont pouvoir définir des plats et l'application va leur fournir une liste de courses qu'ils pourront répartir
  • Pouvoir créer des recettes, les mettre en favori
  • Pouvoir créer une liste de courses personnelles à partir de recettes choisies

Les choix techniques

Le projet est construit sur Django 1.11 et sur Python3.5.

Nous avons décidé de favoriser les Class Based Views afin d'avoir un code très léger et efficace. Pour rendre le projet responsive, nous utilisons bootstrap.

Afin de réutiliser le maximum de code, nous avons poussé au maximum les possibilités d'héritage des templates, afin de définir des "sous-vues" générales qui peuvent être réutilisées un peu partout.

L'intégration continue est basée sur les Gitlab Pipelines, lancés par Gitlab Runner. Les tests sont développés avec les capacités de tests de Django et Selenium.

Selenium

A noter que nous avons rencontrés plusieurs problèmes vis à vis de la mise en place de l'integration continue des test selenium sur notre serveur privé. Pour des raisons techniques diverses, nous avons donc décidée d'exclure les tests selenium de notre pipeline de tests. Nous avons effectué ces tests sur une machine spécifique, ce qui implique que si vous désirez lancer les test seleniums avec une configuration différente il est possible que vous rencontriez des erreurs. Cependant nous pouvons vous garantir avoir passé tous les tests avant de vous soumettre le rendu final. :)

API

Modèle

Notre modèle est entièrement APIsé grâce à la librairie Python Django REST Framework. Celui-ci permet à n'importe quel utilisateur de récupérer des informations sur les recettes ou les evenements contenus dans la base de données.

Seulement l'admin à le droit de faire des POST dans cette api.

Utilisation d'un webservice

Nous avons décidé d'intégrer des valeurs nutritionnelles a l’intérieur de nos recettes, grâce à l'API gratuite FatSecret.

Nous utilisons une librairie Python qui wrap les appels afin de pouvoir l'utiliser plus facilement: Au lieu de passer par la lib requests de python et de définir les headers nécéssaires pour faire du OAuth 1.0, le wrapper gère automatiquement cette étape.

Le principe est simple :

Chaque ingrédient dépend d'un produit créé précédemment, et ce produit est créé à partir de valeurs nutritionnelles récupérées via FatSecret.

Il reste du coup pour chaque recette à faire un produit en croix pour chaque ingrédient afin de récupérer les valeurs nutritionnelles en questions.


L'API FatSecret étant en anglais, il a donc fallu wrapper les appels avec une API de traduction, le mécanisme est donc le suivant :

Utilisateur -(Ajax)-> BringEat

Recherche d'un produit

BringEat -(Requête REST Python)-> FatSecret

Traduction de la recherche en anglais, puis recherche du produit

FatSecret -(Requête REST Python)-> BringEat

Renvoi de la liste des produits

BringEat -(Ajax)-> Utilisateur

Traitement de la liste des produits, et renvoi en JSON, intégration dans un formulaire

Les choix de conception

Cas d'utilisation

Hierarchie users

FEBW usecase hierarchy.png

Non connecté

FEBW nonconnecte.png

User

FEBW User.png

Auteur

FEBW Auteur.png

Admin Evenement

FEBW Adminevt.png


Membre evenement

FEBW Membreevt.png


Modèle de données

FEBW Mldv2.png