flask design patterns
Tento tutoriál vysvetľuje niektoré bežné vzory návrhu banky a osvedčené postupy, ktoré treba dodržiavať pri navrhovaní webových aplikácií, s príkladmi:
Dizajn aplikácií je podstatným aspektom vývoja softvéru. Výsledkom neplánovaného návrhu aplikácie je neprekonateľný technický dlh. Preto, kedykoľvek chceme rozšíriť našu aplikáciu, je v poriadku vyskúšať časovo testované návrhové vzory.
Komunita v banke má veľa takýchto príkladov, ktoré vás môžu inšpirovať a ovplyvniť vaše rozhodnutia o dizajne, keď si chcete vyskúšať niekoľko vzorov svojej aplikácie. Banka je taká neobjavená a flexibilná, že by ste chceli spojiť koncepty z existujúcich vzorov a vytvoriť nový.
=> Navštívte tu a naučíte sa banku od nuly
Čo sa dozviete:
Dizajnové vzory baniek
Napríklad, Nájdete veľa príkladov od vzoru MVC cez jednostránkové aplikácie po vzor SAAS. Pomenujete paradigmu dizajnu, ktorú už vyskúšal niekto v komunite a je voľne k dispozícii na vyskúšanie.
Nižšie je uvedených niekoľko úložísk, ktoré sa oplatí pozrieť.
Flusk
Flusk je príklad, ktorý môžete použiť na vytvorenie veľkých aplikácií v banke, ktoré zahŕňajú SQLAlchemy, Docker a Nginx. Má nádherné logické oddelenie na vytvorenie backendu, domény, zobrazení a modelov do ich príslušných vrstiev.
Vynikajúco využíva Flask Blueprints a riadi sa dizajnovým vzorom Factory. Vo Flusku je ľahké vytvárať prípony a ďalej je ľahké aplikáciu kontajnerovať pomocou Dockeru. Zoznámte sa s jeho zdrojovým kódom tu .
Banka Cookiecutter
Cookiecutter Flask je šablóna banky s funkciami, ako je združovanie aktív a minifikácia pomocou webových balíčkov. Má štartovacie šablóny na registráciu / autentifikáciu používateľov a je postavený na Bootstrap 4.
Cookiecutter je nástroj príkazového riadku na vytvorenie projektu balíka Python. To znamená, že ak použijete túto šablónu, môžete svoju aplikáciu Flask publikovať aj ako PyPI. Tento projekt je v štádiu aktívneho vývoja.
Oplatí sa hodnotiť na tento odkaz .
Fľaša plná
Flask full je ďalší výkonný štítok, ktorý využíva Celery, MongoEngine, Signals, Shell príkazy, WebSocket a eventlet. Je celkom dobre integrovaný s dokumentmi Swagger API a Sphinx.
Zhodnoťte tento projekt ako jeho zdroj. Je voľne dostupný tu .
Flasky
Pri vytváraní ľahkých aplikácií by ste mali zvážiť aplikáciu Flasky. K dispozícii je zdrojový kód spoločnosti Flasky tu . Toto úložisko vytvoril Miguel Grinberg, ktorý má viac ako 25 rokov skúseností s vývojom webových aplikácií.
Vytvoril Flasky, aby poskytol príklady kódov pre koncepty diskutované v jeho knihe s názvom Bankový webový vývoj .
Nech už si vyberiete akýkoľvek rámec, šablónu alebo šablónu, všetky majú niektoré štandardné funkcie a hovoria o nich svojimi vlastnými spôsobmi. Uvádzame zoznam niektorých z týchto funkcií a diskutujeme o nich a implementujeme ich pomocou nástroja Flask-Appbuilder do našej vzorovej aplikácie tejto série tutoriálov.
Tento výukový program pojednáva o niekoľkých ďalších obvyklých vzoroch, ktoré dnes nájdete takmer vo všetkých webových aplikáciách, a ktoré sú pekné v súprave webového vývojára.
Príklad prihlásenia do banky
Webová aplikácia zvyčajne vyžaduje, aby sa používatelia zaregistrovali a pristupovali k obmedzenej časti aplikácie na základe pridelených privilégií. Používatelia majú roly založené na povolení. Napríklad, verejný používateľ nemá povolenie na vytvorenie iného používateľa. Používateľ Admin má však tieto povolenia.
Webové aplikácie niekedy automatizujú registráciu a vytváranie používateľov tak, že im pridelia predvolené alebo preddefinované povolenia.
Vytvorte používateľa offline
Vytvorme používateľa pomocou príkazu flask fab create-user. Po použití tohto príkazu sa zobrazí príkazový riadok s podrobnými údajmi o používateľskom účte. Zadajte podrobnosti podobné tým, ktoré sú uvedené nižšie, a váš používateľ je vytvorený.
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.
Všimnite si, že na konci výstupu príkazu sqla.manager vytlačí potvrdzovacie správy pre vytvorenie používateľa.
Teraz pristúpte k aplikácii a prihláste sa pomocou podrobností, ktoré ste práve zadali. Ak ste vytvorili používateľa v produkčnej databáze, odovzdajte tieto podrobnosti osobe, pre ktorú ste vytvorili tento účet.
Prejdite na adresu http: // localhost: 8080 / login a uvidíte prihlasovací formulár, ako je uvedené nižšie.

