flask design patterns
In diesem Lernprogramm werden einige der gängigen Flask-Entwurfsmuster und Best Practices beim Entwerfen von Webanwendungen anhand von Beispielen erläutert:
Anwendungsdesign ist ein wesentlicher Aspekt der Softwareentwicklung. Ein ungeplantes Anwendungsdesign führt zu unüberwindlichen technischen Schulden. Wenn wir unsere Anwendung skalieren möchten, ist es daher in Ordnung, bewährte Entwurfsmuster auszuprobieren.
In der Flask-Community gibt es viele Beispiele, die Sie inspirieren und Ihre Entwurfsentscheidungen beeinflussen können, wenn Sie einige Muster für Ihre Anwendung ausprobieren möchten. Flask ist so unbefangen und flexibel, dass Sie möglicherweise Konzepte aus den vorhandenen Mustern kombinieren und ein neues erstellen möchten.
=> Besuchen Sie hier, um Flask From Scratch zu lernen
Was du lernen wirst:
Flask Design Patterns
Beispielsweise, Sie finden viele Beispiele vom MVC-Muster über Single Page Applications bis zum SAAS-Muster. Sie nennen das Design-Paradigma, und es wird bereits von jemandem in der Community ausprobiert und steht Ihnen frei zur Verfügung, um es selbst auszuprobieren.
Nachfolgend sind einige der Repositories aufgeführt, die einen Blick wert sind.
Flusk
Flusk ist ein Beispiel, mit dem Sie große Flask-Anwendungen erstellen können, zu denen SQLAlchemy, Docker und Nginx gehören. Es hat eine schöne logische Trennung, um Backend, Domain, Ansichten und Modelle in ihren jeweiligen Ebenen zu erstellen.
Es verwendet Flask Blueprints hervorragend und folgt dem Factory-Designmuster. Es ist einfach, Erweiterungen in Flusk zu erstellen und die Anwendung mit Docker einfach zu containerisieren. Schauen Sie sich den Quellcode an Hier .
Ausstechflasche
Cookiecutter Flask ist eine Flaschenvorlage mit Funktionen wie Asset-Bündelung und Minimierung mit Webpacks. Es verfügt über Starter-Vorlagen für die Benutzerregistrierung / -authentifizierung und basiert auf Bootstrap 4.
Cookiecutter ist ein Befehlszeilenprogramm zum Erstellen eines Python-Paketprojekts. Wenn Sie diese Vorlage verwenden, können Sie Ihre Flask-Anwendung auch als PyPI veröffentlichen. Dieses Projekt befindet sich in der aktiven Entwicklung.
Es lohnt sich, bei zu bewerten dieser Link .
Flasche voll
Flask full ist eine weitere leistungsstarke Boilerplate, die Sellerie, MongoEngine, Signale, Shell-Befehle, WebSocket und Eventlet verwendet. Es ist recht gut in Swagger API-Dokumente und Sphinx-Dokumente integriert.
Bewerten Sie dieses Projekt als Quelle. Es ist frei verfügbar Hier .
Flasky
Zum Erstellen einfacher Anwendungen sollten Sie Flasky in Betracht ziehen. Der Quellcode von Flasky ist verfügbar Hier . Dieses Repository wurde von Miguel Grinberg erstellt, der über 25 Jahre Erfahrung in der Webentwicklung verfügt.
Er erstellte Flasky, um Codebeispiele für die in seinem Buch genannten Konzepte bereitzustellen Flask Web Development .
Unabhängig davon, welches Framework oder welche Vorlage Sie auswählen, verfügen alle über einige Standardfunktionen und sprechen auf ihre eigene Weise darüber. Wir listen hier einige dieser Funktionen auf, diskutieren sie und implementieren diejenigen, die Flask-Appbuilder verwenden, in unserer Beispielanwendung dieser Lernserie.
In diesem Tutorial werden einige häufigere Muster beschrieben, die Sie heute in fast allen Webanwendungen finden und die im Kit eines Webentwicklers enthalten sind.
Flask Login Beispiel
Für eine Webanwendung müssen sich Benutzer normalerweise registrieren und auf den eingeschränkten Teil der Anwendung zugreifen, basierend auf den zugewiesenen Berechtigungen. Die Benutzer haben berechtigungsbasierte Rollen. Beispielsweise, Ein öffentlicher Benutzer hat keine Berechtigung zum Erstellen eines anderen Benutzers. Ein Administrator hat jedoch diese Berechtigungen.
Manchmal automatisieren Webanwendungen die Benutzerregistrierung und Benutzererstellung, indem sie ihnen die Standard- oder vordefinierten Berechtigungen zuweisen.
Benutzer offline erstellen
Erstellen Sie einen Benutzer mit dem Befehl flask fab create-user. Sobald Sie diesen Befehl verwenden, werden Sie in der Befehlszeile aufgefordert, die Details des Benutzerkontos anzugeben. Geben Sie die Details ähnlich den unten gezeigten an, und Ihr Benutzer wird erstellt.
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.
Beachten Sie, dass der sqla.manager am Ende der Befehlsausgabe Bestätigungsmeldungen für die Benutzererstellung druckt.
Greifen Sie jetzt auf die Anwendung zu und melden Sie sich mit den soeben eingegebenen Details an. Wenn Sie den Benutzer in der Produktionsdatenbank erstellt haben, geben Sie diese Details an die Person weiter, für die Sie dieses Konto erstellt haben.
Navigieren Sie zu http: // localhost: 8080 / login, und Sie sehen das Anmeldeformular wie unten gezeigt.

