flask design patterns
Denne opplæringen forklarer noen av de vanlige flaskedesignmønstrene og beste praksis å følge når du designer webapplikasjoner med eksempler:
Applikasjonsdesign er et viktig aspekt av programvareutvikling. Et ikke-planlagt applikasjonsdesign resulterer i uoverstigelig teknisk gjeld. Derfor, når vi ønsker å skalere applikasjonen vår, er det greit å prøve tidstestede designmønstre.
Flaskesamfunnet har mange slike eksempler som kan inspirere deg og påvirke designbeslutningene dine når du vil prøve noen få mønstre for applikasjonen din. Flask er så uopinjonert og fleksibel at du kanskje vil kombinere konsepter fra eksisterende mønstre og lage en ny.
=> Besøk her for å lære kolbe fra bunnen av
Hva du vil lære:
Flask Design Patterns
For eksempel, Du vil finne mange eksempler fra MVC-mønster til enkeltsideapplikasjoner til SAAS-mønster. Du kaller designparadigmet, og det er det allerede prøvd av noen i samfunnet og er fritt tilgjengelig for deg å prøve.
Nedenfor er noen av repositoriene verdt å se på.
Flusk
Flusk er et eksempel som du kan bruke til å lage store Flask-applikasjoner som inkluderer SQLAlchemy, Docker og Nginx. Den har en vakker logisk separasjon for å skape backend, domene, visninger og modeller i sine respektive lag.
Den har utmerket bruk av Flask Blueprints og følger Factory design mønsteret. Det er enkelt å lage utvidelser i Flusk, og det er videre enkelt å containerisere applikasjonen ved hjelp av Docker. Ta en titt på kildekoden her .
Stekekolbe
Cookiecutter Flask er en kolbemal med funksjoner som aktivassamling og minifisering med webpakker. Den har startmaler for brukerregistrering / autentisering og er bygget på Bootstrap 4.
Cookiecutter er et kommandolinjeverktøy for å lage et Python-pakkeprosjekt. Det betyr at hvis du bruker denne malen, kan du også publisere Flask-applikasjonen din som PyPI. Dette prosjektet er under aktiv utvikling.
Det er verdt å evaluere på denne lenken .
Kolbe full
Flask full er en kraftpakkepanne til som bruker selleri, MongoEngine, signaler, shell-kommandoer, WebSocket og eventlet. Det er ganske godt integrert med Swagger API-dokumenter og Sphinx-dokumenter.
Evaluer dette prosjektet som kilden. Det er fritt tilgjengelig her .
Flasky
For å lage lette applikasjoner, kan det være lurt å vurdere Flasky. Flaskys kildekode er tilgjengelig her . Dette depotet ble opprettet av Miguel Grinberg, som har over 25 års erfaring innen webutvikling.
Han opprettet Flasky for å gi kodeeksempler for konseptene som ble diskutert i boken hans Flask Web Development .
Uansett hvilken ramme eller mal du velger, har alle disse noen standardfunksjoner og snakker om dem på hver sin måte. Vi lister opp noen av disse funksjonene og diskuterer dem, og implementerer de som bruker Flask-Appbuilder i vår eksempelapplikasjon av denne opplæringsserien.
Denne opplæringen diskuterer noen vanligere mønstre som du finner i nesten alle webapplikasjonene i dag, og som er fine å ha i settet til en webutvikler.
Eksempel på pålogging av kolber
En webapplikasjon krever vanligvis at brukere registrerer seg og får tilgang til den begrensede delen av applikasjonen basert på de tildelte rettighetene. Brukerne har tillatelsesbaserte roller. For eksempel, en offentlig bruker har ikke tillatelse til å opprette en annen bruker. Imidlertid har en administratorbruker disse tillatelsene.
Noen ganger automatiserer webapplikasjoner brukerregistreringen og brukeropprettingen ved å tildele dem standard eller forhåndsdefinerte tillatelser.
Opprett bruker offline
La oss opprette en bruker ved hjelp av kolben fab create-user kommando. Når du har brukt denne kommandoen, vil du få ledetekst for å gi detaljene til brukerkontoen. Gi detaljene som ligner på dem som er vist nedenfor, og brukeren din blir opprettet.
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.
Legg merke til at sqla.manager skriver ut bekreftelsesmeldinger for slutten av kommandoutgangen.
Nå får du tilgang til applikasjonen, og logger på med detaljene du nettopp skrev inn. Hvis du har opprettet brukeren i produksjonsdatabasen, kan du videreformidle disse detaljene til personen du opprettet denne kontoen for.
Naviger til http: // localhost: 8080 / login, og du vil se påloggingsskjemaet som vist nedenfor.

Når bruker1 logger på, kan brukeren se velkomstmeldingen.

