flask design patterns
Ce didacticiel explique certains des modèles de conception Flask courants et les meilleures pratiques à suivre lors de la conception d'applications Web avec des exemples:
La conception d'applications est un aspect essentiel du développement logiciel. Une conception d'application imprévue entraîne une dette technique insurmontable. Par conséquent, chaque fois que nous voulons faire évoluer notre application, il est normal d'essayer des modèles de conception testés dans le temps.
La communauté Flask a de nombreux exemples qui peuvent vous inspirer et avoir un impact sur vos décisions de conception lorsque vous souhaitez essayer quelques modèles pour votre application. Flask est tellement sans opinion et flexible que vous aimerez peut-être combiner des concepts à partir des modèles existants et en créer un nouveau.
=> Visitez ici pour apprendre Flask à partir de zéro
Ce que vous apprendrez:
Modèles de conception de flacon
Par exemple, Vous trouverez de nombreux exemples du modèle MVC aux applications à page unique en passant par le modèle SAAS. Vous nommez le paradigme de conception, et il est déjà essayé par quelqu'un dans la communauté et est disponible gratuitement pour que vous puissiez vous essayer.
Vous trouverez ci-dessous quelques-uns des référentiels qui méritent d'être examinés.
Flusk
Flusk est un exemple que vous pouvez utiliser pour créer de grandes applications Flask qui incluent SQLAlchemy, Docker et Nginx. Il a une belle séparation logique pour créer un backend, un domaine, des vues et des modèles dans leurs couches respectives.
Il a une excellente utilisation des plans de flacon et suit le modèle de conception d'usine. Il est facile de créer des extensions dans Flusk et il est encore plus facile de conteneuriser l'application à l'aide de Docker. Jetez un œil à son code source ici .
Flacon de Cookiecutter
Cookiecutter Flask est un modèle de flacon avec des fonctionnalités telles que le regroupement d'actifs et la minification avec des packs Web. Il a des modèles de démarrage pour l'enregistrement / l'authentification des utilisateurs et est basé sur Bootstrap 4.
Cookiecutter est un utilitaire de ligne de commande pour créer un projet de package Python. Cela signifie que si vous utilisez ce modèle, vous pouvez également publier votre application Flask en tant que PyPI. Ce projet est en cours de développement actif.
Il vaut la peine d'évaluer à ce lien .
Flacon plein
Flask full est un autre passe-partout puissant qui utilise Celery, MongoEngine, Signals, commandes Shell, WebSocket et eventlet. Il est assez bien intégré aux documents de l'API Swagger et aux documents Sphinx.
Évaluez ce projet comme sa source. Il est disponible gratuitement ici .
Flasky
Pour créer des applications légères, vous pouvez envisager Flasky. Le code source de Flasky est disponible ici . Ce référentiel a été créé par Miguel Grinberg, qui a plus de 25 ans d'expérience dans le développement Web.
Il a créé Flasky pour fournir des exemples de code pour les concepts abordés dans son livre intitulé Développement Web Flask .
Quel que soit le cadre ou le modèle que vous choisissez, tous ont des fonctionnalités standard et en parlent à leur manière. Nous listons ici certaines de ces fonctionnalités et les discutons, et implémentons celles qui utilisent Flask-Appbuilder dans notre exemple d'application de cette série de tutoriels.
Ce didacticiel traite de certains modèles plus courants que vous trouverez dans presque toutes les applications Web d'aujourd'hui et qu'il est agréable d'avoir dans le kit d'un développeur Web.
Exemple de connexion Flask
Une application Web exige généralement que les utilisateurs s'inscrivent et accèdent à la partie restreinte de l'application en fonction des privilèges attribués. Les utilisateurs ont des rôles basés sur les autorisations. Par exemple, un utilisateur public n'a pas l'autorisation de créer un autre utilisateur. Cependant, un utilisateur Admin dispose de ces autorisations.
Parfois, les applications Web automatisent l'enregistrement et la création de l'utilisateur en leur attribuant les autorisations par défaut ou prédéfinies.
Créer un utilisateur hors ligne
Créons un utilisateur à l'aide de la commande flask fab create-user. Une fois que vous utilisez cette commande, vous obtiendrez des invites de ligne de commande pour donner les détails du compte utilisateur. Donnez les détails similaires à ceux indiqués ci-dessous, et votre utilisateur est créé.
Role (Public): Username: user1 User first name: User1 User last name: Last1 Email: user1@sthwebsite.com Password: Repeat for confirmation: ## various logs 2020-06-21 13:55:01,053:INFO:flask_appbuilder.security.sqla.manager:Added user user1 User user1 created.
Notez qu'à la fin de la sortie de la commande, sqla.manager imprime des messages de confirmation pour la création de l'utilisateur.
Accédez maintenant à l'application et connectez-vous avec les détails que vous venez de saisir. Si vous avez créé l'utilisateur sur la base de données de production, transmettez ces détails à la personne pour laquelle vous avez créé ce compte.
Accédez à http: // localhost: 8080 / login, et vous verrez le formulaire de connexion comme indiqué ci-dessous.

