flask design patterns
In deze tutorial worden enkele veelvoorkomende Flask-ontwerppatronen en best practices uitgelegd die moeten worden gevolgd bij het ontwerpen van webapplicaties met voorbeelden:
Applicatieontwerp is een essentieel aspect van softwareontwikkeling. Een ongepland applicatieontwerp resulteert in onoverkomelijke technische schulden. Daarom is het oké om, wanneer we onze applicatie willen opschalen, beproefde ontwerppatronen uit te proberen.
De Flask-gemeenschap heeft veel van dergelijke voorbeelden die u kunnen inspireren en van invloed kunnen zijn op uw ontwerpbeslissingen wanneer u een paar patronen voor uw toepassing wilt uitproberen. Flask is zo onbevooroordeeld en flexibel dat je misschien concepten uit de bestaande patronen wilt combineren en een nieuwe wilt creëren.
Bezoek hier om Flask From Scratch te leren
Wat je leert:
Kolf ontwerppatronen
Bijvoorbeeld, U zult veel voorbeelden vinden van het MVC-patroon tot Single Page Applications tot SAAS-patroon. U noemt het ontwerpparadigma, en het is daar al uitgeprobeerd door iemand in de gemeenschap en is gratis beschikbaar om uit te proberen.
Hieronder vindt u enkele van de repositories die het bekijken waard zijn.
Flusk
Flusk is een voorbeeld dat u kunt gebruiken om grote Flask-applicaties te maken die SQLAlchemy, Docker en Nginx bevatten. Het heeft een prachtige logische scheiding om backend, domein, weergaven en modellen in hun respectieve lagen te maken.
Het maakt uitstekend gebruik van Flask Blueprints en volgt het ontwerppatroon van de fabriek. Het is gemakkelijk om extensies te maken in Flusk, en het is verder eenvoudig om de applicatie te containeriseren met Docker. Bekijk de broncode hier
Cookiecutter kolf
Cookiecutter Flask is een flask-sjabloon met functies zoals het bundelen van activa en het verkleinen met webpacks. Het heeft startersjablonen voor gebruikersregistratie / authenticatie en is gebouwd op Bootstrap 4.
Cookiecutter is een opdrachtregelprogramma om een Python-pakketproject te maken. Het betekent dat als u deze sjabloon gebruikt, u uw Flask-applicatie ook als PyPI kunt publiceren. Dit project is in actieve ontwikkeling.
Het is de moeite waard om te evalueren op deze link
Kolf vol
Flask full is nog een krachtige boilerplate die gebruik maakt van Celery, MongoEngine, Signals, Shell-opdrachten, WebSocket en eventlet. Het is redelijk goed geïntegreerd met Swagger API-documenten en Sphinx-documenten.
Beoordeel dit project als zijn bron. Het is vrij verkrijgbaar hier
Flasky
Voor het maken van lichtgewicht applicaties, kunt u Flasky overwegen. De broncode van Flasky is beschikbaar hier Deze repository is gemaakt door Miguel Grinberg, die meer dan 25 jaar ervaring heeft in webontwikkeling.
Hij creëerde Flasky om codevoorbeelden te geven voor de concepten die in zijn boek worden besproken Kolf webontwikkeling
Welk framework of sjabloon u ook kiest, deze hebben allemaal een aantal standaardfuncties en praten daar op hun eigen manier over. We zetten hier enkele van deze functies op een rij en bespreken ze, en implementeren die met Flask-Appbuilder in onze voorbeeldtoepassing van deze tutorialserie.
Deze tutorial bespreekt enkele meer algemene patronen die je tegenwoordig in bijna alle webapplicaties zult vinden en die leuk zijn om te hebben in de kit van een webontwikkelaar.
Voorbeeld van inloggen in een fles
Een webapplicatie vereist meestal dat gebruikers zich registreren en toegang krijgen tot het beperkte deel van de applicatie op basis van de toegewezen privileges. De gebruikers hebben op toestemming gebaseerde rollen. Bijvoorbeeld, een openbare gebruiker heeft geen toestemming om nog een gebruiker te maken. Een Admin-gebruiker heeft echter die rechten.
Soms automatiseren webtoepassingen de gebruikersregistratie en het aanmaken van gebruikers door hen de standaard of vooraf gedefinieerde machtigingen toe te wijzen.
Maak een gebruiker offline
Laten we een gebruiker maken met behulp van de opdracht flask fab create-user. Zodra u deze opdracht gebruikt, krijgt u opdrachtregelprompts om de details van het gebruikersaccount te geven. Geef de details op die lijken op de details die hieronder worden weergegeven, en uw gebruiker wordt aangemaakt.
Merk op dat aan het einde van de opdrachtuitvoer de sqla.manager bevestigingsberichten afdrukt voor het maken van een gebruiker.
Ga nu naar de applicatie en log in met de gegevens die u zojuist hebt ingevoerd. Als u de gebruiker in de productiedatabase heeft aangemaakt, geef die gegevens dan door aan de persoon voor wie u dit account heeft aangemaakt.
Navigeer naar http: // localhost: 8080 / login, en u ziet het inlogformulier zoals hieronder weergegeven.

