flask design patterns
Ta vadnica s primeri ponazarja nekaj običajnih vzorcev oblikovanja Flask in najboljše prakse, ki jih je treba upoštevati pri oblikovanju spletnih aplikacij:
Oblikovanje aplikacij je bistveni vidik razvoja programske opreme. Nenačrtovana zasnova aplikacije povzroči nepremostljiv tehnični dolg. Torej, kadar želimo razširiti svojo aplikacijo, je v redu, da preizkusimo časovno preizkušene vzorce oblikovanja.
Skupnost Flask ima veliko takih primerov, ki vas lahko navdihnejo in vplivajo na vaše oblikovalske odločitve, ko želite preizkusiti nekaj vzorcev za svojo aplikacijo. Flask je tako neomejen in prilagodljiv, da bi morda radi združili koncepte iz obstoječih vzorcev in ustvarili novega.
=> Obiščite tukaj in se naučite bučke iz nič
Kaj se boste naučili:
Vzorci oblikovanja bučk
Na primer, Našli boste veliko primerov od vzorca MVC do aplikacij z eno stranjo do vzorca SAAS. Poimenujete oblikovalsko paradigmo, ki jo je že preizkusil nekdo v skupnosti in je na voljo za vas, da se preizkusite.
Spodaj je navedenih nekaj skladišč, ki si jih je vredno ogledati.
Flusk
Flusk je primer, ki ga lahko uporabite za ustvarjanje velikih aplikacij Flask, ki vključujejo SQLAlchemy, Docker in Nginx. Ima čudovito logično ločitev za ustvarjanje zaledja, domene, pogledov in modelov v njihove sloje.
Odlično uporablja Flask Blueprints in sledi vzorcu tovarniške zasnove. V programu Flusk je enostavno ustvariti razširitve, poleg tega pa je z uporabo Dockerja enostavno vključiti aplikacijo. Oglejte si njegovo izvorno kodo tukaj .
Bučka za piškote
Cookiecutter Flask je predloga bučke s funkcijami, kot sta združevanje sredstev in minifikacija s spletnimi paketi. Ima začetne predloge za registracijo / preverjanje pristnosti uporabnika in je zgrajen na Bootstrapu 4.
Cookiecutter je pripomoček v ukazni vrstici za ustvarjanje projekta paketa Python. To pomeni, da lahko, če uporabljate to predlogo, svojo aplikacijo Flask objavite tudi kot PyPI. Ta projekt se aktivno razvija.
Vredno je oceniti na to povezavo .
Bučka polna
Flask full je še ena napajalna plošča, ki uporablja Celery, MongoEngine, Signals, Shell ukaze, WebSocket in eventlet. Je precej dobro integriran z dokumenti Swagger API in Sphinx.
Ocenite ta projekt kot njegov vir. Na voljo je prosto tukaj .
Rahlo
Za ustvarjanje lahkih aplikacij boste morda želeli razmisliti o Flaskyju. Na voljo je izvorna koda Flasky tukaj . To skladišče je ustvaril Miguel Grinberg, ki ima več kot 25 let izkušenj na področju spletnega razvoja.
Ustvaril je Flaskyja, da bi zagotovil primere kod za koncepte, obravnavane v njegovi knjigi z naslovom Spletni razvoj bučke .
Ne glede na to, katero ogrodje ali predlogo izberete, imajo vse te nekatere standardne funkcije in o njih govorijo na svoj način. Tukaj navajamo nekatere od teh funkcij in razpravljamo o njih ter izvajamo tiste, ki uporabljajo Flask-Appbuilder, v naši vzorčni aplikaciji te vadnice.
Ta vadnica razpravlja o nekaterih pogostejših vzorcih, ki jih boste danes našli v skoraj vseh spletnih aplikacijah in jih je lepo imeti v kompletu spletnega razvijalca.
Primer prijave za bučko
Spletna aplikacija običajno zahteva, da se uporabniki registrirajo in dostopajo do omejenega dela aplikacije na podlagi dodeljenih pravic. Uporabniki imajo vloge na podlagi dovoljenj. Na primer, javni uporabnik nima dovoljenja za ustvarjanje drugega uporabnika. Vendar ima uporabnik skrbnika ta dovoljenja.
Spletne aplikacije včasih avtomatizirajo registracijo in ustvarjanje uporabnikov z dodelitvijo privzetih ali vnaprej določenih dovoljenj.
Ustvari uporabnika brez povezave
Ustvarimo uporabnika z uporabo ukaza flask fab create-user. Ko uporabite ta ukaz, boste prejeli pozive ukazne vrstice za podrobnosti o uporabniškem računu. Navedite podrobnosti, podobne prikazanim spodaj, in vaš uporabnik je ustvarjen.
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.Upoštevajte, da na koncu izpisa ukaza sqla.manager natisne potrditvena sporočila za ustvarjanje uporabnika.
Zdaj odprite aplikacijo in se prijavite s podatki, ki ste jih pravkar vnesli. Če ste ustvarili uporabnika v zbirki podatkov, potem te podatke posredujte osebi, za katero ste ustvarili ta račun.
Pojdite na http: // localhost: 8080 / login in videli boste prijavni obrazec, kot je prikazano spodaj.