Sobald sich Benutzer1 anmeldet, kann der Benutzer die Begrüßungsnachricht sehen.

Benutzer online erstellen
Es ist möglicherweise unmöglich, alle Benutzer offline zu erstellen. Darüber hinaus ist möglicherweise mehr technisches Fachwissen erforderlich, um den Befehl flask fab create-user in der Produktionsumgebung zu verwenden. Möglicherweise müssen Sie einem Administrator, der die meiste Zeit mit der Benutzererstellung beauftragt ist, die Arbeitslast entziehen.
In unserer Beispiel-Webanwendung können Benutzer sich daher selbst registrieren.
Wir verwenden den reCAPTCHA-Dienst von Google, um zu verhindern, dass böswillige Akteure auf die eingeschränkten Teile der Anwendung zugreifen.
Registrieren Sie zunächst unsere Domain im reCAPTCHA-Dienst von Google und erwerben Sie den SITE-Schlüssel und den SECRET-Schlüssel.
Schritt 1: Installieren Sie Flask-Mail mit dem folgenden Befehl.
pip install Flask-Mail
Gehen Sie zu https://www.google.com/recaptcha/intro/v3.html und melden Sie sich mit Ihrem Google-Konto als Administrator an.
Schritt 2: Wählen Sie den Typ von reCaptcha.

Schritt 3: Geben Sie die Domain an, für die Sie Google reCaptcha verwenden möchten.
Fügen Sie außerdem den localhost in die Liste der zulässigen Domänen für diesen Schlüssel ein, akzeptieren Sie die Bedingungen und senden Sie sie ab. Sie können es später nach der Entwicklung dieser Funktion entfernen.
Schritt 4: Notieren Sie sich den SITE KEY, der auch als öffentlicher Schlüssel bezeichnet wird.

Schritt 5: Notieren Sie den SECRET KEY, der auch als privater Schlüssel bezeichnet wird.

Sobald Sie die Schlüssel wie oben erwähnt notiert haben, ist es am besten, sie an einem Ort zu speichern, an dem diese in der Konfiguration referenziert und gelesen werden können. Für dieses Tutorial haben wir die Werte als Umgebungsvariablen wie SITE_KEY und SECRET_KEY gespeichert.
Öffnen Sie nun die Datei config.py und aktualisieren Sie sie wie unten gezeigt.
# 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'
Möglicherweise müssen Sie einen weniger sicheren Zugriff auf Ihr Google-Konto aktivieren. Aktivieren Sie den Kontozugriff unter den folgenden URLs, wenn Sie Probleme mit E-Mails haben.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Jetzt können wir auf der Anmeldeseite eine zusätzliche Schaltfläche zur Benutzerregistrierung sehen. Sobald Sie auf Registrierung klicken, sehen wir viele Felder zusammen mit der reCaptcha Challenge.

Sobald Sie sich mit Ihrer E-Mail-Adresse registriert und die reCaptcha-Herausforderung bestanden haben, wird eine Bestätigungsmeldung angezeigt (siehe unten).

Wenn die E-Mail-Adresse, die Sie bei der Registrierung angegeben haben, gültig ist, erhalten Sie eine E-Mail zur Kontoaktivierung, die der im folgenden Bild gezeigten ähnelt.