Une fois que l'utilisateur1 s'est connecté, l'utilisateur peut voir le message de bienvenue.

Créer un utilisateur en ligne
Il peut être impossible pour nous de créer tous les utilisateurs hors ligne. De plus, l'utilisation de la commande flask fab create-user dans l'environnement de production peut nécessiter davantage d'expertise technique. Vous devrez peut-être retirer une partie de la charge de travail d'un administrateur, qui est la plupart du temps chargé de la création de l'utilisateur.
Par conséquent, dans notre exemple d'application Web, autorisons les utilisateurs à s'enregistrer eux-mêmes.
Nous utilisons le service reCAPTCHA de Google pour empêcher les acteurs malveillants d'accéder aux parties restreintes de l'application.
Commençons par enregistrer notre domaine sur le service reCAPTCHA de Google et acquérir la clé SITE et la clé SECRET.
Étape 1: Installez Flask-Mail en utilisant la commande ci-dessous.
pip install Flask-Mail
Accédez à https://www.google.com/recaptcha/intro/v3.html et connectez-vous en tant qu'administrateur à l'aide de votre compte Google.
Étape 2: Choisissez le type de reCaptcha.

Étape 3: indiquez le domaine pour lequel vous souhaitez utiliser le reCaptcha de Google.
Ajoutez également l'hôte local dans la liste des domaines autorisés pour cette clé, acceptez les conditions et soumettez-les. Vous pouvez le supprimer plus tard après le développement de cette fonctionnalité.
Étape 4: Notez la CLÉ DU SITE, également connue sous le nom de clé publique.

Étape 5: Notez la clé SECRET qui est également connue sous le nom de clé privée.

Une fois que vous avez noté les clés comme mentionné ci-dessus, il est préférable de les stocker à un endroit où elles peuvent être référencées et lues dans la configuration. Pour ce didacticiel, nous avons enregistré les valeurs en tant que variables d'environnement sous SITE_KEY et SECRET_KEY.
Ouvrez maintenant le fichier config.py et mettez-le à jour comme indiqué ci-dessous.
# Will allow user self registration AUTH_USER_REGISTRATION = True# The default user self registration role AUTH_USER_REGISTRATION_ROLE = 'Public'# Config for Flask-WTF Recaptcha necessary for user registration RECAPTCHA_PUBLIC_KEY = os.environ.get('SITE_KEY', None) RECAPTCHA_PRIVATE_KEY = os.environ.get('SECRET_KEY', None) # Config for Flask-Mail necessary for user registration MAIL_PORT = 587 MAIL_USE_SSL = False MAIL_SERVER = 'smtp.gmail.com' MAIL_USE_TLS = True MAIL_USERNAME = 'sthtestmail@gmail.com' MAIL_PASSWORD = 'Passw0rdqwerty' MAIL_DEFAULT_SENDER = 'sthtestmail0@gmail.com'
Vous devrez peut-être activer un accès moins sécurisé à votre compte Google. Activez l'accès au compte aux URL ci-dessous si vous êtes bloqué dans des problèmes liés aux e-mails.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Maintenant, sur la page de connexion, nous pouvons voir un bouton d'enregistrement d'utilisateur supplémentaire. Une fois que vous avez cliqué sur l'inscription, nous pouvons voir de nombreux champs avec le défi reCaptcha.

Une fois que vous vous êtes inscrit avec votre e-mail et que vous avez réussi le défi reCaptcha, vous verrez un message de confirmation, comme indiqué ci-dessous.

Si l'e-mail que vous avez donné lors de l'inscription est valide, vous recevrez un e-mail d'activation de compte similaire à celui indiqué dans l'image ci-dessous.