Ko se uporabnik1 prijavi, lahko uporabnik vidi pozdravno sporočilo.

Ustvari uporabnika v spletu
Morda nam bo nemogoče ustvariti vse uporabnike brez povezave. Poleg tega bo morda treba uporabiti več tehničnega znanja za uporabo ukaza za izdelavo uporabnika bučke v proizvodnem okolju. Od skrbnika, ki je večino časa zadolžen za ustvarjanje uporabnika, boste morda dobili zahtevo za odstranitev dela.
Zato v našem primeru spletne aplikacije omogočimo uporabnikom, da se sami registrirajo.
Z Googlovo storitvijo reCAPTCHA preprečujemo zlonamernim akterjem dostop do omejenih delov aplikacije.
Najprej registrirajmo svojo domeno v Googlovi storitvi reCAPTCHA in pridobimo ključ SITE in SECRET.
Korak 1: Namestite Flask-Mail z uporabo spodnjega ukaza.
pip install Flask-MailPojdite na https://www.google.com/recaptcha/intro/v3.html in se z Google Računom prijavite kot skrbnik.
2. korak: Izberite vrsto reCaptcha.

3. korak: Navedite domeno, za katero želite uporabiti Googlovo reCaptcha.

Na seznam dovoljenih domen za ta ključ dodajte tudi lokalnega gostitelja, sprejmite pogoje in jih oddajte. Pozneje po razvoju te funkcije ga lahko odstranite.
4. korak: Zapišite si KLJUČ SITE, ki je znan tudi kot javni ključ.

5. korak: Zapomnite si TAJNI KLJUČ, ki je znan tudi kot zasebni ključ.

Ko si zapišete tipke, kot je omenjeno zgoraj, jih je najbolje shraniti tam, kjer jih je mogoče napotiti in prebrati v konfiguraciji. V tej vadnici smo vrednosti shranili kot spremenljivki okolja kot SITE_KEY in SECRET_KEY.
Zdaj odprite config.py in ga posodobite, kot je prikazano spodaj.
# 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'Morda boste morali omogočiti manj varen dostop do svojega Google Računa. Omogočite dostop do računa na spodnjih URL-jih, če se zataknete pri težavah, povezanih z e-pošto.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Zdaj na strani za prijavo lahko vidimo dodaten gumb za registracijo uporabnika. Ko kliknete na registracijo, lahko vidimo veliko polj skupaj z izzivom reCaptcha.

Ko se registrirate s svojim e-poštnim naslovom in opravite izziv reCaptcha, se prikaže potrditveno sporočilo, kot je prikazano spodaj.

Če je e-poštno sporočilo, ki ste ga navedli med registracijo, veljavno, boste prejeli e-poštno sporočilo za aktivacijo računa, podobno tistemu, ki je prikazano na spodnji sliki.