Zodra de gebruiker1 inlogt, kan de gebruiker het welkomstbericht zien.

Maak een gebruiker online
Het is voor ons misschien onmogelijk om alle gebruikers offline te maken. Bovendien kan er meer technische expertise nodig zijn om het commando flask fab create-user in de productieomgeving te gebruiken. Mogelijk krijgt u de vereiste om wat werklast weg te nemen van een beheerder, die meestal is belast met het maken van de gebruiker.
Laten we daarom in onze voorbeeldwebapplicatie gebruikers toestaan zichzelf te registreren.
We gebruiken de reCAPTCHA-service van Google om te voorkomen dat kwaadwillende actoren toegang krijgen tot de beperkte delen van de applicatie.
Laten we eerst ons domein registreren bij de reCAPTCHA-service van Google en de SITE-sleutel en de SECRET-sleutel ophalen.
Stap 1: Installeer Flask-Mail met de onderstaande opdracht.
Ga naar https://www.google.com/recaptcha/intro/v3.html en log in als beheerder met je Google-account.
Stap 2: Kies het type reCaptcha.

Stap 3: Geef het domein op waarvoor u Google’s reCaptcha wilt gebruiken.
Voeg ook de localhost toe aan de lijst met toegestane domeinen voor deze sleutel, accepteer de voorwaarden en dien ze in. U kunt het later verwijderen na de ontwikkeling van deze functie.
Stap 4: Noteer de SITE KEY die ook bekend staat als een openbare sleutel.

Stap 5: Noteer de GEHEIME SLEUTEL die ook bekend staat als een persoonlijke sleutel.

Zodra u de sleutels hebt genoteerd zoals hierboven vermeld, kunt u ze het beste bewaren op een plaats waar ze kunnen worden geraadpleegd en gelezen in de configuratie. Voor deze tutorial hebben we de waarden als omgevingsvariabelen opgeslagen als SITE_KEY en SECRET_KEY.
Open nu de config.py en werk deze bij zoals hieronder weergegeven.
Mogelijk moet u minder veilige toegang tot uw Google-account inschakelen. Schakel accounttoegang in op de onderstaande URL's als u vastloopt in e-mailgerelateerde problemen.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Nu kunnen we op de inlogpagina een extra knop voor gebruikersregistratie zien. Zodra je op registratie klikt, kunnen we veel velden zien samen met de reCaptcha-uitdaging.

Zodra je je hebt geregistreerd met je e-mailadres en geslaagd bent voor de reCaptcha-uitdaging, zie je een bevestigingsbericht, zoals hieronder weergegeven.

Als de e-mail die u tijdens de registratie heeft opgegeven geldig is, ontvangt u de e-mail voor accountactivering die lijkt op de e-mail in de onderstaande afbeelding.

