flask design patterns
Tento výukový program vysvětluje některé běžné vzory návrhů baňky a osvědčené postupy, které je třeba dodržovat při navrhování webových aplikací, s příklady:
Návrh aplikací je základním aspektem vývoje softwaru. Výsledkem neplánovaného návrhu aplikace je nepřekonatelný technický dluh. Proto, kdykoli chceme naši aplikaci škálovat, je v pořádku vyzkoušet časově testované návrhové vzory.
Komunita Flask má mnoho takových příkladů, které vás mohou inspirovat a ovlivnit vaše konstrukční rozhodnutí, když chcete vyzkoušet několik vzorů pro vaši aplikaci. Baňka je tak neohraničená a flexibilní, že byste chtěli kombinovat koncepty ze stávajících vzorů a vytvořit nový.
=> Navštivte zde a naučíte se baňky od nuly
Co se naučíte:
Baňky návrhové vzory
Například, Najdete mnoho příkladů od vzoru MVC přes jednostránkové aplikace po vzor SAAS. Pojmenujete paradigma designu a je již vyzkoušeno někým v komunitě a je volně k dispozici, abyste si ho mohli vyzkoušet.
Níže je uvedeno několik úložišť, která stojí za to si prohlédnout.
Flusk
Flusk je příklad, který můžete použít k vytvoření velkých aplikací Flask, které zahrnují SQLAlchemy, Docker a Nginx. Má krásné logické oddělení k vytvoření backendu, domény, pohledů a modelů do příslušných vrstev.
Má vynikající využití Flask Blueprints a řídí se designovým vzorem Factory. Vytváření rozšíření ve Flusku je snadné a je dále snadné kontejnerizovat aplikaci pomocí Dockeru. Podívejte se na jeho zdrojový kód tady .
Baňka Cookiecutter
Cookiecutter Flask je baňková šablona s funkcemi, jako je sdružování aktiv a minifikace s webovými balíčky. Má startovací šablony pro registraci / autentizaci uživatelů a je postaven na Bootstrapu 4.
Cookiecutter je nástroj příkazového řádku k vytvoření projektu balíčku Python. To znamená, že pokud použijete tuto šablonu, můžete svou aplikaci Flask publikovat také jako PyPI. Tento projekt je v aktivním vývoji.
Stojí za to vyhodnotit na tento odkaz .
Baňka plná
Flask full je další výkonná varná deska, která využívá celery, MongoEngine, Signals, příkazy Shell, WebSocket a eventlet. Je docela dobře integrován s dokumenty Swagger API a dokumenty Sphinx.
Vyhodnoťte tento projekt jako jeho zdroj. Je volně k dispozici tady .
Flasky
Při vytváření odlehčených aplikací můžete zvážit Flasky. Zdrojový kód Flasky je k dispozici tady . Toto úložiště vytvořil Miguel Grinberg, který má více než 25 let zkušeností s vývojem webů.
Vytvořil Flasky, aby poskytl příklady kódu pro koncepty popsané v jeho knize s názvem Flask Web Development .
Ať už si vyberete jakýkoli rámec, šablonu nebo šablonu, všechny mají některé standardní funkce a mluví o nich svými vlastními způsoby. Zde uvádíme některé z těchto funkcí a diskutujeme o nich a implementujeme ty, které používají Flask-Appbuilder v naší ukázkové aplikaci této série kurzů.
Tento výukový program pojednává o několika běžnějších vzorcích, které dnes najdete téměř ve všech webových aplikacích, a je hezké je mít v sadě webového vývojáře.
Příklad přihlášení do baňky
Webová aplikace obvykle vyžaduje, aby se uživatelé zaregistrovali a přistupovali k omezené části aplikace na základě přiřazených oprávnění. Uživatelé mají role založené na oprávnění. Například, veřejný uživatel nemá oprávnění k vytvoření jiného uživatele. Uživatel Admin však má tato oprávnění.
Někdy webové aplikace automatizují registraci a vytváření uživatelů přiřazením výchozích nebo předdefinovaných oprávnění.
Vytvořit uživatele offline
Pojďme vytvořit uživatele pomocí příkazu flask fab create-user. Jakmile použijete tento příkaz, zobrazí se výzva k zadání podrobností o uživatelském účtu z příkazového řádku. Uveďte podrobnosti podobné těm, které jsou uvedeny níže, a váš uživatel je vytvořen.
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šimněte si, že na konci výstupu příkazu sqla.manager vytiskne potvrzovací zprávy pro vytvoření uživatele.
Nyní přejděte do aplikace a přihlaste se pomocí podrobností, které jste právě zadali. Pokud jste vytvořili uživatele v produkční databázi, předejte tyto podrobnosti osobě, pro kterou jste tento účet vytvořili.
Přejděte na adresu http: // localhost: 8080 / login a uvidíte přihlašovací formulář, jak je znázorněno níže.