Administrator bučke
Če ste prebrali druge vaje v tej vadnici Flask, boste opazili, da smo izkoristili vgrajeno varnost, ki je priložena Flask-Appbuilderju. Pogledi, ki smo jih dodali s pomočjo add_view_no_menu, niso zaščiteni. Vendar so pogledi, ki smo jih dodali na podlagi podatkovnih modelov, samodejno zaščiteni za uporabnika skrbnika.
Lahko bi uporabili tudi Flask-Admin, ki bi večinoma dosegel podoben rezultat. Tudi Flask-Admin določimo poglede na objektno usmerjen način. Spletna stran na čelni strani predstavlja metodo v razredu pogleda, ki jo izrecno dodamo v vmesnik.
V tej vadnici ne uporabljamo Flask-Admin. Namesto tega gremo po poti, da dosežemo enake rezultate z večjo hitrostjo in preskočimo potrebo po vedenju o gradnji varnosti okoli prijav, avtorjev, vlog in dovoljenj. To je bilo mogoče, saj smo uporabili Flask-Appbuilder.
Tako Flask-Appbuilder kot Flask-Admin imata svoje prednosti in slabosti. V primeru Flask-Admin moramo vedeti, da ne obstajajo varnostne predpostavke in lahko ustvarjate aplikacije na podlagi vašega varnostnega modela. Če želite izvedeti več o Flask-Admin, obiščite tukaj in si oglejte primerne primere.
Nalaganje datoteke bučke
Skoraj vse spletne aplikacije dandanes zahtevajo shranjevanje in servisiranje datotek. Tipičen vzorec zanje je shranjevanje datotek na poti v strežniku, z nekaj informacijami za izvajanje operacije na shranjeni datoteki in shranjevanje v aplikacijskih modelih in pogledih.
Delali bomo na podobnem primeru. Spremenimo naš model pesmi z dodatnimi funkcijami.
V datoteko models.py vnesite naslednjo kodo.
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)) Spremenili smo naš predhodno ustvarjeni model pesmi z dodajanjem novega stolpca vrste FileColumn. Poleg tega smo dodali še dva stolpca, ki bosta dodana v SongsView za prikaz imena datoteke in povezave za prenos naložene datoteke.
Metoda bučke url_for je bila uporabljena skupaj z označevanjem za prikaz povezave Prenos. Uporabili smo tudi metodo get_file_original_name iz Flask-Appbuilderja, saj je ime datoteke shranjeno tako, da jo združimo z UUID, da se prepreči trčenje med istimi imeni datotek.
Spremenite views.py s spodnjo kodo, da posodobite ustrezen 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')V razredu SongsView smo omenili nove oznake, ki jih je treba prikazati, in želimo navesti samo stolpce, omenjene na navedenem seznamu.
Tukaj se morate spomniti, da smo model baze podatkov spremenili tako, da smo mu dodali stolpec. Ustrezna tabela v zbirki podatkov nima tega novega stolpca. Zato bomo odstranili datoteko app.db, saj od zadnje vaje delamo na zbirki podatkov SQLite.
Lahko pa uporabimo tudi ukaz flask db migrate in spremenimo datoteko različice ter nadgradnjo tabele uporabimo za nadgradnjo flask db. Sprememba, ki smo jo uvedli, je minimalna, zato lahko znova ustvarimo bazo aplikacij in uporabnika.
Priporočamo, da v proizvodnji razmislite o uporabi ukazov Flask-Migrate, kadar koli spremenite shemo zbirke podatkov vaše aplikacije.
Z spodnjimi ukazi odstranite datoteko baze podatkov in znova ustvarite skrbniškega uporabnika.
rm app.db flask fab create-db flask fab create-adminZdaj se prijavite v aplikacijo s skrbniškimi poverilnicami in videli boste spremenjeni SongsView, kot je prikazano na spodnji sliki.

Dodajte skladbo z datoteko.

Ko datoteko shranite, bodo stolpci v pogledu videti, kot je prikazano spodaj.

Upoštevajte naslednje vrednosti v config.py. Naložene datoteke bodo na tej poti shranjene v strežniku. Za to vadnico bo naloženo v računalnik, na katerem razvijamo to vzorčno aplikacijo.
Preverite pot za nalaganje, kot je omenjeno v config.py. Datoteke so shranjene v UUID-jih, kot je prikazano spodaj.