Po prihlásení používateľa1 sa používateľovi zobrazí uvítacia správa.

Vytvorte používateľa online
Je pre nás nemožné vytvoriť všetkých používateľov offline. Navyše môže vyžadovať viac technických znalostí, aby bolo možné použiť príkaz flask fab create-user v produkčnom prostredí. Môže sa vám zobraziť požiadavka, aby ste administrátorovi odobrali nejaké pracovné zaťaženie, ktoré je väčšinou poverené vytvorením používateľa.
Preto v našej ukážkovej webovej aplikácii umožnime používateľom zaregistrovať sa.
Službu Google reCAPTCHA používame, aby sme zabránili škodlivým činiteľom v prístupe k zakázaným častiam aplikácie.
Najskôr si zaregistrujme našu doménu v službe reCAPTCHA spoločnosti Google a získajme kľúč SITE a kľúč SECRET.
Krok 1: Nainštalujte Flask-Mail pomocou nižšie uvedeného príkazu.
pip install Flask-Mail
Prejdite na stránku https://www.google.com/recaptcha/intro/v3.html a prihláste sa ako správca pomocou svojho účtu Google.
Krok 2: Vyberte typ reCaptcha.

Krok 3: Zadajte doménu, pre ktorú chcete používať reCaptcha od spoločnosti Google.
Pridajte tiež localhost do zoznamu povolených domén pre tento kľúč, prijmite podmienky a odošlite ich. Po vývoji tejto funkcie ju môžete neskôr odstrániť.
Krok 4: Poznámka Poznamenajte si SITE KEY, ktorý je tiež známy ako verejný kľúč.

Krok 5: Poznámka Poznamenajte si TAJNÝ KLÍČ, ktorý sa tiež nazýva súkromný kľúč.

Akonáhle si klávesy zapíšete, ako je uvedené vyššie, je najlepšie ich uložiť na mieste, kde je možné ich odkázať a prečítať v konfigurácii. Pre tento tutoriál sme uložili hodnoty ako premenné prostredia ako SITE_KEY a SECRET_KEY.
Teraz otvorte súbor config.py a aktualizujte ho, ako je uvedené nižšie.
# 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'
Možno budete musieť povoliť menej bezpečný prístup k svojmu účtu Google. Ak narazíte na problémy spojené s e-mailom, povoľte prístup k účtu na nasledujúcich adresách URL.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Teraz na prihlasovacej stránke vidíme ďalšie užívateľské tlačidlo registrácie. Po kliknutí na registráciu sa nám zobrazí veľa polí spolu s výzvou reCaptcha.

Keď sa zaregistrujete pomocou svojho e-mailu a splníte výzvu reCaptcha, zobrazí sa potvrdzujúca správa, ako je uvedené nižšie.

Ak je e-mail, ktorý ste zadali pri registrácii, platný, dostanete e-mail s aktiváciou účtu podobný e-mailu uvedenému na obrázku nižšie.