Po přihlášení uživatele1 se uživateli zobrazí uvítací zpráva.

Vytvořit uživatele online
Je pro nás nemožné vytvořit všechny uživatele offline. Kromě toho může vyžadovat další technické znalosti k použití příkazu flask fab create-user v produkčním prostředí. Může se vám zobrazit požadavek na odebrání určité pracovní zátěže administrátorovi, který má většinu času za úkol vytvářet uživatele.
V naší ukázkové webové aplikaci tedy umožněme uživatelům registraci.
Službu Google reCAPTCHA používáme, abychom zabránili škodlivým hráčům v přístupu k omezeným částem aplikace.
Nejprve si zaregistrujme naši doménu ve službě Google reCAPTCHA a získáme klíč SITE a klíč SECRET.
Krok 1: Nainstalujte Flask-Mail pomocí níže uvedeného příkazu.
pip install Flask-Mail
Přejděte na https://www.google.com/recaptcha/intro/v3.html a přihlaste se jako správce pomocí svého účtu Google.
Krok 2: Vyberte typ reCaptcha.

Krok 3: Zadejte doménu, pro kterou chcete používat reCaptcha od Googlu.
Také přidejte localhost do seznamu povolených domén pro tento klíč, přijměte podmínky a odešlete je. Po vývoji této funkce jej můžete později odebrat.
Krok 4: Poznamenejte si SITE KEY, který je také známý jako veřejný klíč.

Krok 5: Poznamenejte si TAJNÝ KLÍČ, který se také označuje jako soukromý klíč.

Jakmile si poznamenáte klíče, jak je uvedeno výše, je nejlepší je uložit na místo, kde je lze odkázat a číst v konfiguraci. V tomto kurzu jsme uložili hodnoty jako proměnné prostředí jako SITE_KEY a SECRET_KEY.
Nyní otevřete soubor config.py a aktualizujte jej, jak je znázorněno níže.
# 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žná budete muset povolit méně zabezpečený přístup ke svému účtu Google. Pokud narazíte na problémy související s e-mailem, povolte přístup k účtu na níže uvedených adresách URL.

- https://accounts.google.com/DisplayUnlockCaptcha
- https://support.google.com/mail/?p=BadCredentials
Nyní na přihlašovací stránce vidíme další tlačítko registrace uživatele. Jakmile kliknete na registraci, uvidíme spolu s výzvou reCaptcha mnoho polí.

Jakmile se zaregistrujete pomocí svého e-mailu a projdete výzvou reCaptcha, zobrazí se potvrzovací zpráva, jak je uvedeno níže.

Pokud je e-mail, který jste zadali při registraci, platný, obdržíte e-mail s aktivací účtu podobný e-mailu uvedenému na následujícím obrázku.

