Système de contrôle de bibliothèque sur Flask-Potion, partie 0: préparer tout ce dont vous avez besoin

Présentation


Dans mon travail, j'utilise Flask-Potion depuis un certain temps maintenant, un framework dont les principaux avantages sont: une intégration très pratique avec les modèles SQLAlchemy, la génération automatique de points de terminaison crud, la présence d'un client potion (très pratique si vous écrivez un service API que vous devrez utiliser dans un autre service).


J'ai remarqué qu'il n'y a presque rien sur la potion de flacon en russe, mais je pense que ce cadre peut sembler intéressant pour certains.


Au lieu d'un simple article de revue sur ce framework, j'ai décidé d'écrire plusieurs articles sur la création d'un système de contrôle pour la bibliothèque Furfur basé sur Flask-Potion.


Ce système devrait pouvoir effectuer les opérations suivantes:


  • Stocker des informations sur les livres (isbn, titre, description, auteur, etc.)
  • Stocker les informations des utilisateurs (lecteurs et bibliothécaires)
  • Publier un livre de la bibliothèque pour une certaine période avec possibilité d'extension

Dans ce système, nous utiliserons les outils suivants:


  • PostgreSQL
  • Flask, Flask-SQLAlchemy, Flask-JWT, Flask-Potion, Flask-Migrate

La préparation


Squelette


Afin de ne pas collecter nous-mêmes le squelette du projet, nous utiliserons le modèle de découpe Valefor, qui inclut toutes les dépendances ci-dessus et bien plus encore.


cookiecutter gh:lemegetonx/valefor 

Ce modèle comprend deux applications:


  1. l'application est la chose principale. Il contient des fonctions de gestionnaire pour jwt, des classes de mixage pour les ressources de potion et les modèles sqlalchemy, ainsi qu'un package avec des configurations pour l'application.
  2. utilisateur - au début du modèle, contient uniquement le modèle utilisateur.

Installation de dépendance


Le modèle utilise de la poésie pour résoudre les dépendances, mais récemment pip prend également en charge pyproject.toml , donc vous avez le choix. Je profiterai de la poésie.


 poetry install 

La configuration


Pour une configuration simplifiée, le modèle utilise la bibliothèque sitri. Nous devrons modifier légèrement le paramètre de l'objet Sitri.


  1. Modifiez app / config / provider.py . Nous remplacerons SystemCredentialProvider par YamlCredentialProvider afin que les données d'autorisation pour les systèmes tiers soient extraites du fichier credential.yaml , que nous n'ajouterons pas aux validations:

 from sitri import Sitri from sitri.contrib.yaml import YamlConfigProvider, YamlCredentialProvider configuration = Sitri( config_provider=YamlConfigProvider(yaml_path="./config.yaml"), credential_provider=YamlCredentialProvider(yaml_path="./credential.yaml"), ) 

PS plus sur ce qui se passe réellement ici est plus facile à lire dans la documentation , en bref, mais maintenant nous venons de déterminer où nous obtiendrons les données pour la configuration et l'autorisation.


  1. Puisque nous avons essentiellement fait les mêmes fournisseurs, il est préférable de remplacer les traits de soulignement dans les clés de l'appel get_credential par des points dans database.py .

 DB_NAME = configuration.get_credential("db.name", path_mode=True) DB_HOST = configuration.get_credential("db.host", path_mode=True) DB_PASSWORD = configuration.get_credential("db.user.password", path_mode=True) DB_PORT = configuration.get_credential("db.port", path_mode=True) DB_USER = configuration.get_credential("db.user.name", path_mode=True) 

Ainsi, le fichier config.yaml était déjà dans le modèle, mais credential.yaml doit être écrit par vous-même. Dans la vraie vie, ces fichiers sont nécessairement ajoutés à .gitignore, mais j'ajouterai le modèle credential.yaml au référentiel afin que sa structure soit compréhensible pour quiconque entre dans le projet.


Base credential.yaml :


 db: name: furfur_db host: localhost port: 5432 user: password: passwd name: admin 

Base de données


La prochaine étape de notre préparation est le déploiement du SGBD, dans ce cas PostgreSQL. Pour plus de commodité, je vais créer un fichier stack.yaml où je décrirai le lancement du conteneur postgres avec les données dont nous avons besoin.


 version: '3.1' services: db: image: postgres restart: always environment: POSTGRES_PASSWORD: passwd POSTGRES_USER: admin POSTGRES_DB: furfur_db ports: - 5432:5432 

Comme mentionné précédemment, le modèle valefor inclut le modèle utilisateur de base nécessaire au fonctionnement des JWT (gestionnaires), donc la dernière étape de la préparation de la base de données est la migration (création d'une table utilisateur).


Étant à la racine du projet, nous exécutons les commandes suivantes:


 export FLASK_APP=furfur.app flask db init flask db migrate flask db upgrade 

Tout, avec la préparation de la base de données, ainsi que la base générale de notre système, nous avons terminé.


Et ensuite?


Dans la partie suivante, nous parlerons de l'organisation d'un système de rôle simple et de l'authentification JWT.


Référentiel de projets: https://github.com/Egnod/furfur
Tout ce qui est indiqué dans cette partie: https://github.com/Egnod/furfur/releases/tag/0.0.2

Source: https://habr.com/ru/post/fr472018/


All Articles