➔ Documentation Postman du projet Epic Events
- Informations générales
- Fonctionnalités
- Liste pré-requis
- Création environnement
- Activation environnement
- Installation des librairies
- Installation du SGBD MySQL
- Installation et chargement de la base de données MySQL
- Connecter l'application à la base de données MySQL
- Installation des variables d'environnement
- Administration opérations CRUD et gestionnaires de commmandes
- Exécution de l'application
- Tests avec Pyest
- Tests de couverture de code avec Coverage
- Monitoring avec Sentry
- Rapport avec flake8
- Informations importantes sur les différents fichiers et dossiers
- Auteur et contact
- Application conçu pour faciliter une collaboration efficace entre les équipes chez Epic Events de la gestion de la relation client CRM (Customer Relationship Management).
- L'objectif principal est de mettre en place une base de données qui permette de stocker et de manipuler de manière sécurisée les informations des clients, ainsi que les contrats et les événements.
- Application Python, incluant la journalisation avec Sentry.
Note : Plusieurs besoins de l'application Epic Events ont été mis en place.
- Chaque collaborateur doit avoir ses identifiants pour utiliser la plateforme.
- Chaque collaborateur est associé à un rôle (suivant son département).
- La plateforme doit permettre de stocker et de mettre à jour les informations sur les clients, les contrats et les événements.
- Tous les collaborateurs doivent pouvoir accéder à tous les clients, contrats et événements en lecture seule.
Créer
,mettre à jour
etsupprimer
des collaborateurs dans le système CRM.Créer
etmodifier
tous les contrats.Filtrer l’affichage des événements
: afficher tous les événements qui n’ont pas de « support » associé.Modifier
des événements (pour associer un collaborateur support à l’événement).
Créer
des clients (le client leur sera automatiquement associé).Mettre à jour
les clients dont ils sont responsables.Modifier
etmettre à jour
les contrats des clients dont ils sont responsables.Filtrer l’affichage des contrats
: afficher tous les contrats qui ne sont pas encore signés, ou qui ne sont pas encore entièrement payés.Créer
un événement pour un de leurs clients qui a signé un contrat.
Filtrer l’affichage des événements
: afficher uniquement les événements qui leur sont attribués.Mettre à jour
les événements dont ils sont responsables.
Retour en haut 🡅
- Opérations d'administration et de gestion des utilisateurs, des clients, des contrats et des événements.
- Visualisation des informations et données des utilisateurs, des clients, des contrats et événements.
Note : Testé sous Windows 10 Professionnel - Python 3.12.0
Retour en haut 🡅
- Un compte Sentry ➔ https://sentry.io/welcome/
- Un compte Postman ➔ https://www.postman.com/
Application conçue avec les technologies suivantes :
-
Python v3.12.0 choisissez la version adaptée à votre ordinateur et système.
-
Python est disponible à l'adresse suivante ➔ https://www.python.org/downloads/
-
Django version 4.2.7 ➔ Documentation Django
-
MySQL version 8.0 ➔ Documentation MySQL
-
Windows 10 Professionnel
-
Les scripts Python s'exécutent depuis un terminal.
- Pour ouvrir un terminal sur Windows, pressez la touche
windows + r
et entrezcmd
. - Sur Mac, pressez la touche
command + espace
et entrezterminal
. - Sur Linux, vous pouvez ouviri un terminal en pressant les touches
Ctrl + Alt + T
.
- Pour ouvrir un terminal sur Windows, pressez la touche
Retour en haut 🡅
- Installer une version de Python compatible pour votre ordinateur.
- Une fois installer ouvrer le cmd (terminal) placer vous dans le dossier principal (dossier racine).
Taper dans votre terminal :
$ python -m venv env
Note : Un répertoire appelé env doit être créé.
Retour en haut 🡅
- Placez-vous avec le terminal dans le dossier principale (dossier racine).
Pour activer l'environnement virtuel créé, il vous suffit de taper dans votre terminal :
$ env\Scripts\activate.bat
- Ce qui ajoutera à chaque début de ligne de commande de votre terminal
(env)
:
Note : Pour désactiver l'environnement virtuel, il suffit de taper dans votre terminal :
$ deactivate
Retour en haut 🡅
- Le programme utilise plusieurs librairies externes et modules de Python, qui sont répertoriés dans le fichier
requirements.txt
. - Placez-vous dans le dossier où se trouve le fichier
requirements.txt
à la racine du projet, l'environnement virtuel doit être activé. - Pour faire fonctionner l'application, il vous faudra installer les librairies requises.
- À l'aide du fichiers
requirements.txt
mis à disposition.
Taper dans votre terminal la commande :
$ pip install -r requirements.txt
Retour en haut 🡅
-
Pour le projet Epic Events la gestion des données utilise le SGBD MySQL.
-
Installer MySQL qui est disponible à l'adresse suivante ➔ https://dev.mysql.com/downloads/installer/
-
Une fois le programme téléchargé, lancez-le en double-cliquant dessus, autorisez le programme à s'installer.
Note : Je vous conseille de choisir la version Serveur only lors de l'installation.
- Il y a plusieurs manières d'utiliser MySQL soit par
MySQL 8.0 Command Line Client
une fois MySQL installé. - Soit par le terminal CMD de Windows, pour cela il faut créer une variable d'environnement pour ouvrir MySQL d'un terminal CMD.
Note : Je vous conseille de créer une variable d'environnement dans le PATH.
Allez dans Paramères avancés du système
➔ Variables d'environnement
➔ Variable système
➔ Path
Cliquez sur
modifier
ajoutez les variables suivantes :
C:\Program Files\MySQL\MySQL Server 8.0\bin
C:\Program Files\MySQL\MySQL Server 8.0\lib
Après ces modifications vous pourrez utiliser MySQL depuis le terminal CMD.
Retour en haut 🡅
Note : Ces commandes sont fonctionnelles si vous avez installer les variables d'environnement dans le PATH.
- Pour lancer et vous connectez à MySQL
Lancer un terminal CMD, puis taper la commande :
$ mysql -u root -p
- Une fois identifié et connecté créer la base de données avec la commande :
$ mysql> CREATE DATABASE epicevents;
- Pour afficher la base de données MySQL.
Ensuite taper la commande :
$ SHOW DATABASES;
- Pour utiliser la base de données.
On utilise la commande :
$ USE epicevents;
- Charger les tables de la base de données grâce au fichier
EpicEvents.sql
disponible dans le dossier principal du projet.
On utilise la commande :
$ source C:\path\to\directory\Epic Events\EpicEvents.sql
- Quittez MySQL.
Avec la commande :
$ exit;
Retour en haut 🡅
Dans le cadre de Django et de l'utilisation de MySQL, la configuration de Django pour travailler avec une base de données MySQL implique d'établir une connexion à cette dernière.
Après avoir installé MySQL et chargé les tables depuis le fichier EpicEvents.sql, la configuration de l'application Django nécessite la mise en place de cette connexion.
-
Ouvrez un terminal CMD activer l'environnement virtuel.
Exécutez la commande :
$ python manage.py makemigrations
- Ensuite taper la commande :
$ python manage.py migrate
- L'exécution des commandes
makemigrations
etmigrate
génère les tables, y compris celles de jonction (d'associations), dans la base de données. - Ces tables de jonction sont automatiquement créées en fonction de la structure des modèles Django.
À présent, la base de données est chargée et fonctionnelle, prête à être utilisée avec l'application Epic Events.
Vous pouvez vérifier ceci en vous connectant à MySQL.
- Dans un terminal CMD, connectez-vous avec la commande suivante :
$ mysql -u root -p
- Affichez et utilisez la base de données avec les commandes suivantes :
$ SHOW DATABASES;
$ USE epicevents;
- Pour vérifier la création et les structures des tables, utilisez les commandes :
$ SHOW tables;
$ SHOW COLUMNS FROM NomDeLaTable;
- Pour vérifier les données présentes dans une table, utilisez les commandes :
$ SELECT * FROM NomDeLaTable;
# Cette requête est utilisée pour afficher la déclaration SQL complète nécessaire pour recréer une table existante, y compris tous ses indices, contraintes et autres propriétés.
# Cette requête retourne un ensemble de résultats avec une colonne appelée "Create Table" qui contient la déclaration SQL complète de la table spécifiée.
$ SHOW CREATE TABLE NomDeLaTable;
- ERD (Entity-Relationship Diagram) de la base de données Epic Events
Retour en haut 🡅
- Pour utiliser l'application, il faut configurer l'environnement de l'application Epic Events et générer une clé secrète aléatoire pour la configuration de Django.
- De plus, il est nécessaire d'inclure des noms de variables d'environnement préconfigurées.
Il est essentiel de configurer l'environnement de l'application.
- Générez une clé secrète aléatoire pour la configuration de Django et incluez des noms de variables d'environnement préconfigurées.
Utilisez le fichier .env
, voici un exemple d'un fichier .env
une fois configuré avec les paramètres :
DJANGO_SECRET_KEY=%x7xmakyvew_am2-0_n*0inmjkdncucg!^_!i3&==k@d2j+4vo
DB_NAME=epicevents
DB_USER=root
DB_PASSWORD=************
DB_HOST=127.0.0.1
DB_PORT=3306
SENTRY_DSN=https://4e2cb1f62e0cfa9eb9a98f9a@o450496232.ingest.sentry.io/4506596576
À la racine du dossier principal d'Epic Events, exécutez le fichier create_env.bat
➔ (create_env.bat).
Double-cliquez dessus pour enregistrer le fichier .env
à la racine du dossier principal.
Une fois le fichier .env
créé, ouvrez-le avec un éditeur de texte.
- Remplissez les champs avec les valeurs appropriées pour chaque variable d'environnement.
- Ces étapes garantissent une configuration correcte de l'environnement nécessaire au bon fonctionnement de l'application Epic Events.
Note : La clé SENTRY_DSN doit être récupérée dans les paramètres de votre compte Sentry.
Note : Le fichier .env généré doit être configuré avec des valeurs appropriées pour chaque variable d'environnement avant utilisation.
Retour en haut 🡅
La gestion des opérations CRUD peut se faire de plusieurs manières :
- En utilisant des requêtes sous forme de commandes dans MySQL
- En utilisant des commandes dans Le shell Django
- En utilisant le site d'administration de Django à l'adresse suivante ➔ http://127.0.0.1:8000/admin/
Note : Le site d'administration de Django est accessible seulement aux administrateurs et aux utilisateurs de l'équipe gestion.
- Dans ce projet, la mise en place d'un gestionnaire de commandes a été réalisée avec les bibliothèques
Click
etRich
, ainsi qu'avecBaseCommand
de Django. - Ce gestionnaire de commandes fonctionne avec les privilèges administrateur et ne reflète donc pas les permissions et besoins individuels de chaque département.
Note : Les permissions de chaque département sont fonctionnelles et activées, ceci peut être vérifié en utilisant Postman.
Postman ➔ Documentation Postman du projet Epic Events
Les commandes d'administration et de gestion pour utiliser le gestionnaire de commandes.
- Exemple de sortie dans le terminal :
$ python manage.py management_user --display_users
$ python manage.py management_user --create_user
$ python manage.py management_user --create_superuser
$ python manage.py management_user --update_user [id_user]
$ python manage.py management_user --delete_user [id_user]
- Exemple de sortie dans le terminal :
$ python manage.py management_client --display_clients
$ python manage.py management_client --create_client
$ python manage.py management_client --update_client [id_client]
$ python manage.py management_client --delete_client [id_client]
- Exemple de sortie dans le terminal :
$ python manage.py management_contract --display_contracts
$ python manage.py management_contract --create_contract
$ python manage.py management_contract --update_contract [id_contract]
$ python manage.py management_contract --delete_contract [id_contract]
- Exemple de sortie dans le terminal :
$ python manage.py management_event --display_events
$ python manage.py management_event --create_event
$ python manage.py management_event --update_event [id_event]
$ python manage.py management_event --delete_event [id_event]
Retour en haut 🡅
Lancement du serveur Django.
-
Placez-vous avec le terminal CMD dans le dossier principal.
-
Activer l'environnement virtuel et ensuite lancer le serveur Django.
Taper dans votre terminal la commande :
$ python manage.py runserver
- Démarrer le serveur vous permet d'accéder au site d'administration de Django.
- Disponible à l'adresse suivante ➔ http://127.0.0.1:8000/admin/
- Permets d'utiliser les requêtes
GET
,POST
,PUT
,DEL
lors de l'utilisation de Postman.
Note : Le site d'administration de Django est accessible seulement aux administrateurs et aux utilisateurs de l'équipe gestion.
Note navigateur : Les tests ont était fait sur Firefox et Google Chrome.
Retour en haut 🡅
- Nous effectuons des tests unitaires et d'intégrations de plusieurs manières pour garantir la qualité du code.
Note : Pour exécuter les tests il est nécessaire d'avoir activer l'environnement virtuel, mais il n'est pas nécessaire de lancer le serveur Django.
- Utilisation de Pytest pour effectuer les tests. ➔ Documentation Pytest
- Pour exécuter les tests à l'aide de Pytest, utilisez la commande suivante :
$ pytest
(env) C:\Epic Events>pytest
======================================= test session starts =======================================
platform win32 -- Python 3.12.0, pytest-7.4.3, pluggy-1.3.0 -- C:\Epic Events\env\Scripts\python.exe
cachedir: .pytest_cache
django: version: 4.2.7, settings: EpicEvents.settings (from ini)
rootdir: C:\Epic Events
configfile: setup.cfg
plugins: cov-4.1.0, django-4.7.0, time-machine-2.13.0
collected 71 items
contracts/tests.py::TestContractsApp::test_contract_print_details PASSED [1%]
contracts/tests.py::TestContractsApp::test_contract_str_representation PASSED [2%]
contracts/tests.py::TestContractsApp::test_save_method PASSED [4%]
contracts/tests.py::TestContractViewSet::test_all_contracts_details PASSED [5%]
contracts/tests.py::TestContractViewSet::test_contract_details PASSED [7%]
contracts/tests.py::TestContractViewSet::test_contract_details_unauthorized_user PASSED [8%]
contracts/tests.py::TestContractViewSet::test_contracts_list PASSED [9%]
contracts/tests.py::TestContractViewSet::test_create_contract PASSED [11%]
contracts/tests.py::TestContractViewSet::test_create_contract_unauthorized_user PASSED [12%]
contracts/tests.py::TestContractViewSet::test_destroy_contract PASSED [14%]
contracts/tests.py::TestContractViewSet::test_destroy_contract_unauthorized_user PASSED [15%]
contracts/tests.py::TestContractViewSet::test_filtered_contracts PASSED [16%]
contracts/tests.py::TestContractViewSet::test_returns_all_contracts_associated_to_user PASSED [18%]
contracts/tests.py::TestContractViewSet::test_update_contract PASSED [19%]
contracts/tests.py::TestContractViewSet::test_update_contract_unauthorized_user PASSED [21%]
events/tests.py::TestEventsApp::test_event_print_details PASSED [22%]
events/tests.py::TestEventsApp::test_event_str_representation PASSED [23%]
events/tests.py::TestEventsApp::test_save_method PASSED [25%]
events/tests.py::TestEventViewSet::test_all_events_details PASSED [26%]
events/tests.py::TestEventViewSet::test_create_event PASSED [28%]
events/tests.py::TestEventViewSet::test_create_event_already_exists PASSED [29%]
events/tests.py::TestEventViewSet::test_create_event_contract_not_signed PASSED [30%]
events/tests.py::TestEventViewSet::test_create_event_unauthorized_user PASSED [32%]
events/tests.py::TestEventViewSet::test_destroy_event PASSED [33%]
events/tests.py::TestEventViewSet::test_destroy_event_unauthorized_user PASSED [35%]
events/tests.py::TestEventViewSet::test_event_details PASSED [36%]
events/tests.py::TestEventViewSet::test_event_details_unauthorized_user PASSED [38%]
events/tests.py::TestEventViewSet::test_events_list PASSED [39%]
events/tests.py::TestEventViewSet::test_events_without_support PASSED [40%]
events/tests.py::TestEventViewSet::test_update_event PASSED [42%]
events/tests.py::TestEventViewSet::test_update_event_unauthorized_user PASSED [43%]
profiles/tests.py::TestProfilesApp::test_add_client_to_group PASSED [45%]
profiles/tests.py::TestProfilesApp::test_assign_sales_contact PASSED [46%]
profiles/tests.py::TestProfilesApp::test_create_client1 PASSED [47%]
profiles/tests.py::TestProfilesApp::test_create_client2 PASSED [49%]
profiles/tests.py::TestProfilesApp::test_create_superuser PASSED [50%]
profiles/tests.py::TestProfilesApp::test_create_superuser_invalid_attributes PASSED [52%]
profiles/tests.py::TestProfilesApp::test_create_user_management PASSED [53%]
profiles/tests.py::TestProfilesApp::test_create_user_sales PASSED [54%]
profiles/tests.py::TestProfilesApp::test_create_user_support PASSED [56%]
profiles/tests.py::TestProfilesApp::test_create_user_with_empty_email PASSED [57%]
profiles/tests.py::TestProfilesApp::test_has_module_perms PASSED [59%]
profiles/tests.py::TestProfilesApp::test_has_perm PASSED [60%]
profiles/tests.py::TestProfilesApp::test_obtain_jwt_token_url PASSED [61%]
profiles/tests.py::TestProfilesApp::test_refresh_jwt_token_url PASSED [63%]
profiles/tests.py::TestProfilesApp::test_str_method_with_sales_contact PASSED [64%]
profiles/tests.py::TestLoginViewSet::test_user_login_inactive_account PASSED [66%]
profiles/tests.py::TestLoginViewSet::test_user_login_invalid_credentials PASSED [67%]
profiles/tests.py::TestLoginViewSet::test_user_login_successful PASSED [69%]
profiles/tests.py::TestClientViewSet::test_all_clients_details PASSED [70%]
profiles/tests.py::TestClientViewSet::test_client_details PASSED [71%]
profiles/tests.py::TestClientViewSet::test_client_details_unauthorized_user PASSED [73%]
profiles/tests.py::TestClientViewSet::test_clients_list PASSED [74%]
profiles/tests.py::TestClientViewSet::test_clients_list_associated_to_user PASSED [76%]
profiles/tests.py::TestClientViewSet::test_create_client PASSED [77%]
profiles/tests.py::TestClientViewSet::test_create_clients_unauthorized_user PASSED [78%]
profiles/tests.py::TestClientViewSet::test_destroy_client PASSED [80%]
profiles/tests.py::TestClientViewSet::test_destroy_client_unauthorized_user PASSED [81%]
profiles/tests.py::TestClientViewSet::test_update_client PASSED [83%]
profiles/tests.py::TestClientViewSet::test_update_client_unauthorized_user PASSED [84%]
profiles/tests.py::TestUserViewSet::test_all_users_details PASSED [85%]
profiles/tests.py::TestUserViewSet::test_create_user PASSED [87%]
profiles/tests.py::TestUserViewSet::test_create_user_unauthorized_user PASSED [88%]
profiles/tests.py::TestUserViewSet::test_destroy_user PASSED [90%]
profiles/tests.py::TestUserViewSet::test_destroy_user_unauthorized_user PASSED [91%]
profiles/tests.py::TestUserViewSet::test_retrieve_all_user_list PASSED [92%]
profiles/tests.py::TestUserViewSet::test_returns_details_specific_user PASSED [94%]
profiles/tests.py::TestUserViewSet::test_update_user PASSED [95%]
profiles/tests.py::TestUserViewSet::test_update_user_unauthorized_user PASSED [97%]
profiles/tests.py::TestUserViewSet::test_user_details PASSED [98%]
profiles/tests.py::TestUserViewSet::test_users_list PASSED [100%]
================================= 71 passed in 306.71s (0:05:06) ==================================
- Pour afficher plus d'informations sur les tests lors de leurs exécutions vous pouvez utiliser la commande :
$ pytest -v -s
Retour en haut 🡅
-
Utilisation de Coverage pour mesurer la couverture de code. ➔ Documentation Coverage
-
Cette commande exécute les tests en utilisant Coverage pour collecter les informations de couverture.
$ pytest --cov=.
---------- coverage: platform win32, python 3.12.0-final-0 -----------
Name Stmts Miss Cover
-----------------------------------------
contracts\models.py 30 1 97%
contracts\views.py 81 3 96%
events\models.py 30 0 100%
events\views.py 95 5 95%
profiles\models.py 132 11 92%
profiles\views.py 146 9 94%
-----------------------------------------
TOTAL 514 29 94%
=================== 71 passed in 284.05s (0:04:44) ====================
Renvoie : 94% de couverture de code.
- Pour afficher un rapport de couverture avec plus de détails.
$ pytest --cov=. --cov-report html
- Cela générera un dossier
htmlcov
dans lequel vous pouvez ouvrir le fichierindex.html
pour visualiser un rapport interactif de la couverture de code dans votre navigateur.
Rapport Coverage
Retour en haut 🡅
La surveillance (ou monitoring) sur Sentry s'effectue en accédant à votre tableau de bord après avoir créé un projet et récupéré les informations nécessaires (clé DSN).
- Sentry ➔ https://sentry.io/welcome/
- Des déclencheurs ont été configurés au niveau des vues de l'application.
- Ces déclencheurs sont activés lorsqu'un utilisateur tente d'accéder à des opérations d'administration sans autorisation.
- Cela déclenchera une alerte qui sera envoyée à Sentry.
Voici un exemple d'alerte sur la capture d'écran suivante :
Retour en haut 🡅
Tapez dans votre terminal la commande :
$ flake8
- Ne renvoie aucune erreur.
Retour en haut 🡅
- Chacun contient un fichier
tests.py
contenant les configurations pour les tests.
- Chacun contient un fichier contenant les configurations pour le gestionnaire de commandes.
contracts
➔ (management_contract.py)events
➔ (management_event.py)profiles
➔ (management_user.py)profiles
➔ (management_client.py)
- Le dossier contient le fichier
creating_environment_variables.py
qui génère le fichier.env
pour les variables d'environnement (creating_environment_variables.py)
- Dossier qui contient qui contient les images et les badges nécessaire à l'application.
- Le fichier
EpicEvents.sql
contient la configuration des tables pour la base de données ➔ (EpicEvents.sql)
- Le fichier contient la configuration de
Coverage
(.coveragerc)
- Le fichier contient la configuration de
Flake8
(.flake8)
Retour en haut 🡅
Pour toute information supplémentaire, vous pouvez me contacter.
Bubhux : bubhuxpaindepice@gmail.com