Správa baňky
Pokud jste si přečetli další výukové programy v této sérii výukových programů Flask, pak si všimnete, že jsme využili výhody integrovaného zabezpečení, které je dodáváno s aplikací Flask-Appbuilder. Pohledy, které jsme přidali pomocí add_view_no_menu, nejsou chráněny. Pohledy, které jsme přidali na základě DataModels, jsou však automaticky chráněny pro správce.
Alternativně bychom mohli využít Flask-Admin, který by většinou dosáhl podobného výsledku. Flask-Admin taky, pojďme definovat pohledy objektově orientovaným způsobem. Webová stránka na frontendu představuje metodu ve třídě zobrazení, kterou explicitně přidáme do rozhraní.
V tomto kurzu nepoužíváme Flask-Admin. Místo toho se vydáme cestou dosažení stejných výsledků s větší rychlostí a přeskočením nezbytnosti vědět o sestavení zabezpečení kolem přihlášení, autorizace, rolí a oprávnění. Bylo to možné, protože jsme použili Flask-Appbuilder.
Flask-Appbuilder i Flask-Admin mají své klady a zápory. V případě Flask-Admin musíme vědět, že neexistují žádné předpoklady zabezpečení a můžete vytvářet aplikace na základě vašeho modelu zabezpečení. Chcete-li vědět více o Flask-Admin, navštivte tady a projděte si vhodné příklady.
Nahrání souboru do baňky
Téměř všechny webové aplikace mají dnes požadavky na ukládání a poskytování souborů. Typickým vzorem pro ně je ukládání souborů v cestě na serveru, s některými informacemi o provedení operace s uloženým souborem a uchování v aplikačních modelech a pohledech.
Budeme pracovat na podobném příkladu. Pojďme upravit náš model písně s dalšími funkcemi.
V souboru models.py zadejte následující 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áš dříve vytvořený model Song jsme upravili přidáním nového sloupce typu FileColumn. Dále jsme přidali další dva sloupce, které budou přidány do SongsView pro zobrazení názvu souboru a odkazu ke stažení nahraného souboru.
Flask url_for metoda byla použita spolu s Markup k zobrazení Stáhnout jako odkaz. Také jsme použili metodu get_file_original_name z Flask-Appbuilderu, protože název souboru je uložen zřetězením s UUID, aby se zabránilo kolizím mezi stejnými názvy souborů.
Upravte views.py pomocí níže uvedeného kódu a aktualizujte odpovídající 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')
Ve třídě SongsView jsme zmínili nové štítky, které je třeba zobrazit, a chceme vypsat pouze sloupce uvedené v uvedeném seznamu.
Zde si musíte pamatovat, že jsme upravili databázový model přidáním sloupce do modelu. Odpovídající tabulka v databázi tento nový sloupec neobsahuje. Proto odstraníme soubor app.db, protože pracujeme na databázi SQLite od posledního kurzu.
Alternativně můžeme také použít příkaz flask db migrate a provést nezbytné změny v souboru verze a použít aktualizaci flask db k aktualizaci tabulky. Změna, kterou jsme zavedli, je však minimální a můžeme znovu vytvořit databázi aplikací a uživatele.
Doporučujeme, abyste v produkčním prostředí zvážili použití příkazů Flask-Migrate, kdykoli provedete jakékoli změny ve schématu databáze vaší aplikace.
Pomocí níže uvedených příkazů odeberte soubor databáze a znovu vytvořte uživatele správce.
rm app.db flask fab create-db flask fab create-admin
Nyní se přihlaste do aplikace pomocí pověření správce a uvidíte upravený SongsView, jak je znázorněno na následujícím obrázku.

Přidejte skladbu se souborem.

Jakmile soubor uložíte, budou sloupce v zobrazení vypadat níže.

Všimněte si následujících hodnot v config.py. Nahrané soubory budou uloženy v této cestě na serveru. V tomto kurzu se nahraje do počítače, na kterém vyvíjíme tuto ukázkovou aplikaci.
Zkontrolujte cestu pro nahrávání, jak je uvedeno v config.py. Soubory jsou uloženy s UUID, jak je uvedeno níže.