Flask Admin
Wenn Sie die anderen Tutorials in dieser Flask-Tutorialserie gelesen haben, werden Sie feststellen, dass wir die integrierte Sicherheit von Flask-Appbuilder genutzt haben. Die Ansichten, die wir mit add_view_no_menu hinzugefügt haben, sind nicht geschützt. Die Ansichten, die wir basierend auf DataModels hinzugefügt haben, werden jedoch automatisch für einen Administrator geschützt.
Alternativ könnten wir Flask-Admin verwenden, das meistens ein ähnliches Ergebnis erzielt hätte. Lassen Sie uns auch Flask-Admin objektorientiert Ansichten definieren. Eine Webseite im Frontend stellt eine Methode für eine Ansichtsklasse dar, die wir explizit zur Benutzeroberfläche hinzufügen.
In diesem Tutorial verwenden wir Flask-Admin nicht. Stattdessen gehen wir den Weg, um dieselben Ergebnisse schneller zu erzielen und die Notwendigkeit zu überspringen, über die Sicherheit von Login, Auths, Roles und Berechtigungen Bescheid zu wissen. Es war möglich, als wir Flask-Appbuilder verwendeten.
Sowohl Flask-Appbuilder als auch Flask-Admin haben ihre Vor- und Nachteile. Im Fall von Flask-Admin müssen wir wissen, dass keine Sicherheitsannahmen vorhanden sind, und Sie können Apps basierend auf Ihrem Sicherheitsmodell erstellen. Um mehr über Flask-Admin zu erfahren, besuchen Sie bitte Hier und gehen Sie geeignete Beispiele durch.
Hochladen der Flaschendatei
Fast alle Webanwendungen haben heutzutage die Anforderungen, Dateien zu speichern und bereitzustellen. Ein typisches Muster für sie ist das Speichern der Dateien unter einem Pfad auf dem Server mit einigen Informationen, um den Vorgang für die gespeicherte Datei auszuführen und in Anwendungsmodellen und -ansichten zu behalten.
Wir werden an einem ähnlichen Beispiel arbeiten. Lassen Sie uns unser Song-Modell mit zusätzlichen Funktionen modifizieren.
Geben Sie in die Datei models.py den folgenden Code ein.
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))
Wir haben unser zuvor erstelltes Song-Modell geändert, indem wir eine neue Spalte vom Typ FileColumn hinzugefügt haben. Darüber hinaus haben wir zwei weitere Spalten hinzugefügt, die der SongsView hinzugefügt werden, um den Dateinamen anzuzeigen, und einen Link zum Herunterladen der hochgeladenen Datei.
Die Flask url_for-Methode wurde zusammen mit Markup verwendet, um den Download als Link anzuzeigen. Außerdem haben wir die Methode get_file_original_name aus dem Flask-Appbuilder verwendet, da der Dateiname durch Verketten mit einer UUID gespeichert wird, um Kollisionen zwischen denselben Dateinamen zu vermeiden.
Ändern Sie views.py mit dem unten angegebenen Code, um die entsprechende SongsView zu aktualisieren.
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')
In der SongsView-Klasse haben wir die neuen Beschriftungen erwähnt, die angezeigt werden müssen, und wir möchten nur die in der angegebenen Liste genannten Spalten auflisten.
Hier müssen Sie bedenken, dass wir ein Datenbankmodell geändert haben, indem wir dem Modell eine Spalte hinzugefügt haben. Die entsprechende Tabelle in der Datenbank enthält diese neue Spalte nicht. Daher werden wir die Datei app.db entfernen, da wir seit dem letzten Lernprogramm an der SQLite-Datenbank arbeiten.
Alternativ können Sie auch den Befehl flask db migrate verwenden, die erforderlichen Änderungen an der Versionsdatei vornehmen und die Tabelle mithilfe des Flask db-Upgrades aktualisieren. Die von uns eingeführte Änderung ist jedoch minimal und wir können die Anwendungsdatenbank und den Benutzer neu erstellen.
Wir empfehlen, in der Produktion die Flask-Migrate-Befehle zu verwenden, wenn Sie Änderungen am Datenbankschema Ihrer Anwendung vornehmen.
Verwenden Sie die folgenden Befehle, um die Datenbankdatei zu entfernen und den Administrator erneut zu erstellen.
rm app.db flask fab create-db flask fab create-admin
Melden Sie sich jetzt mit den Administratoranmeldeinformationen bei der Anwendung an, und Sie sehen die geänderte SongsView, wie im folgenden Bild gezeigt.

Fügen Sie ein Lied mit einer Datei hinzu.

Sobald Sie die Datei gespeichert haben, sehen die Spalten in der Ansicht wie unten gezeigt aus.

Beachten Sie die folgenden Werte in config.py. Die hochgeladenen Dateien werden unter diesem Pfad auf dem Server gespeichert. Für dieses Tutorial wird es auf den Computer hochgeladen, auf dem wir diese Beispielanwendung entwickeln.
Überprüfen Sie den Upload-Pfad, wie in config.py angegeben. Die Dateien werden mit den UUIDs gespeichert, wie unten gezeigt.