Administrateur Flask
Si vous avez lu les autres didacticiels de cette série de didacticiels Flask, vous remarquerez que nous avons profité de la sécurité intégrée fournie avec Flask-Appbuilder. Les vues que nous avons ajoutées à l'aide de add_view_no_menu ne sont pas protégées. Cependant, les vues que nous avons ajoutées en fonction des DataModels sont automatiquement protégées pour un utilisateur Admin.
Alternativement, nous pourrions utiliser Flask-Admin, qui aurait pour la plupart atteint un résultat similaire. Flask-Admin également, définissons les vues de manière orientée objet. Une page Web sur le frontend représente une méthode sur une classe de vue que nous ajoutons explicitement à l'interface.
Dans ce tutoriel, nous n'utilisons pas Flask-Admin. Au lieu de cela, nous empruntons la voie pour obtenir les mêmes résultats avec plus de vitesse et en évitant la nécessité de connaître la sécurité construite autour de la connexion, des autorisations, des rôles et des autorisations. C'était possible car nous avons utilisé Flask-Appbuilder.
Flask-Appbuilder ainsi que Flask-Admin ont leurs avantages et leurs inconvénients. Dans le cas de Flask-Admin, nous devons savoir qu'il n'y a aucune hypothèse de sécurité existante et que vous pouvez créer des applications en fonction de votre modèle de sécurité. Pour en savoir plus sur Flask-Admin, veuillez visiter ici et passez par des exemples appropriés.
Téléchargement de fichier Flask
De nos jours, presque toutes les applications Web nécessitent le stockage et la diffusion de fichiers. Un modèle typique pour eux consiste à enregistrer les fichiers sur un chemin sur le serveur, avec certaines informations pour effectuer l'opération sur le fichier stocké et les conserver dans les modèles d'application et les vues.
Nous allons travailler sur un exemple similaire. Modifions notre modèle de morceau avec des fonctionnalités supplémentaires.
Dans le fichier models.py, entrez le code suivant.
from flask import Markup, url_for from flask_appbuilder.models.mixins import FileColumn from flask_appbuilder.filemanager import get_file_original_name from flask_appbuilder import Model from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship class Song(Model): id = Column(Integer, primary_key=True) title = Column(String(200), nullable=False) rating = Column(Integer) album_id = Column(Integer, ForeignKey('album.id')) # for storing MP3 file of the song song_file = Column(FileColumn, nullable=False) album = relationship('Album') def __str__(self): return self.title def download(self): return Markup( ' Download ' ) def file_name(self): return get_file_original_name(str(self.song_file))
Nous avons modifié notre modèle de morceau précédemment créé en ajoutant une nouvelle colonne de type FileColumn. De plus, nous avons ajouté deux autres colonnes qui seront ajoutées à SongsView pour afficher le nom du fichier et un lien pour télécharger le fichier téléchargé.
La méthode Flask url_for a été utilisée avec le balisage pour afficher le téléchargement sous forme de lien. De plus, nous avons utilisé la méthode get_file_original_name de Flask-Appbuilder car le nom de fichier est stocké en le concaténant avec un UUID pour éviter les collisions entre les mêmes noms de fichiers.
Modifiez views.py avec le code ci-dessous pour mettre à jour le SongsView correspondant.
class SongsView(ModelView): datamodel = SQLAInterface(Song) label_columns = {'file_name' : 'File Name', 'download': 'Download'} list_columns = ('title', 'file_name', 'download') show_columns = ('title', 'file_name', 'download')
Dans la classe SongsView, nous avons mentionné les nouvelles étiquettes qui doivent être affichées et nous voulons répertorier uniquement les colonnes mentionnées dans la liste spécifiée.
Ici, vous devez vous rappeler que nous avons modifié un modèle de base de données en ajoutant une colonne au modèle. La table correspondante dans la base de données n’a pas cette nouvelle colonne. Par conséquent, nous supprimerons le fichier app.db, car nous travaillons sur la base de données SQLite depuis le dernier tutoriel.
Vous pouvez également utiliser la commande flask db migrate et apporter les modifications nécessaires au fichier de version, et utiliser la mise à niveau de flask db pour mettre à jour la table. Cependant, le changement que nous avons introduit est minime et nous pouvons recréer la base de données de l'application et l'utilisateur.
Nous vous recommandons, en production, d'envisager d'utiliser les commandes Flask-Migrate chaque fois que vous apportez des modifications au schéma de base de données de votre application.
Utilisez les commandes ci-dessous pour supprimer le fichier de base de données et créer à nouveau l'utilisateur administrateur.
rm app.db flask fab create-db flask fab create-admin
Connectez-vous maintenant à l'application avec les informations d'identification d'administrateur, et vous verrez le SongsView modifié comme indiqué dans l'image ci-dessous.

