flask design patterns
Denne vejledning forklarer nogle af de almindelige flaskedesignmønstre og de bedste fremgangsmåder, der skal følges, mens du designer webapplikationer med eksempler:
Applikationsdesign er et vigtigt aspekt af softwareudvikling. Et ikke-planlagt applikationsdesign resulterer i uoverstigelig teknisk gæld. Derfor, når vi vil skalere vores applikation, er det okay at prøve tidstestede designmønstre.
Flaskesamfundet har mange sådanne eksempler, der kan inspirere dig og påvirke dine designbeslutninger, når du vil prøve et par mønstre til din applikation. Kolben er så uopfattet og fleksibel, at du måske vil kombinere koncepter fra de eksisterende mønstre og oprette en ny.
=> Besøg her for at lære kolbe fra bunden
Hvad du lærer:
Flask Design Patterns
For eksempel, Du finder mange eksempler fra MVC-mønster til Single Page Applications til SAAS-mønster. Du navngiver designparadigmet, og det er der allerede prøvet af nogen i samfundet og er frit tilgængeligt for dig at prøve dine hænder på.
Nedenfor er et par af de arkiver, der er værd at se på.
Flusk
Flusk er et eksempel, som du kan bruge til at oprette store Flask-applikationer, der inkluderer SQLAlchemy, Docker og Nginx. Det har en smuk logisk adskillelse for at skabe backend, domæne, visninger og modeller i deres respektive lag.
Det har fremragende brug af Flask Blueprints og følger Factory design mønster. Det er let at oprette udvidelser i Flusk og er yderligere let at containerisere applikationen ved hjælp af Docker. Se på kildekoden her .
Kogestikskolbe
Cookiecutter Flask er en kolbeskabelon med funktioner såsom bundtning af aktiver og minificering med webpakker. Den har startskabeloner til brugerregistrering / godkendelse og er bygget på Bootstrap 4.
Cookiecutter er et kommandolinjeværktøj til at oprette et Python-pakkeprojekt. Det betyder, at hvis du bruger denne skabelon, kan du også udgive din Flask-applikation som PyPI. Dette projekt er under aktiv udvikling.
Det er værd at evaluere på dette link .
Kolbe fuld
Flask full er endnu en kraftpakket kedelplade, der gør brug af selleri, MongoEngine, signaler, shell-kommandoer, WebSocket og eventlet. Det er ret godt integreret med Swagger API-dokumenter og Sphinx-dokumenter.
Evaluer dette projekt som dets kilde. Det er frit tilgængeligt her .
Flasky
For at oprette lette applikationer kan du overveje Flasky. Flaskys kildekode er tilgængelig her . Dette lager blev oprettet af Miguel Grinberg, der har over 25 års erfaring inden for webudvikling.
Han oprettede Flasky for at give kodeeksempler til de begreber, der blev diskuteret i sin bog kaldet Kolbe-webudvikling .
Uanset hvilken ramme eller skabelon du vælger, har alle disse nogle standardfunktioner og taler om dem på deres egne måder. Vi viser her nogle af disse funktioner og diskuterer dem og implementerer dem, der bruger Flask-Appbuilder i vores eksempelapplikation af denne tutorial-serie.
Denne tutorial diskuterer nogle mere almindelige mønstre, som du finder i næsten alle webapplikationer i dag og er rart at have i sættet til en webudvikler.
Eksempel på flaskens login
En webapplikation kræver normalt, at brugerne registrerer og får adgang til den begrænsede del af applikationen baseret på de tildelte privilegier. Brugerne har tilladelsesbaserede roller. For eksempel, en offentlig bruger har ikke tilladelse til at oprette en anden bruger. En administratorbruger har dog disse tilladelser.
Nogle gange automatiserer webapplikationer brugerregistreringen og brugeroprettelsen ved at tildele dem standard- eller foruddefinerede tilladelser.
Opret bruger offline
Lad os oprette en bruger ved hjælp af kolben fab create-user kommando. Når du har brugt denne kommando, får du kommandolinjeanmodninger om at give detaljerne om brugerkontoen. Giv de detaljer, der svarer til dem, der er vist nedenfor, og din bruger oprettes.
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.
Bemærk, at i slutningen af kommandooutputtet udskriver sqla.manager bekræftelsesmeddelelser til oprettelse af bruger.
Nu får du adgang til applikationen, og log ind med de detaljer, du lige har indtastet. Hvis du har oprettet brugeren i produktionsdatabasen, skal du videregive disse oplysninger til den person, for hvem du oprettede denne konto.
Naviger til http: // localhost: 8080 / login, og du vil se loginformularen som vist nedenfor.
Når bruger1 logger ind, kan brugeren se velkomstmeddelelsen.
Opret bruger online
Det kan være umuligt for os at oprette alle brugere offline. Desuden kan det kræve mere teknisk ekspertise at bruge kommandoen kolbe fab create-user i produktionsmiljøet. Du får muligvis et krav om at fjerne noget arbejdsbelastning fra en administrator, der oftest har til opgave at skabe brugeren.
Lad os derfor i vores eksempel på webapplikation tillade brugere at registrere sig selv.
Vi bruger Googles reCAPTCHA-tjeneste for at forhindre ondsindede aktører i at få adgang til de begrænsede dele af applikationen.
Lad os først registrere vores domæne på Googles reCAPTCHA-tjeneste og erhverve SITE-nøglen og SECRET-nøglen.
Trin 1: Installer Flask-Mail ved hjælp af kommandoen nedenfor.
pip install Flask-Mail
Gå til https://www.google.com/recaptcha/intro/v3.html og log ind som administrator ved hjælp af din Google-konto.
Trin 2: Vælg typen af reCaptcha.
Trin 3: Giv det domæne, som du vil bruge Googles reCaptcha til.
Tilføj også localhost på listen over tilladte domæner for denne nøgle, og accepter vilkårene og indsend dem. Du kan fjerne det senere efter udviklingen af denne funktion.
Trin 4: Noter SITE KEY, som også er kendt som en offentlig nøgle.
Trin 5: Noter den HEMMELIGE Nøgle, der også er kendt som en privat nøgle.
Når du først har noteret tasterne som nævnt ovenfor, er det bedst at gemme dem et sted, hvor disse kan henvises og læses i konfigurationen. Til denne tutorial har vi gemt værdierne som miljøvariabler som SITE_KEY og SECRET_KEY.
Åbn nu config.py og opdater den som vist nedenfor.
# 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'
Du skal muligvis aktivere mindre sikker adgang til din Google-konto. Aktivér kontoadgang på nedenstående webadresser, hvis du sidder fast i e-mail-relaterede problemer.
- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Nu på login-siden kan vi se en ekstra brugerregistreringsknap. Når du klikker på registrering, kan vi se mange felter sammen med reCaptcha Challenge.
Når du har registreret dig med din e-mail og bestået reCaptcha-udfordringen, vil du se en bekræftelsesmeddelelse som vist nedenfor.
Hvis den e-mail, du gav under tilmeldingen, er gyldig, modtager du den e-mail-kontoaktivering, der svarer til den, der vises i nedenstående billede.
Kolbe-administrator
Hvis du har læst de andre selvstudier i denne Flask-tutorial-serie, vil du bemærke, at vi har draget fordel af den indbyggede sikkerhed, der følger med Flask-Appbuilder. De synspunkter, vi tilføjede ved hjælp af add_view_no_menu, er ikke beskyttet. De synspunkter, vi tilføjede baseret på DataModels, er imidlertid automatisk beskyttet for en administratorbruger.
Alternativt kunne vi gøre brug af Flask-Admin, som for det meste ville have opnået et lignende resultat. Kolbe-administrator også, lad os definere visninger på en objektorienteret måde. En webside på frontend repræsenterer en metode på en visningsklasse, som vi eksplicit tilføjer til grænsefladen.
I denne vejledning bruger vi ikke Flask-Admin. I stedet tager vi vejen for at opnå de samme resultater med mere hastighed og springe over nødvendigheden af at vide om sikkerhed, der bygger omkring login, Auths, Roller og tilladelser. Det var muligt, da vi brugte Flask-Appbuilder.
Både Flask-Appbuilder såvel som Flask-Admin har deres fordele og ulemper. I tilfælde af Flask-Admin skal vi vide, at der ikke er nogen eksisterende sikkerhedsforudsætninger, og du kan oprette apps baseret på din sikkerhedsmodel. Hvis du vil vide mere om Flask-Admin, kan du besøge her og gennemgå egnede eksempler.
Upload af kolbefil
Næsten alle webapplikationer i disse dage har kravene til lagring og visning af filer. Et typisk mønster for dem er at gemme filerne på en sti på serveren med nogle oplysninger til at udføre handlingen på den gemte fil og gemme i applikationsmodeller og visninger.
Vi skal arbejde på et lignende eksempel. Lad os ændre vores sangmodel med yderligere funktioner.
Indtast følgende kode i filen models.py.
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))
Vi har ændret vores tidligere oprettede sangmodel ved at tilføje en ny kolonne af typen FileColumn. Derudover har vi tilføjet yderligere to kolonner, der føjes til SongsView for at vise filnavnet og et link til download af den uploadede fil.
Flask url_for-metoden er blevet brugt sammen med Markup for at vise Download som et link. Vi har også brugt get_file_original_name-metoden fra Flask-Appbuilder, da filnavnet er gemt ved at sammenkæde det med en UUID for at undgå kollisioner mellem de samme filnavne.
Rediger views.py med nedenstående kode for at opdatere den tilsvarende SongsView.
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']
I SongsView-klassen har vi nævnt de nye etiketter, der skal vises, og vi vil kun liste de kolonner, der er nævnt i den angivne liste.
Her skal du huske, at vi har ændret en databasemodel ved at tilføje en kolonne til modellen. Den tilsvarende tabel i databasen har ikke denne nye kolonne. Derfor fjerner vi app.db-filen, da vi arbejder på SQLite-databasen siden sidste tutorial.
Alternativt kan vi også bruge kommandoen kolbe db migrere og foretage nødvendige ændringer i versionfilen og bruge kolbe db opgradering til at opdatere tabellen. Den ændring, vi introducerede, er dog minimal, og vi kan genskabe applikationsdatabasen og brugeren.
Vi anbefaler, at du i produktionen overvejer at bruge kommandoer Flask-Migrate, når du foretager ændringer i databaseskemaet for din applikation.
Brug nedenstående kommandoer til at fjerne databasefilen og oprette administratorbrugeren igen.
rm app.db flask fab create-db flask fab create-admin
Log nu ind i applikationen med administratorens legitimationsoplysninger, og du vil se den ændrede SongsView som vist i nedenstående billede.
Tilføj en sang med en fil.
Når du har gemt filen, ser kolonnerne i visningen ud som vist nedenfor.
Bemærk følgende værdier i config.py. De uploadede filer gemmes på denne sti på serveren. Til denne vejledning overføres den til den maskine, som vi udvikler denne prøveapplikation på.
Kontroller uploadstien, som nævnt i config.py. Filerne gemmes med UUID'erne, som vist nedenfor.
Kolbe HTTPS
For så vidt angår udvikling, kan vi fortsætte med at køre vores Flask Application, der kører uden HTTPS. Ud fra et sikkerhedsmæssigt synspunkt sikrer HTTPS, at kommunikation sker mellem legitim klient og server.
Denne krypterede kommunikation kræver, at der oprettes tillid mellem en klient og en server ved hjælp af et CA-signeret certifikat med et par offentlige og private nøgler. Læs mere om det her
I denne vejledning fortæller vi dig metoderne til at udvikle Flask-baserede websteder ved hjælp af HTTP'er under udvikling.
Den hurtigste og nemmeste måde at inkludere HTTPS under udvikling er at bruge en adhoc ssl_context, som nævnt nedenfor i run.py. Imidlertid skal du installere pyopenssl ved hjælp af pip i miljøet.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Når du navigerer til https: // localhost: 8080 / efter at have tilføjet ssl_context, får du en advarsel, der rejser tvivl om gyldigheden af det certifikat, der bruges i denne kommunikation. Desuden fungerer navigation til http: // localhost: 8080 / ikke længere.
Således er denne tilgang lidt besværlig, og det kræver, at du fortsætter med at acceptere denne anmodning, hver gang du genstarter din udviklingsserver.
Du skal klikke på usikker adgang for at fortsætte med at arbejde, som vist nedenfor.
Alternativt kan vi udvikle med https-funktionerne ved at sende stien til certifikatet og indtaste en Python Tuple til ssl_context-parameteren i køremetoden. For at vedtage denne tilgang skal du dog generere et selvsigneret certifikat og en nøgle ved hjælp af kommandoen nedenfor.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Giv passende værdier for de stillede forespørgsler.
Vi har efterladt alle standardværdier. Stop nu udviklingsserveren, og send sti-certifikatet og nøglestien som vist nedenfor.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Denne tilgang svarer også til den tidligere metode til brug af Adhoc ssl_context. I dette tilfælde varer detaljerne imidlertid i længere tid. Vi har nævnt 365 dage. Du kan angive udløbet til de dage, du har brug for. Desuden kan disse filer deles med de andre teammedlemmer, hvis du udvikler dig i et team.
I produktionsmiljøet udstedes certifikaterne af CA, og Miguel Grinberg diskuterer nogle brugssager her . Vi anbefaler, at du læser flere detaljer på denne side.
Konklusion
I denne vejledning har vi diskuteret nogle mønstre, som webudviklere følger, mens de udvikler funktioner relateret til Flask Login, Flask Admin, Flask File Upload og Flask HTTPS. Vi har leveret kodeeksempler, og læserne kan også prøve det.
I vores næste vejledning vil vi dække begreberne med at udvide Flask og se, hvordan man opretter REST API-baserede funktioner. Desuden vil vi diskutere, hvordan vi kan bruge Twitter API inde i Flask.
jar-filer kræves til selen webdriver
=> Udforsk Flask Training Series her
Anbefalet læsning
- Designmønstre i Java: Singleton, fabrik og bygherre
- Python Flask Tutorial - Introduktion til Flask For Beginners
- Flask API-vejledning med eksempel | Udvidelse af kolbe med API'er
- Flask App og Flask Project Layout med Blueprint & Bootstrap
- Django Vs Flask Vs Node: Hvilken ramme skal du vælge
- Top 31 populære Python Flask Interview-spørgsmål med svar
- Top 10 databasedesignværktøjer til opbygning af komplekse datamodeller
- Top 11 UI / UX Designtendenser: Hvad kan man forvente i 2021 og derover