Bučka HTTPS
Kar zadeva razvoj, lahko aplikacijo Flask še naprej izvajamo brez HTTPS. Z vidika varnosti HTTPS zagotavlja komunikacijo med zakonitim odjemalcem in strežnikom.
Ta šifrirana komunikacija zahteva, da se med odjemalcem in strežnikom vzpostavi zaupanje z uporabo potrdila s podpisom CA s parom javnih in zasebnih ključev. Preberite več o tem tukaj
V tej vadnici vas bomo seznanili z metodami za razvoj spletnih strani, ki temeljijo na bučki in uporabljajo HTTP med razvojem.
Najhitrejši in najlažji način vključitve HTTPS med razvojem je uporaba adhoc ssl_context, kot je omenjeno spodaj v run.py. Prosimo, namestite pyopenssl z uporabo pipa v okolje.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')Po dodajanju ssl_context, ko se pomaknete na https: // localhost: 8080 /, boste dobili opozorilo, ki vzbuja dvom o veljavnosti potrdila, ki se uporablja v tej komunikaciji. Poleg tega navigacija do http: // localhost: 8080 / ne bo več delovala.
Tako je ta pristop nekoliko okoren in bo zahteval, da to zahtevo še naprej sprejemate vsakič, ko znova zaženete svoj razvojni strežnik.
Če želite nadaljevati z delom, kliknite na nevaren dostop, kot je prikazano spodaj.

Za razvoj s funkcijami https lahko tudi prenesemo pot do potrdila in ključ v Python Tuple parametru ssl_context v metodi zagon. Če želite uporabiti ta pristop, boste morali z uporabo spodnjega ukaza ustvariti samopodpisano potrdilo in ključ.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365Navedite ustrezne vrednosti za postavljene poizvedbe.

Pustili smo vse privzete vrednosti. Zdaj ustavite razvojni strežnik in posredujte potrdilo o poti in pot ključa, kot je prikazano spodaj.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))Ta pristop je podoben tudi prejšnji metodi uporabe Adhoc ssl_context. Vendar v tem primeru podrobnosti vztrajajo dlje časa. Omenili smo 365 dni. Določite lahko rok trajanja do dni, ki jih potrebujete. Poleg tega lahko te datoteke delite z drugimi člani ekipe, če se razvijate v skupini.
V proizvodnem okolju potrdila izda CA, Miguel Grinberg pa razpravlja o nekaterih primerih uporabe tukaj . Priporočamo, da na tej strani preberete več podrobnosti.
Zaključek
V tej vadnici smo razpravljali o nekaterih vzorcih, ki jih spletni razvijalci upoštevajo pri razvoju funkcij, povezanih s prijavo za bučko, skrbnikom za bučko, prenosom bučke in HTTPS za bučko. Navedli smo primere kode in bralci lahko to tudi preizkusijo.
V naslednji vadnici bomo obravnavali koncepte razširitve Flaska in videli, kako ustvariti funkcije, ki temeljijo na API-ju REST. Poleg tega bomo razpravljali o tem, kako lahko uporabimo Twitter API v Flasku.
prenesi mongodb za Windows 10 64 bit
=> Tukaj raziščite serijo Flask Training
Priporočeno branje
- Oblikovanje vzorcev v Javi: Singleton, Factory In Builder
- Vadnica za bučko Python - Uvod v bučko za začetnike
- Vadnica API Flask s primerom | Razširitev bučke z API-ji
- Postavitev bučke in projekt bučke z načrtom in zagonskim trakom
- Django Vs Flask Vs Node: Kateri okvir izbrati
- 31 najbolj priljubljenih vprašanj za intervju z Python Flask z odgovori
- 10 najboljših orodij za načrtovanje zbirk podatkov za izdelavo kompleksnih podatkovnih modelov
- 11 najboljših trendov oblikovanja uporabniškega vmesnika / uporabniškega znanja: kaj pričakovati v letu 2021 in pozneje