Správca banky
Ak ste si prečítali ďalšie výukové programy v tejto sérii tutoriálov o banke, všimnete si, že sme využili výhody zabudovaného zabezpečenia, ktoré je dodávané s programom Flask-Appbuilder. Zobrazenia, ktoré sme pridali pomocou add_view_no_menu, nie sú chránené. Pohľady, ktoré sme pridali na základe DataModels, sú však pre správcu automaticky chránené.
Alternatívne by sme mohli využiť Flask-Admin, ktorý by väčšinou dosiahol podobný výsledok. Aj správca banky, poďme definovať pohľady objektovo. Webová stránka na klientskom rozhraní predstavuje metódu v triede zobrazenia, ktorú explicitne pridáme do rozhrania.
V tomto tutoriáli nepoužívame Flask-Admin. Namiesto toho sa vydávame cestou dosiahnutia rovnakých výsledkov s vyššou rýchlosťou a preskočením nevyhnutnosti vedieť o zabezpečení zostavenom okolo prihlásenia, autentifikácií, rolí a povolení. Bolo to možné, pretože sme použili Flask-Appbuilder.
Flask-Appbuilder aj Flask-Admin majú svoje klady a zápory. V prípade aplikácie Flask-Admin musíme vedieť, že neexistujú žiadne predpoklady zabezpečenia. Aplikácie môžete vytvárať na základe vášho modelu zabezpečenia. Ak sa chcete dozvedieť viac informácií o Flask-Admin, navštívte stránku tu a prejsť vhodnými príkladmi.
Nahrávanie súborov do banky
Takmer všetky webové aplikácie majú v dnešnej dobe požiadavky na ukladanie a poskytovanie súborov. Typickým vzorom pre nich je ukladanie súborov na serveri s určitými informáciami, ktoré umožňujú operáciu s uloženým súborom a uchovanie v aplikačných modeloch a zobrazeniach.
Ideme pracovať na podobnom príklade. Poďme upraviť náš model piesne o ďalšie funkcie.
Do súboru models.py zadajte nasledujúci kód.
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))
Náš predtým vytvorený model Song sme upravili pridaním nového stĺpca typu FileColumn. Ďalej sme pridali ďalšie dva stĺpce, ktoré sa pridajú do aplikácie SongsView na zobrazenie názvu súboru a odkazu na stiahnutie nahraného súboru.
Na zobrazenie odkazu Stiahnuť ako odkaz bola použitá metóda Flask url_for spolu so značkami. Použili sme tiež metódu get_file_original_name z aplikácie Flask-Appbuilder, pretože názov súboru sa ukladá zreťazením pomocou UUID, aby sa zabránilo kolíziám medzi rovnakými názvami súborov.
Upravte views.py pomocou nižšie uvedeného kódu, aby ste aktualizovali zodpovedajúci 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 triede SongsView sme spomenuli nové štítky, ktoré je potrebné zobraziť, a chceme uviesť iba stĺpce uvedené v uvedenom zozname.
Tu si musíte uvedomiť, že sme upravili databázový model pridaním stĺpca k modelu. Zodpovedajúca tabuľka v databáze nemá tento nový stĺpec. Preto odstránime súbor app.db, pretože od posledného tutoriálu pracujeme na databáze SQLite.
Prípadne môžeme použiť príkaz flask db migrate a vykonať potrebné zmeny v súbore verzie. Na aktualizáciu tabuľky môžeme použiť aktualizáciu flask db. Zmena, ktorú sme zaviedli, je však minimálna a môžeme znovu vytvoriť databázu aplikácií a používateľa.
V produkcii odporúčame zvážiť použitie príkazov Flask-Migrate vždy, keď urobíte akékoľvek zmeny v schéme databázy vašej aplikácie.
Pomocou nasledujúcich príkazov odstráňte databázový súbor a znova vytvorte administrátora.
rm app.db flask fab create-db flask fab create-admin
Teraz sa prihláste do aplikácie pomocou poverení správcu a uvidíte upravený SongsView, ako je znázornené na nasledujúcom obrázku.

Pridajte pieseň do súboru.

Po uložení súboru budú stĺpce v zobrazení vyzerať nasledovne.

Všimnite si nasledujúce hodnoty v config.py. Nahrané súbory sa uložia na serveri s touto cestou. Pre tento tutoriál sa nahrá do stroja, na ktorom vyvíjame túto ukážkovú aplikáciu.
Skontrolujte cestu nahrávania, ako je uvedené v config.py. Súbory sú uložené s UUID, ako je uvedené nižšie.