Baňka HTTPS
Pokud jde o vývoj, můžeme i nadále provozovat naši aplikaci Flask bez HTTPS. Z hlediska zabezpečení HTTPS zajišťuje komunikaci mezi legitimním klientem a serverem.
Tato šifrovaná komunikace vyžaduje, aby mezi klientem a serverem byla vytvořena důvěra pomocí certifikátu podepsaného CA s dvojicí veřejných a soukromých klíčů. Přečtěte si o tom více tady
V tomto kurzu vás seznámíme s metodami vývoje webů založených na baňkách pomocí HTTP během vývoje.
Nejrychlejší a nejjednodušší způsob, jak zahrnout HTTPS během vývoje, je použití adhoc ssl_context, jak je uvedeno níže v run.py. Nainstalujte si však pyopenssl pomocí pip v prostředí.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context='adhoc')
Po přidání ssl_context, když přejdete na https: // localhost: 8080 /, zobrazí se varování vyvolávající pochybnosti o platnosti certifikátu používaného v této komunikaci. Navíc již nebude fungovat navigace na http: // localhost: 8080 /.
Tento přístup je tedy trochu těžkopádný a bude vyžadovat, abyste tento požadavek přijímali při každém restartování vývojového serveru.
Chcete-li pokračovat v práci, musíte kliknout na nebezpečný přístup, jak je uvedeno níže.

Alternativně k vývoji s funkcemi https můžeme předat cestu k certifikátu a klíči v Python Tuple ssl_context parametru v metodě run. Chcete-li však přijmout tento přístup, budete muset vygenerovat certifikát a klíč podepsaný svým držitelem pomocí níže uvedeného příkazu.
openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365
Uveďte příslušné hodnoty pro požadované dotazy.

Nechali jsme všechny výchozí hodnoty. Nyní zastavte vývojový server a předejte certifikát cesty a cestu klíče, jak je znázorněno níže.
app.run(host='0.0.0.0', port=8080, debug=True, ssl_context=('mycert.pem', 'mykey.pem'))
Tento přístup je také podobný předchozí metodě použití Adhoc ssl_context. V tomto případě však podrobnosti přetrvávají delší dobu. Zmínili jsme 365 dní. Můžete určit dobu platnosti do dnů, které potřebujete. Tyto soubory lze navíc sdílet s ostatními členy týmu, pokud se vyvíjíte v týmu.
V produkčním prostředí jsou certifikáty vydávány CA a Miguel Grinberg popisuje některé případy použití tady . Doporučujeme vám přečíst si na této stránce více podrobností.
Závěr
V tomto kurzu jsme probrali několik vzorů, kterými se weboví vývojáři řídí při vývoji funkcí souvisejících s Flask Login, Flask Admin, Flask File Upload a Flask HTTPS. Poskytli jsme příklady kódu a čtenáři si to mohou také vyzkoušet.
V našem dalším kurzu se budeme zabývat koncepcemi rozšiřování baňky a uvidíme, jak vytvořit funkce založené na rozhraní REST API. Kromě toho budeme diskutovat o tom, jak můžeme použít Twitter API uvnitř Flask.
jaký je proces identifikace a odstraňování chyb z hardwaru nebo softwaru počítače?
=> Prozkoumejte sérii tréninků na baňkách zde
Doporučené čtení
- Design Patterns in Java: Singleton, Factory And Builder
- Výukový program pro pythonovou baňku - Úvod do baňky pro začátečníky
- Výukový program pro flask API s příkladem | Rozšíření baňky pomocí API
- Aplikace baňky a rozložení projektu baňky s plánem a bootstrapem
- Uzel Django Vs Flask Vs: Který rámec vybrat
- Top 31 populárních otázek na rozhovor s Python Flask s odpověďmi
- Top 10 databázových návrhových nástrojů pro vytváření komplexních datových modelů
- Top 11 UI / UX Design Trends: Co očekávat od roku 2021 a dále