Flask Admin
Als je de andere tutorials in deze Flask-tutorialserie hebt gelezen, zul je merken dat we gebruik hebben gemaakt van de ingebouwde beveiliging die bij Flask-Appbuilder wordt geleverd. De views die we hebben toegevoegd met add_view_no_menu zijn niet beveiligd. De weergaven die we hebben toegevoegd op basis van DataModels, worden echter automatisch beschermd voor een Admin-gebruiker.
Als alternatief zouden we gebruik kunnen maken van Flask-Admin, wat meestal een vergelijkbaar resultaat zou hebben bereikt. Laten we ook Flask-Admin bekijken op een objectgeoriënteerde manier. Een webpagina op de frontend vertegenwoordigt een methode voor een viewklasse die we expliciet aan de interface toevoegen.
In deze tutorial gebruiken we geen Flask-Admin. In plaats daarvan volgen we het pad om dezelfde resultaten sneller te bereiken en de noodzaak over te slaan over de beveiliging die is opgebouwd rond Login, Auths, Rollen en permissies. Het was mogelijk omdat we Flask-Appbuilder gebruikten.
Zowel Flask-Appbuilder als Flask-Admin hebben hun voor- en nadelen. In het geval van Flask-Admin moeten we weten dat er geen bestaande beveiligingsaannames zijn en dat u apps kunt maken op basis van uw beveiligingsmodel. Ga voor meer informatie over Flask-Admin naar hier en ga door geschikte voorbeelden.
Flask File Upload
Bijna alle webapplicaties hebben tegenwoordig de vereisten voor het opslaan en serveren van bestanden. Een typisch patroon voor hen is om de bestanden op een pad op de server op te slaan, met wat informatie om de bewerking op het opgeslagen bestand uit te voeren en in applicatiemodellen en weergaven te bewaren.
We gaan aan een soortgelijk voorbeeld werken. Laten we ons songmodel aanpassen met extra functies.
Voer in het models.py-bestand de volgende code in.
We hebben ons eerder gemaakte Song-model aangepast door een nieuwe kolom van het type FileColumn toe te voegen. Verder hebben we nog twee kolommen toegevoegd die aan de SongsView zullen worden toegevoegd om de bestandsnaam weer te geven en een link om het geüploade bestand te downloaden.
De methode Flask url_for is samen met Markup gebruikt om de download als een link weer te geven. We hebben ook de get_file_original_name-methode van de Flask-Appbuilder gebruikt, aangezien de bestandsnaam wordt opgeslagen door deze samen te voegen met een UUID om botsingen tussen dezelfde bestandsnamen te voorkomen.
Wijzig views.py met de onderstaande code om de bijbehorende SongsView bij te werken.
In de SongsView-klasse hebben we de nieuwe labels genoemd die moeten worden weergegeven, en we willen alleen de kolommen vermelden die in de opgegeven lijst worden genoemd.
Hier moet u onthouden dat we een databasemodel hebben aangepast door een kolom aan het model toe te voegen. De bijbehorende tabel in de database heeft deze nieuwe kolom niet. Daarom zullen we het app.db-bestand verwijderen, aangezien we sinds de laatste tutorial aan de SQLite-database werken.
Als alternatief kunnen we ook de flask db migrate-opdracht gebruiken en de nodige wijzigingen aanbrengen in het versiebestand, en flask db upgrade gebruiken om de tabel bij te werken. De wijziging die we hebben doorgevoerd is echter minimaal en we kunnen de applicatiedatabase en de gebruiker opnieuw maken.
We raden aan om tijdens de productie te overwegen om de Flask-Migrate-opdrachten te gebruiken wanneer u wijzigingen aanbrengt in het databaseschema van uw toepassing.
Gebruik de onderstaande opdrachten om het databasebestand te verwijderen en de admin-gebruiker opnieuw aan te maken.
Log nu in op de applicatie met de beheerdersreferenties en u zult de gewijzigde SongsView zien zoals weergegeven in de onderstaande afbeelding.

Voeg een nummer toe met een bestand.

Nadat u het bestand heeft opgeslagen, zien de kolommen in de weergave eruit zoals hieronder weergegeven.

