flask app flask project layout with blueprint bootstrap
V tej vadnici je razloženo, kako uporabljati Flask App, Flask Blueprint in Flask Bootstrap v projektu Flask:
V tej temi se bomo nekoliko oddaljili od arhetipa Flask-Appbuilder, da bi zgradili naše razumevanje Flask Blueprints. Preberite si našo vadnico o bučki, predlogah buke in pogledih ter bučki z bazami podatkov, kot so MongoDB, SQLite in MySQL. Uporabili smo primer projekta, imenovanega flaskTutorialApp.
Vendar pa lahko projekt ustvarite tudi iz nič z ukazom bučke fab create-app. Ta ukaz ustvari gradbeni oder, potreben za projekt Flask, skupaj z imenikom aplikacije, ki temelji na imenu aplikacije, ki ste ga dali.
=> Glej serijo Flask Training za vse
V tej vadnici razlagamo o aplikaciji Flask, Flask Blueprint in Flask Bootstrap. Našo aplikacijo Flask sprva razvijamo z že obstoječimi odri, ki jih ponuja Flask-Appbuilder. Nato izdelamo načrt bučke, imenovan hello2. Za konec bomo opisali koncept Flask Docker z dockerizacijo naše aplikacije Flask.
Kaj se boste naučili:
Flask App
Flask App je drugo ime za Flask Application. Če opazite kodo, zapisano v datoteki __init__.py, boste opazili, da je ustvarjen primerek Flask in spremenljivka poimenovana kot app. Primerek razreda Flask je aplikacija Flask, ki je primerek aplikacije WSGI.
from flask import Flask app = Flask(__name__)
Načrt bučke
Flask Blueprint nam omogoča, da povežemo povezane funkcije in pomaga pri boljših razvojnih praksah. Nekatere prednosti načrta bučke so naslednje:
- Preprosta organizacija velikih aplikacij.
- Poveča uporabnost kode z večkratno registracijo istega načrta.
- Nabor operacij se zabeleži in se lahko po registraciji načrta nato predvaja.
Z zgornjim ozadjem na Flask Blueprint lahko nadaljujemo in oblikujemo svoj prvi načrt. Načrt lahko mislimo tudi kot modul. Ustvarimo načrt HelloWorld.
Vse komponente, viri in značilnosti načrta se hranijo in organizirajo ločeno od druge izvorne kode aplikacije Flask. To pomeni, da lahko načrt bučke vsebuje svoje poglede, obrazce, modele, statične datoteke in predloge.
Iz istega nabora virov lahko ustvarite več načrtov. Vendar pa bo to verjetno povzročilo zmedo in ni dobra praksa.
Ustvarite Flask Blueprint datoteke in imenike
Začnimo ustvarjati načrt bučke z imenom hello2. Uporabite spodnji skript, da ustvarite strukturo imenikov po aktiviranju navideznega okolja z uporabo izvornega venv / bin / activate po prehodu v imenik aplikacije.
blueprint_name='hello2' mkdir '$blueprint_name' mkdir -p '$blueprint_name/templates/$blueprint_name' touch '$blueprint_name/templates/$blueprint_name/hello.html' mkdir '$blueprint_name/static/' touch '$blueprint_name/__init__.py' touch '$blueprint_name/views.py'
Želimo, da ima naš hello2 Blueprint svoje poglede, ki jih bomo uvozili v __init__.py. Ustvarimo ločen imenik za naš načrt s predlogami in statičnimi imeniki, ki upodabljajo poglede Flask in strežejo statične vire.
Struktura imenika bučke
Struktura imenika za načrt bi morala izgledati, kot je prikazano spodaj. Uporabite drevesni ukaz, da ustvarite podoben izhod.
Create Flask Blueprint View
Zdaj pa določimo preprost pogled znotraj views.py. Odprite hello2 / views.py in vnesite spodnji delček kode.
from flask import Blueprint, render_template hello2 = Blueprint( 'hello2', __name__, template_folder='templates', static_folder='static' ) @hello2.route('/hello2') def hello2_view(): greeting = 'Hello World 2' return render_template('hello2/hello.html', greeting=greeting)
Uvažamo razred Blueprint in metodo render_template. Nato ustvarimo objekt Blueprint z navedbo imen predloge in statičnih imenikov.
Nato določimo pot z uporabo okrasitelja @ hello2.route in krmilnika z imenom hello2_view. Ta krmilnik je funkcija Python. V tej funkciji spremenljivki, imenovani pozdrav, dodelimo vrednost in jo nato posredujemo metodi render_template.
Ustvarite predlogo načrta bučke
Zdaj pa ustvarimo predlogo hello.html. Če ste prebirali naše prejšnje vadnice, ste zagotovo opazili, da je predloga z istim imenom, kot smo jo ustvarili za upodobitev pogleda HelloWorld. Za ta načrt hello2 ustvarimo novo predlogo, tako da razširimo prejšnjo.
Poleg tega upoštevajte, da smo med klicanjem render_template za upodobitev pozdrava v predlogi uporabili semantično pot hello2 / hello.html. Ta vzorec preprečuje navzkrižja med istoimenskimi predlogami.
Uporabite spodnji delček kode, da ustvarite hello.html in ga shranite pod hello2 / templates / hello2 / path.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Ta predloga je skoraj podobna hello.html. Vendar večino svojih delov HTML podeduje iz hello.html. Upoštevajte uporabo {% block hello%} in {% endblock%}. Block hello v hello2 / hello.html preglasi blok hello osnovne predloge hello.html.
Zdaj odprimo datoteko __init__.py v načrtu hello2 in v njej omenimo spodnjo kodo.
from app.hello2.views import * # expose all views at the blueprint level
V tej izjavi uvozimo vse okrašene metode, ki smo jih ustvarili v views.py načrta hello2 Blueprint. Po potrebi lahko uvozimo samo tiste metode / krmilnike, ki so pripravljeni za uporabo ali preizkušanje.
Načrt bučke registrirajte z aplikacijo Flask
Zdaj odprite __init__.py v imeniku aplikacije Flask in registrirajte naš hello2 Blueprint, kot je prikazano v spodnji kodi.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
Tukaj tudi upoštevajte, da lahko selektivno uvozimo poglede in registriramo samo tiste, ki so pripravljeni za uporabo ali testiranje.
Zaženimo aplikacijo Flask v načinu za odpravljanje napak z ukazom python run.py iz korenskega imenika projekta in se pomaknite do http: // localhost: 8080 / hello2, da preverite, ali pogled hello2 deluje v redu.
Rezultat v brskalniku bi moral biti podoben spodnjemu primeru.
Delajmo na boljši predstavitvi načrta hello2 z uporabo Twitterjevega okvira bootstrap. Poleg tega boste v naslednjem razdelku izvedeli več o neobveznih parametrih za spreminjanje vedenja načrta bučke. Poglejmo s pomočjo primera načrta bučke, imenovanega Flask Bootstrap.
Primer uporabe modularne bučke z načrtom bučke
Na podlagi našega učenja hello2 Flask Blueprint, dodajte še nekaj načrtov, da bomo razumeli, kako lahko v Flasku ustvarimo modularne aplikacije.
Predpostavimo, da imamo spletno aplikacijo, ki obiskovalcem ponuja vsebine v obliki e-knjig, vadnic in tečajev. Vsebuje tudi nekaj dodatnih vsebin o informacijah o ekipi in domači strani.
Če poskušamo te nove funkcije prilagoditi obstoječi aplikaciji, bomo morali ustvariti poglede v views.py in ustrezne predloge v imeniku predloge aplikacije. Podobno moramo ustvariti modele in obrazce v models.py in forms.py.
Vendar pa bo vzdrževanje vse kode aplikacije postalo okorno, sodelovanje z ostalimi člani ekipe pa prezapleteno in lahko povzroči konflikte v zavezah ali zapleten razvojni potek dela.
Trenutno je pri tem običajnem pristopu struktura vloge prikazana spodaj.
Da bi se izognili takšnemu scenariju, lahko Flask Blueprints uporabimo za ustvarjanje modulov, značilnih za funkcije in posamezne vsebine. Ustvarimo nekaj Flask Blueprints z njihovimi ločenimi viri.
Vsaka postavitev načrta Flask bo videti podobno kot spodaj.
Uporabite spodnji skript, da ustvarite potrebne datoteke in imenike za načrtovane načrte Flask. Zaženite ta skript iz korenskega imenika projekta.
cd app for dir in home courses tutorials ebooks do echo 'generating files for $dir ..' mkdir -p $dir/templates/$dir touch $dir/templates/$dir/$dir.html mkdir $dir/static touch $dir/static/style.css touch $dir/__init__.py touch $dir/views.py touch $dir/models.py touch $dir/forms.py done
Najprej ustvarimo funkcije za domači modul.
Odprite views.py v domačem imeniku in ga posodobite s spodnjo kodo.
from flask import render_template, Blueprint home = Blueprint('home', __name__, template_folder='templates', static_folder='static') @home.route('/') def index(): return render_template('home/home.html')
V to datoteko smo uvozili razred Flask's Blueprint in ga ustvarili z zahtevanimi parametri z ločenimi predlogami in statično mapo. Nato z dekoracijo @home deklariramo povezano pot metode pogleda, imenovano indeks.
Zdaj ustvarite predlogo base.html Jinja2 v imeniku predlog v aplikaciji. Za posodobitev datoteke uporabite spodnjo kodo.
from Software Testing Help.
Learn More >> {% endblock %}
Razširili smo se na Bootstrap's base.html. Opazite uporabo div za vsebnik razreda in hero-enoto. Poleg tega smo ustvarili gumb, s katerim lahko uporabniki izvedo več. Spremenili smo ta HTML in uporabili razrede iz Twitterjevega okvira Bootstrap.
Zdaj osvežite stran v brskalniku na naslovu http: // localhost: 8080 / hello2.html in si oglejte spremenjen videz hello2.html.
Pogled spremenjenega Hello2 bo videti podobno kot spodaj.
Uporaba Flask-Bootstrap je popolnoma odvisna od blokov, ki so na voljo za razveljavitev ali spreminjanje. Spodaj omenjene bloke lahko uporabimo za prilagajanje izkušnje. Podroben seznam vseh možnih blokov si lahko ogledate na https://pythonhosted.org/Flask-Bootstrap/basic-usage.html.
Včasih, ko želimo samo spremeniti blok, namesto da bi ga popolnoma zamenjali, lahko za doseganje rezultatov uporabimo funkcijo super () Jinja2.
Ustvarite datoteko z imenom hello2.css pod hello2 / static in v spodnji delček kode postavite barvo odstavka v hello2 / hello.html.
p { color: orange; }
Vzemite spodnji delček kode in ga postavite v hello2 / hello.html.
{% block styles } {{ super() }} {% endblock %}
Zdaj odprite views.py Flask Blueprint hello2 in spremenite izjavo blueprint, kot je prikazano spodaj.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Ponovno pojdite do registriranega URL-ja Flask Blueprint, tj. Http: // localhost: 8080 / hello2. Rezultat zaradi dosedanjih sprememb mora biti videti spodaj.
Docker bučke
Docker pomaga pri posodabljanju aplikacije. Izolira okolje, ki ga aplikacija Flask potrebuje, tako da ni potrebe po popolnih virtualiziranih okoljih, kot so navidezni stroji.
Poleg tega imajo priklopni kontejnerji minimalni odtis in jih je lažje upravljati in meriti s pomočjo platforme za orkestracijo. Dandanes, ko ima vsaka druga aplikacija tudi kontejnersko razmestitev, se moramo tudi mi naučiti uvajati svojo vzorčno aplikacijo kot docker kontejner.
Vsebnik, ki temelji na Linuxu, se lahko izvaja v sistemih Windows in MAC. Dockerized Flask App je tako mogoče uporabiti v katerem koli operacijskem sistemu, ne glede na operacijski sistem, v katerem je bila zgrajena.
V tem razdelku bomo razložili korake za uskladitev aplikacije Flask. Ta projekt bomo postavili v pristanišče, da ga bomo lahko razporedili v vsebnik z vsemi odvisnostmi, zapakiranimi v njem.
Najprej, namestite Docker na vašem računalniku.
sudo apt-get install docker.io
Ko je namestitev končana, pojdite v korenski imenik našega vzorčnega projekta in ustvarite datoteko Docker.
V to datoteko Docker vpišite spodnjo kodo.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ['python'] CMD ['run.py']
Posodobite datoteko config.py in spremenite bazo podatkov v SQLite, kot je prikazano spodaj.
ukaz za razvrščanje v unixu s primerom
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Poleg tega, če prvič v tej vadnici delate z SQLite, potem ustvarite skrbniškega uporabnika z ukazom bučke fab create-admin.
Preverite, ali se uporabnik skrbnika lahko prijavi v aplikacijo.
Zdaj z uporabo spodnjega ukaza zgradite sliko dockerja naše vzorčne aplikacije.
sudo docker build --tag flask-tutorial
Ta ukaz traja nekaj časa, ko prenaša vire iz zvezdišča. Ko je ta ukaz končan, s spodnjim ukazom preverite, ali so se slike pojavile.
sudo docker images
Zdaj zaženite to nedavno ustvarjeno Dockerjevo sliko.
sudo docker run -p 5001:8080 flask-tutorial:latest
Konzola bo prikazala dnevniška sporočila razvojnega strežnika.
Namestitev Dockerja povzroči ustvarjanje navidezne NIC z imenom docker0. Poiščite naslov IP z ukazom sudo ifconfig. Ko dobite IP Dockerja, lahko do njega dostopate tako, da se pomaknete na spodnji URL.
http: //: 5001
Ko ste prepričani v razvoj aplikacije, lahko svojo sliko Dockerja razporedite v Docker Hub, da jo drugi prenesejo in uporabijo.
Testiranje načrta bučke
Zdaj pa ustvarimo nekaj testov za testiranje Blueprint hello2. Poglejmo, ali naša vzorčna aplikacija vrne pravilno kodo HTTP, ko odjemalec pošlje zahtevo za pridobivanje virov na končni točki / hello2 ali ne. Če se spomnite, smo registrirali svoj načrt Bučke hello2 z url_prefix z vrednostjo / hello2.
Ustvarite datoteko test_blueprint.py v okviru testov in vanjo dodajte naslednji test.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308 se nanaša na stalno preusmeritev in pričakuje se, da mora naša aplikacija Flask zahtevo preusmeriti na vire, povezane z načrtom, imenovanim hello2.
Zdaj pa dodajte še en test za preverjanje korenske poti virov našega načrta. Dodajmo test, da ugotovimo, ali ima vrednost ali ne.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Zdaj pa zaženimo te teste skupaj z drugimi testi, da zagotovimo, da so uspešno opravljeni.
pytest -v
Videli bi podoben rezultat rezultatov preskusa, kot je prikazano spodaj.
Zdaj vse spremembe shranite v repo in jih objavite v oddaljenem repozitoriju na Githubu. Razlike s kodo primerjajte s tistimi v glavni veji in ustvarite zahtevo za vlečenje, če ni konfliktov.
Zahteva za vlečenje prikliče opravila gradnje, ki so del našega Github Workflowa. Če vsa preverjanja zahtev za vlečenje iz tutorial-4 ne uspejo, lahko to vejo varno združimo z glavno.
Pogosto zastavljena vprašanja
V # 1) Kaj je Flask BluePrint?
Odgovor: Flask Blueprint je način za strukturiranje aplikacije bučke v manjše module, ki jih je mogoče ponovno uporabiti. Načrt Flask ima svoje ločene vire, kot so pogledi, predloge, statične datoteke, modeli, obrazci itd. Pristop Flask Blueprint uporabljamo za ustvarjanje enostavno vzdrževalnih in razširljivih aplikacij Flask.
V # 2) Kako uporabljate Flask Blueprint?
Odgovor: Za uporabo načrta Flask ga moramo uvoziti in registrirati z objektom Flask Application z uporabo metode app.register_blueprint. Vrednost lahko posredujemo parametru url_prifix, da pridemo do poti do načrta bučke.
Zaključek
V tej vadnici smo razložili načrte Flask skupaj s koncepti ustvarjanja statičnih virov za aplikacijo Flask. Prednosti uporabe Flask Blueprint skupaj z mislimi o virih načrta smo raziskali s pomočjo vtičnika Flask, imenovanega Flask-Bootstrap.
Obdelali smo tudi koncepte ustvarjanja Dockerjeve slike vzorčne vadnice Flask. Poleg tega smo ustvarili tudi dva testa za preverjanje načrta bučke.
V naslednji vadnici bomo zajeli najpogosteje uporabljene vzorce med gradnjo funkcij v spletnih aplikacijah s pomočjo Flask.
=> Obiščite tukaj in se naučite bučke iz nič
Priporočeno branje
- Vadnica API Flask s primerom | Razširitev bučke z API-ji
- 31 najbolj priljubljenih vprašanj za intervju z Python Flask z odgovori
- Django Vs Flask Vs Node: Kateri okvir izbrati
- Vzorci za oblikovanje bučk in najboljši postopki za spletne aplikacije
- [Top 10] Najboljše programske platforme za razvoj aplikacij leta 2021
- Top 51 vprašanj in odgovorov za intervju z Bootstrapom