Kolben HTTPS
In Bezug auf die Entwicklung können wir unsere Flask-Anwendung weiterhin ohne HTTPS ausführen. Aus Sicherheitsgründen stellt HTTPS sicher, dass die Kommunikation zwischen dem legitimen Client und dem Server erfolgt.
Diese verschlüsselte Kommunikation erfordert, dass eine Vertrauensstellung zwischen einem Client und einem Server unter Verwendung eines von der Zertifizierungsstelle signierten Zertifikats mit einem Paar öffentlicher und privater Schlüssel hergestellt wird. Bitte lesen Sie mehr darüber Hier
In diesem Tutorial werden wir Sie über die Methoden zum Entwickeln von Flask-basierten Websites unter Verwendung von HTTPs während der Entwicklung informieren.
Der schnellste und einfachste Weg, HTTPS während der Entwicklung einzuschließen, ist die Verwendung eines adhoc ssl_context, wie unten in run.py erwähnt. Bitte installieren Sie pyopenssl jedoch mit pip in der Umgebung.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Wenn Sie nach dem Hinzufügen von ssl_context zu https: // localhost: 8080 / navigieren, wird eine Warnung angezeigt, die Zweifel an der Gültigkeit des in dieser Kommunikation verwendeten Zertifikats aufkommen lässt. Außerdem funktioniert die Navigation zu http: // localhost: 8080 / nicht mehr.
Daher ist dieser Ansatz etwas umständlich und erfordert, dass Sie diese Anforderung weiterhin akzeptieren, wenn Sie Ihren Entwicklungsserver neu starten.
Sie müssen auf unsicheren Zugriff klicken, um weiterarbeiten zu können (siehe unten).

Um mit den https-Funktionen zu entwickeln, können wir alternativ den Pfad zum Zertifikat übergeben und ein Python-Tupel an den Parameter ssl_context in der Ausführungsmethode eingeben. Um diesen Ansatz zu übernehmen, müssen Sie jedoch mit dem folgenden Befehl ein selbstsigniertes Zertifikat und einen Schlüssel generieren.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Geben Sie die entsprechenden Werte für die gestellten Abfragen an.

Wir haben alle Standardwerte belassen. Stoppen Sie nun den Entwicklungsserver und übergeben Sie das Pfadzertifikat und den Schlüsselpfad wie unten gezeigt.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Dieser Ansatz ähnelt auch der vorherigen Methode zur Verwendung von Adhoc ssl_context. In diesem Fall bleiben die Details jedoch länger erhalten. Wir haben 365 Tage erwähnt. Sie können den Ablauf für die Tage angeben, die Sie benötigen. Darüber hinaus können diese Dateien für die anderen Teammitglieder freigegeben werden, wenn Sie in einem Team entwickeln.
In der Produktionsumgebung werden die Zertifikate von der Zertifizierungsstelle ausgestellt, und Miguel Grinberg erörtert einige Anwendungsfälle Hier . Wir empfehlen Ihnen, weitere Details auf dieser Seite zu lesen.
Fazit
In diesem Tutorial haben wir einige Muster erläutert, denen Webentwickler bei der Entwicklung von Funktionen im Zusammenhang mit Flask Login, Flask Admin, Flask File Upload und Flask HTTPS folgen. Wir haben Codebeispiele bereitgestellt, und die Leser können dies auch versuchen.
In unserem nächsten Tutorial werden wir die Konzepte der Erweiterung von Flask behandeln und sehen, wie REST-API-basierte Funktionen erstellt werden. Darüber hinaus werden wir diskutieren, wie wir die Twitter-API in Flask verwenden können.
bestes programm zum klonen von hdd auf ssd
=> Entdecken Sie hier die Flask Training Series
Literatur-Empfehlungen
- Entwurfsmuster in Java: Singleton, Factory und Builder
- Python Flask Tutorial - Einführung in Flask für Anfänger
- Flask API Tutorial mit Beispiel | Flasche mit APIs erweitern
- Flask App und Flask Project Layout mit Blueprint & Bootstrap
- Django Vs Flask Vs Node: Welches Framework soll ausgewählt werden?
- Top 31 beliebte Python Flask Interview Fragen mit Antworten
- Top 10 Datenbank-Design-Tools zum Erstellen komplexer Datenmodelle
- Top 11 UI / UX-Designtrends: Was Sie 2021 und darüber hinaus erwarten können