Ajoutez une chanson avec un fichier.

Une fois le fichier enregistré, les colonnes de la vue ressembleront à celles illustrées ci-dessous.

Notez les valeurs suivantes dans config.py. Les fichiers téléchargés seront stockés sur ce chemin sur le serveur. Pour ce didacticiel, il sera téléchargé sur la machine sur laquelle nous développons cet exemple d'application.
Vérifiez le chemin de téléchargement, comme indiqué dans config.py. Les fichiers sont stockés avec les UUID, comme indiqué ci-dessous.

Flacon HTTPS
En ce qui concerne le développement, nous pouvons continuer à exécuter notre application Flask sans HTTPS. Du point de vue de la sécurité, HTTPS garantit que la communication se produit entre le client légitime et le serveur.
Cette communication chiffrée nécessite que la confiance soit établie entre un client et un serveur, à l'aide d'un certificat signé par une autorité de certification avec une paire de clés publiques et privées. Veuillez en savoir plus ici
Dans ce didacticiel, nous vous expliquerons les méthodes pour développer des sites Web basés sur Flask à l'aide de HTTP pendant le développement.
Le moyen le plus rapide et le plus simple d'inclure HTTPS pendant le développement est d'utiliser un ad hoc ssl_context, comme mentionné ci-dessous dans run.py. Cependant, veuillez installer pyopenssl en utilisant pip dans l'environnement.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Après avoir ajouté ssl_context, lorsque vous accédez à https: // localhost: 8080 /, vous recevrez un avertissement soulevant un doute sur la validité du certificat utilisé dans cette communication. De plus, la navigation vers http: // localhost: 8080 / ne fonctionnera plus.
Ainsi, cette approche est un peu lourde, et elle vous obligera à continuer d'accepter cette demande chaque fois que vous redémarrerez votre serveur de développement.
Vous devez cliquer sur l'accès non sécurisé pour continuer à travailler, comme indiqué ci-dessous.

Sinon, pour développer avec les fonctionnalités https, nous pouvons transmettre le chemin d'accès au certificat et la clé dans un tuple Python au paramètre ssl_context dans la méthode d'exécution. Cependant, pour adopter cette approche, vous devrez générer un certificat auto-signé et une clé en utilisant la commande ci-dessous.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Donnez les valeurs appropriées pour les requêtes demandées.

Nous avons laissé toutes les valeurs par défaut. Arrêtez maintenant le serveur de développement et transmettez le certificat de chemin et le chemin de clé comme indiqué ci-dessous.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Cette approche est également similaire à la méthode précédente d'utilisation d'Adhoc ssl_context. Cependant, dans ce cas, les détails persistent plus longtemps. Nous avons mentionné 365 jours. Vous pouvez spécifier l'expiration des jours dont vous avez besoin. De plus, ces fichiers peuvent être partagés avec les autres membres de l'équipe si vous développez en équipe.
Dans l'environnement de production, les certificats sont émis par l'autorité de certification et Miguel Grinberg discute de certains cas d'utilisation ici . Nous vous recommandons de lire plus de détails sur cette page.
Conclusion
Dans ce didacticiel, nous avons discuté de certains modèles suivis par les développeurs Web lors du développement de fonctionnalités liées à la connexion Flask, à l'administration Flask, au téléchargement de fichiers Flask et à Flask HTTPS. Nous avons fourni des exemples de code, et les lecteurs peuvent également essayer.
Dans notre prochain didacticiel, nous aborderons les concepts d'extension de Flask et verrons comment créer des fonctionnalités basées sur l'API REST. De plus, nous discuterons de la façon dont nous pouvons utiliser l'API Twitter dans Flask.
comment diviser une chaîne par caractère en python
=> Découvrez la série de formation Flask ici
lecture recommandée
- Modèles de conception en Java: Singleton, Factory et Builder
- Tutoriel Python Flask - Introduction à Flask pour les débutants
- Tutoriel API Flask avec exemple | Extension de Flask avec des API
- Mise en page de l'application Flask et du projet Flask avec Blueprint et Bootstrap
- Django Vs Flask Vs Node: quel framework sélectionner
- Top 31 des questions d'entrevue Python Flask populaires avec réponses
- Top 10 des outils de conception de base de données pour créer des modèles de données complexes
- Top 11 des tendances de conception UI / UX: à quoi s'attendre en 2021 et au-delà