Opprett bruker online
Det kan være umulig for oss å opprette alle brukere offline. Videre kan det kreve mer teknisk ekspertise å bruke kolben fab create-user kommando i produksjonsmiljøet. Du kan få et krav om å ta bort litt arbeidsbelastning fra en administrator, som mesteparten av tiden har til oppgave å lage brukeren.
La oss derfor i vårt eksempel på webapplikasjon tillate brukere å registrere seg selv.
Vi bruker Googles reCAPTCHA-tjeneste for å forhindre at ondsinnede aktører får tilgang til de begrensede delene av applikasjonen.
Først, la oss registrere domenet vårt på Googles reCAPTCHA-tjeneste og anskaffe SITE-nøkkelen og SECRET-nøkkelen.
Trinn 1: Installer Flask-Mail ved hjelp av kommandoen nedenfor.
pip install Flask-Mail
Gå til https://www.google.com/recaptcha/intro/v3.html og logg inn som administrator ved hjelp av Google-kontoen din.
Steg 2: Velg type reCaptcha.

Trinn 3: Gi domenet du vil bruke Googles reCaptcha for.
Legg også til localhost i listen over tillatte domener for denne nøkkelen, og godta vilkårene og send dem inn. Du kan fjerne det senere etter utviklingen av denne funksjonen.
Trinn 4: Noter SITE KEY, som også er kjent som en offentlig nøkkel.

Trinn 5: Merk ned HEMMELIG Nøkkel som også er kjent som en privat nøkkel.

Når du noterer tastene som nevnt ovenfor, er det best å lagre dem på et sted der disse kan henvises og leses i konfigurasjonen. For denne opplæringen har vi lagret verdiene som miljøvariabler som SITE_KEY og SECRET_KEY.
Åpne nå config.py og oppdater 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 må kanskje aktivere mindre sikker tilgang til Google-kontoen din. Aktiver kontotilgang på nettadressene nedenfor hvis du får problemer med e-postrelaterte problemer.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Nå på påloggingssiden kan vi se en ekstra brukerregistreringsknapp. Når du klikker på registrering, kan vi se mange felt sammen med reCaptcha Challenge.

Når du registrerer deg med e-postmeldingen din og passerer reCaptcha-utfordringen, vil du se en bekreftelsesmelding, som vist nedenfor.

Hvis e-postmeldingen du ga under registreringen er gyldig, vil du motta e-post for aktivering av kontoen som ligner på den som vises i bildet nedenfor.

Kolbe-administrator
Hvis du har lest de andre opplæringene i denne Flask-opplæringsserien, vil du legge merke til at vi har utnyttet den innebygde sikkerheten som følger med Flask-Appbuilder. Visningene vi la til ved hjelp av add_view_no_menu er ikke beskyttet. Visningene vi la til basert på DataModels blir imidlertid automatisk beskyttet for en administratorbruker.
Alternativt kan vi bruke Flask-Admin, som stort sett ville ha oppnådd et lignende resultat. Flask-Admin også, la oss definere visninger på en objektorientert måte. En webside på frontend representerer en metode på en visningsklasse som vi eksplisitt legger til grensesnittet.
I denne opplæringen bruker vi ikke Flask-Admin. I stedet tar vi veien for å oppnå de samme resultatene med mer hastighet og hoppe over nødvendigheten av å vite om sikkerhetsbygging rundt pålogging, Auths, Roller og tillatelser. Det var mulig da vi brukte Flask-Appbuilder.
Både Flask-Appbuilder og Flask-Admin har sine fordeler og ulemper. Når det gjelder Flask-Admin, må vi vite at det ikke er noen eksisterende sikkerhetsforutsetninger, og du kan opprette apper basert på sikkerhetsmodellen din. Hvis du vil vite mer om Flask-Admin, kan du gå til her og gå gjennom egnede eksempler.
Flaskefilopplasting
Nesten alle webapplikasjoner i disse dager har kravene til lagring og visning av filer. Et typisk mønster for dem er å lagre filene på en sti på serveren, med litt informasjon for å utføre operasjonen på den lagrede filen og beholde i applikasjonsmodeller og visninger.
Vi skal jobbe med et lignende eksempel. La oss endre sangmodellen vår med tilleggsfunksjoner.
Skriv inn følgende kode i modellen.py-filen.
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 modifisert vår tidligere opprettede sangmodell ved å legge til en ny kolonne av typen FileColumn. Videre har vi lagt til to kolonner til som vil bli lagt til SongsView for å vise filnavnet og en lenke for å laste ned den opplastede filen.
Flask url_for-metoden har blitt brukt sammen med Markup for å vise nedlastingen som en lenke. Vi har også brukt get_file_original_name-metoden fra Flask-Appbuilder ettersom filnavnet lagres ved å sammenkoble det med en UUID for å unngå kollisjoner mellom de samme filnavnene.
Endre views.py med koden nedenfor for å oppdatere den korresponderende 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 nevnt de nye etikettene som må vises, og vi vil bare liste kolonnene som er nevnt i den angitte listen.
Her må du huske at vi har endret en databasemodell ved å legge til en kolonne i modellen. Den tilsvarende tabellen i databasen har ikke denne nye kolonnen. Derfor vil vi fjerne app.db-filen, ettersom vi jobber med SQLite-databasen siden forrige opplæring.
Alternativt kan vi også bruke kommandoen kolbe db migrere og gjøre nødvendige endringer i versjonsfilen, og bruke kolbe db oppgradering for å oppdatere tabellen. Endringen vi introduserte er imidlertid minimal, og vi kan gjenskape applikasjonsdatabasen og brukeren.
Vi anbefaler at du i produksjon vurderer å bruke Flask-Migrate-kommandoene når du gjør noen endringer i databaseskjemaet for applikasjonen din.
Bruk kommandoene nedenfor for å fjerne databasefilen og opprette administratorbrukeren igjen.
rm app.db flask fab create-db flask fab create-admin
Logg deg nå på applikasjonen med administratorlegitimasjonen, og du vil se den modifiserte SongsView som vist i bildet nedenfor.