Banka HTTPS
Pokiaľ ide o vývoj, môžeme pokračovať v spúšťaní našej Flask aplikácie bez HTTPS. Z bezpečnostného hľadiska HTTPS zabezpečuje komunikáciu medzi legitímnym Klientom a Serverom.
Táto šifrovaná komunikácia vyžaduje, aby sa medzi klientom a serverom vytvorila dôvera pomocou certifikátu podpísaného CA s dvojicou verejných a súkromných kľúčov. Prečítajte si o tom viac informácií tu
V tejto príručke vás oboznámime s metódami vývoja webových stránok založených na bankách pomocou protokolu HTTP počas vývoja.
Najrýchlejší a najjednoduchší spôsob, ako zahrnúť HTTPS počas vývoja, je použitie adhoc ssl_context, ako je uvedené nižšie v run.py. Nainštalujte si však pyopenssl pomocou pip v prostredí.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Po pridaní ssl_context, keď prejdete na https: // localhost: 8080 /, dostanete varovanie, ktoré vyvoláva pochybnosti o platnosti certifikátu použitého v tejto komunikácii. Navyše navigácia na http: // localhost: 8080 / už nebude fungovať.
Tento prístup je teda trochu ťažkopádny a bude vyžadovať, aby ste túto požiadavku akceptovali vždy, keď reštartujete vývojový server.
Ak chcete pokračovať v práci, musíte kliknúť na nebezpečný prístup, ako je uvedené nižšie.

Alternatívne, aby sme mohli vyvíjať pomocou funkcií https, môžeme odovzdať cestu k certifikátu a kľúču v Python Tuple k parametru ssl_context v metóde run. Ak si však chcete tento prístup osvojiť, budete si musieť vygenerovať certifikát a kľúč s vlastným podpisom a kľúč pomocou nasledujúceho príkazu.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Uveďte príslušné hodnoty pre požadované otázky.

Ponechali sme všetky predvolené hodnoty. Teraz zastavte vývojový server a odovzdajte certifikát cesty a cestu kľúča, ako je uvedené nižšie.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Tento prístup je tiež podobný predchádzajúcemu spôsobu použitia Adhoc ssl_context. V tomto prípade však podrobnosti pretrvávajú dlhší čas. Spomenuli sme 365 dní. Môžete určiť dobu platnosti do dní, ktoré potrebujete. Okrem toho môžu byť tieto súbory zdieľané s ostatnými členmi tímu, ak vyvíjate tím.
V produkčnom prostredí vydáva certifikáty CA a Miguel Grinberg pojednáva o niektorých prípadoch použitia tu . Odporúčame vám prečítať si viac podrobností na tejto stránke.
Záver
V tomto tutoriáli sme diskutovali o niektorých vzoroch, ktorými sa vývojári webu riadia pri vývoji funkcií súvisiacich s prihlásením do banky, správcom banky, nahrávaním súborov do banky a HTTPS do banky. Poskytli sme príklady kódov, ktoré si môžu čitatelia vyskúšať tiež.
V našom ďalšom návode sa budeme venovať koncepciám rozšírenia banky a ukážeme si, ako vytvoriť funkcie založené na rozhraní REST API. Ďalej si povieme, ako môžeme použiť Twitter API vo vnútri banky.
aký je najlepší softvér na odstránenie vírusov
=> Preskúmajte sériu Flask Training Series tu
Odporúčané čítanie
- Dizajnové vzory v prostredí Java: Singleton, Factory and Builder
- Výukový program pre fľašu Python - Úvod do banky pre začiatočníkov
- Výukový program pre Flask API s príkladom Rozšírenie banky s API
- Aplikácia banky a rozloženie projektu banky s modrotlačou a bootstrapom
- Uzol Django Vs Flask Vs: Ktorý rámec zvoliť
- Top 31 populárnych otázok na rozhovor s pythonovskou bankou s odpoveďami
- Top 10 nástrojov na návrh databázy na zostavenie komplexných dátových modelov
- Top 11 UI / UX designových trendov: Čo môžete očakávať v roku 2021 a ďalej