Let op de volgende waarden in config.py. De geüploade bestanden worden op dit pad op de server opgeslagen. Voor deze tutorial wordt het geüpload naar de machine waarop we deze voorbeeldtoepassing ontwikkelen.
Controleer het uploadpad, zoals vermeld in config.py. De bestanden worden opgeslagen met de UUID's, zoals hieronder weergegeven.

Kolf HTTPS
Wat de ontwikkeling betreft, kunnen we doorgaan met het draaien van onze Flask-applicatie zonder HTTPS. Vanuit veiligheidsoogpunt zorgt HTTPS ervoor dat communicatie plaatsvindt tussen legitieme client en server.
Deze gecodeerde communicatie vereist dat er vertrouwen is tussen een client en een server, met behulp van een door een CA ondertekend certificaat met een paar openbare en privésleutels. Lees er meer over hier
In deze zelfstudie laten we u de methoden kennen om op Flask gebaseerde websites te ontwikkelen met HTTP's tijdens de ontwikkeling.
De snelste en gemakkelijkste manier om HTTPS tijdens de ontwikkeling op te nemen, is door een adhoc ssl_context te gebruiken, zoals hieronder vermeld in run.py. Installeer pyopenssl echter met pip in de omgeving.
Nadat u ssl_context heeft toegevoegd en u naar https: // localhost: 8080 / navigeert, krijgt u een waarschuwing die twijfel doet rijzen over de geldigheid van het certificaat dat in deze communicatie wordt gebruikt. Bovendien zal navigatie naar http: // localhost: 8080 / niet meer werken.
Deze benadering is dus een beetje omslachtig en vereist dat u dit verzoek blijft accepteren telkens wanneer u uw ontwikkelserver opnieuw opstart.
U moet op onveilige toegang klikken om verder te werken, zoals hieronder weergegeven.

Als alternatief, om te ontwikkelen met de https-functies, kunnen we het pad naar het certificaat doorgeven en een Python-tuple intoetsen naar de parameter ssl_context in de run-methode. Om deze aanpak toe te passen, moet u een zelfondertekend certificaat en een sleutel genereren met behulp van de onderstaande opdracht.
Geef de juiste waarden voor de gestelde vragen.

We hebben alle standaardwaarden gelaten. Stop nu de ontwikkelingsserver en geef het padcertificaat en het sleutelpad door, zoals hieronder weergegeven.
Deze benadering is ook vergelijkbaar met de vorige methode om Adhoc ssl_context te gebruiken. In dit geval blijven de details echter langer bestaan. We hebben 365 dagen genoemd. U kunt de vervaldatum opgeven voor de dagen die u nodig heeft. Bovendien kunnen deze bestanden worden gedeeld met de andere teamleden als u zich in teamverband ontwikkelt.
In de productieomgeving worden de certificaten uitgegeven door de CA en Miguel Grinberg bespreekt enkele use cases hier We raden u aan meer details op die pagina te lezen.
Gevolgtrekking
In deze tutorial hebben we enkele patronen besproken die webontwikkelaars volgen bij het ontwikkelen van functies met betrekking tot Flask Login, Flask Admin, Flask File Upload en Flask HTTPS. We hebben codevoorbeelden gegeven en de lezers kunnen dat ook proberen.
In onze volgende zelfstudie behandelen we de concepten van het uitbreiden van Flask en zien we hoe u op REST API gebaseerde functies kunt maken. Bovendien zullen we bespreken hoe we Twitter API in Flask kunnen gebruiken.
wat is de beste YouTube-videoconvertor
Ontdek hier de Flask Training Series
Aanbevolen literatuur
- Ontwerppatronen in Java: Singleton, Factory en Builder
- Python Flask-zelfstudie - Inleiding tot Flask voor beginners
- Flask API-zelfstudie met voorbeeld | Kolf uitbreiden met API's
- Flask-app en Flask-projectlay-out met blauwdruk en bootstrap
- Django Vs Flask Vs Node: welk framework te selecteren
- Top 31 populaire Python Flask-interviewvragen met antwoorden
- Top 10 tools voor databaseontwerp om complexe datamodellen te bouwen
- Top 11 UI / UX-ontwerptrends: wat te verwachten in 2021 en daarna