Legg til en sang med en fil.

Når du har lagret filen, vil kolonnene i visningen se ut som vist nedenfor.

Legg merke til følgende verdier i config.py. De opplastede filene lagres på denne banen på serveren. For denne opplæringen vil den lastes opp til maskinen vi utvikler denne prøveprogrammet på.
Sjekk opplastingsstien, som nevnt i config.py. Filene lagres med UUID-ene, som vist nedenfor.

Kolbe HTTPS
Når det gjelder utvikling, kan vi fortsette å kjøre Flask-applikasjonen vår uten HTTPS. Fra et sikkerhetsmessig synspunkt sørger HTTPS for at kommunikasjon skjer mellom legitim klient og server.
Denne krypterte kommunikasjonen krever at det opprettes tillit mellom en klient og en server ved hjelp av et CA-signert sertifikat med et par offentlige og private nøkler. Les mer om det her
I denne opplæringen vil vi fortelle deg metodene for å utvikle Flask-baserte nettsteder som bruker HTTP-er under utvikling.
Den raskeste og enkleste måten å inkludere HTTPS under utvikling er å bruke en adhoc ssl_context, som nevnt nedenfor i run.py. Imidlertid må du installere pyopenssl ved hjelp av pip i miljøet.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Etter at du har lagt til ssl_context, når du navigerer til https: // localhost: 8080 /, vil du få en advarsel som reiser tvil om gyldigheten av sertifikatet som brukes i denne kommunikasjonen. Videre vil navigering til http: // localhost: 8080 / ikke fungere lenger.
Dermed er denne tilnærmingen litt tungvint, og det vil kreve at du fortsetter å godta denne forespørselen hver gang du starter utviklingsserveren på nytt.
Du må klikke på usikker tilgang for å fortsette å jobbe, som vist nedenfor.

Alternativt, for å utvikle med https-funksjonene, kan vi sende banen til sertifikatet og tast inn en Python Tuple til ssl_context-parameteren i kjøringsmetoden. For å bruke denne tilnærmingen må du imidlertid generere et selvsignert sertifikat og en nøkkel ved å bruke kommandoen nedenfor.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Gi passende verdier for de spurte spørsmålene.

Vi har igjen alle standardverdiene. Stopp nå utviklingsserveren, og send banesertifikatet og nøkkelbanen som vist nedenfor.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Denne tilnærmingen er også lik den forrige metoden for bruk av Adhoc ssl_context. Imidlertid vedvarer detaljene i lengre tid. Vi har nevnt 365 dager. Du kan spesifisere utløpet til dagene du trenger. Dessuten kan disse filene deles med de andre teammedlemmene hvis du utvikler deg i et team.
I produksjonsmiljøet utstedes sertifikatene av CA, og Miguel Grinberg diskuterer noen brukssaker her . Vi anbefaler at du leser mer informasjon på den siden.
Konklusjon
I denne opplæringen har vi diskutert noen mønstre som webutviklere følger mens vi utvikler funksjoner relatert til Flask Login, Flask Admin, Flask File Upload og Flask HTTPS. Vi har gitt kodeeksempler, og leserne kan også prøve det.
I vår neste opplæring vil vi dekke konseptene med å utvide Flask og se hvordan du oppretter REST API-baserte funksjoner. Videre vil vi diskutere hvordan vi kan bruke Twitter API i Flask.
liste opp og forklar minst to ting du kan oppnå ved å teste programvare for sikkerhetsproblemer.
=> Utforsk Flask Training Series her
Anbefalt lesing
- Designmønstre i Java: Singleton, Factory And Builder
- Python Flask Tutorial - Introduction to Flask For Beginners
- Flask API-veiledning med eksempel | Utvide kolbe med API-er
- Flask App og Flask Project Layout With Blueprint & Bootstrap
- Django Vs Flask Vs Node: Hvilken ramme du skal velge
- Topp 31 populære Python Flask-intervjuspørsmål med svar
- Topp 10 databasedesignverktøy for å bygge komplekse datamodeller
- Topp 11 UI / UX-designtrender: Hva du kan forvente i 2021 og utover