flask app flask project layout with blueprint bootstrap
Denne vejledning forklarer, hvordan du bruger Flask App, Flask Blueprint og Flask Bootstrap i et Flask-projekt:
I dette emne vil vi bevæge os lidt væk fra arketypen Flask-Appbuilder for at opbygge vores forståelse af Flask Blueprints. Læs vores vejledning om kolbe, kolbeskabeloner og visninger og kolbe med databaser som MongoDB, SQLite og MySQL. Vi har brugt et eksempel på et projekt kaldet flaskTutorialApp.
Du kan dog også oprette projektet fra bunden ved hjælp af kolben fab create-app-kommando. Denne kommando opretter det stillads, der kræves til et Flask-projekt sammen med en applikationsmappe baseret på det applikationsnavn, du har givet.
=> Se Flask Training Series for All
I denne vejledning forklarer vi om Flask App, Flask Blueprint og Flask Bootstrap. Vi udvikler vores Flask-app oprindeligt med det allerede eksisterende stillads leveret af Flask-Appbuilder. Derefter opretter vi et kolbeblad kaldet hello2. Endelig vil vi beskrive Flask Docker-konceptet ved at dockerisere vores Flask App.
Hvad du lærer:
Kolbe-app
Flask App er et andet navn for en Flask Application. Hvis du bemærker koden skrevet i filen __init__.py, vil du bemærke, at der oprettes en forekomst af Flask, og variablen navngives som app. Forekomsten af klassen Flask er Flask Application, som er forekomsten af WSGI-applikationen.
from flask import Flask app = Flask(__name__)
Kolbe-tegning
Flask Blueprint lader os holde relaterede funktioner sammen og hjælper med bedre udviklingspraksis. Nogle af fordelene ved Flask Blueprints er som følger:
- Nem organisering af store applikationer.
- Øger genanvendelighed af kode ved at registrere den samme Blueprint flere gange.
- Et sæt operationer registreres og kan derefter afspilles igen efter registrering af en blueprint.
Med ovenstående baggrund angivet på Flask Blueprint, kan vi gå videre og designe vores første Blueprint. Vi kan også tænke på Blueprint som et modul. Lad os oprette en HelloWorld-tegning.
Alle komponenter, ressourcer og funktioner i en plan opbevares og organiseres separat fra den anden kildekode i Flask-applikationen. Det betyder, at en Flask Blueprint kan have sine visninger, formularer, modeller, statiske filer og skabeloner.
Du kan oprette flere tegninger fra det samme sæt ressourcer. Dette vil sandsynligvis skabe forvirring og er ikke en god praksis.
Opret Flask Blueprint-filer og kataloger
Lad os begynde at oprette et kolbeblad med navnet hello2. Brug nedenstående script til at oprette biblioteksstrukturen efter aktivering af dit virtuelle miljø ved hjælp af kilden venv / bin / aktiv efter at gå til applikationsmappen.
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'
Vi ønsker, at vores hello2 Blueprint skal have sine synspunkter, som vi importerer i dets __init__.py. Vi opretter en separat mappe til vores Blueprint med skabeloner og statiske mapper til gengivelse af henholdsvis Kolbe-visninger og servering af statiske ressourcer.
Flask Blueprint Directory Structure
Katalogstrukturen til Blueprint skal se ud som vist nedenfor. Brug trækommandoen til at oprette en lignende output.
Create Flask Blueprint View
Lad os nu definere en simpel visning inde i views.py. Åbn hello2 / views.py og indtast nedenstående kodestykke.
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)
Vi importerer Blueprint-klassen og render_template-metoden. Derefter opretter vi et Blueprint-objekt ved at give navnene på skabelonen og statiske mapper.
Derefter definerer vi en rute ved hjælp af dekoratøren @ hello2.route og en controller med navnet hello2_view. Denne controller er en Python-funktion. I denne funktion tildeler vi en værdi til en variabel kaldet hilsen og videregiver den derefter til render_template-metoden.
Opret Flask Blueprint-skabelon
Lad os nu oprette skabelonen hej.html. Hvis du har læst vores tidligere tutorials, skal du have bemærket, at skabelonen har samme navn, som vi oprettede til gengivelse af HelloWorld-visningen. Til denne hello2 Blueprint opretter vi en ny skabelon ved at udvide den forrige.
Desuden bemærker vi, at vi har brugt en sti semantisk hello2 / hello.html, mens vi kalder render_template for at gengive hilsen i skabelonen. Dette mønster undgår konflikter mellem skabelonerne med de samme navne.
Brug nedenstående kodestykke til at oprette hello.html og gem det under hello2 / templates / hello2 / path.
{% extends 'hello.html' %} {% block hello %} {{ greeting }} , from Software Testing Help.
{% endblock %}
Denne skabelon svarer næsten til hello.html. Det arver dog de fleste af sine HTML-dele fra hello.html. Bemærk brugen af {% block hej%} og {% endblock%}. Bloker hej i hello2 / hello.html tilsidesætter blokken hej i basisskabelonen hello.html.
Lad os nu åbne __init__.py-filen af hello2 Blueprint og nævne nedenstående kode i den.
from app.hello2.views import * # expose all views at the blueprint level
I denne erklæring importerer vi alle de dekorerede metoder, som vi har oprettet i views.py af hello2 Blueprint. Om nødvendigt kan vi kun importere de metoder / controllere, der er klar til at blive brugt eller testet.
Registrer et kolbeblad med kolbe-appen
Lad os nu åbne __init__.py under Flask-applikationsmappen og registrere vores hello2 Blueprint som vist i nedenstående kode.
from app.hello2 import hello2 app.register_blueprint(hello2, url_prefix='/hello2')
Bemærk også her, at vi selektivt kan importere visninger og kun registrere dem, der er klar til brug eller test.
Lad os køre vores Flask-app i fejlretningstilstand med kommandoen python run.py fra projektets rodmappe og navigere til http: // localhost: 8080 / hello2 for at se om udsigten til hello2 fungerer fint.
Resultatet i browseren skal svare til eksemplet vist nedenfor.
Lad os arbejde på en bedre præsentation af hello2-tegningen ved hjælp af Twitters bootstrap-ramme. Desuden vil du i det næste afsnit lære mere om de valgfrie parametre til at ændre adfærden for en Flask Blueprint. Lad os se det ved hjælp af et eksempel på en Flask Blueprint kaldet Flask Bootstrap.
Eksempel på applikation med modulær kolbe med kolbeblad
Baseret på vores indlæring af hello2 Flask Blueprint, lad os tilføje nogle flere tegninger for at forstå, hvordan vi kan oprette modulære applikationer i Flask.
Lad os antage, at vi har en webapplikation, der serverer indhold til besøgende i form af e-bøger, tutorials og kurser. Det har også noget yderligere indhold vedrørende information om holdet og en startside.
Hvis vi forsøger at imødekomme disse nye funktioner i den eksisterende applikation, bliver vi nødt til at oprette visninger i views.py og de tilsvarende skabeloner under applikationsskabelonmappen. På samme måde er vi nødt til at oprette modeller og former i models.py og forms.py.
Imidlertid vil vedligeholdelse af al applikationskode blive besværligt, og samarbejde med de andre teammedlemmer vil være for kompliceret og kan resultere i begå konflikter eller kompleks udviklingsworkflow.
I øjeblikket er applikationsstrukturen i denne konventionelle tilgang som vist nedenfor.
hvordan man tilføjer maven i formørkelse
For at undgå et sådant scenario kan vi bruge Flask Blueprints til at oprette moduler, der er specifikke for funktionerne og det respektive indhold. Lad os oprette nogle Flask Blueprints med deres separate ressourcer.
Hvert af Flask Blueprint-layoutene ligner det, der er vist nedenfor.
Brug nedenstående script til at oprette de nødvendige filer og mapper til de planlagte Flask Blueprints. Kør dette script fra projektets rodmappe.
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
Lad os først oprette funktioner til hjemmemodulet.
Åbn views.py under hjemmekataloget, og opdater det med nedenstående kode.
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')
I denne fil har vi importeret Flask's Blueprint-klasse og instantificeret den med de krævede parametre med separate skabeloner og en statisk mappe. Derefter bruger vi @home dekoration til at erklære den tilknyttede rute for visningsmetoden kaldet indeks.
Opret nu en base.html Jinja2-skabelon under appens skabelonmappe. Brug nedenstående kode til at opdatere filen.
from Software Testing Help.
Learn More >> {% endblock %}
Vi har udvidet fra Bootstraps base.html. Læg mærke til brugen af div i klassebeholderen og heltenheden. Desuden har vi oprettet en knap, som brugerne kan lære mere om. Vi ændrede denne HTML og brugte klasser fra Twitters Bootstrap-ramme.
Opdater nu siden i browseren på http: // localhost: 8080 / hello2.html for at se det ændrede udseende af hello2.html.
Visningen af Ændret Hello2 vil ligne den vist nedenfor.
Brugen af Flask-Bootstrap er helt afhængig af de blokke, der er tilgængelige til tilsidesættelse eller ændring. Vi kan bruge nedenstående blokke til at tilpasse oplevelsen. En detaljeret liste over alle mulige blokke kan ses på https://pythonhosted.org/Flask-Bootstrap/basic-usage.html.
Nogle gange når vi bare vil ændre en blok i stedet for at erstatte den fuldstændigt, kan vi bruge Jinja2s super () -funktion til at opnå resultaterne.
Opret en fil kaldet hello2.css under hello2 / static, og placer nedenstående kodestykke for at style afsnittets farve i hello2 / hello.html.
p { color: orange; }
Tag kodestykket vist nedenfor og placer det i hello2 / hello.html.
{% block styles } {{ super() }} {% endblock %}
Åbn nu views.py af Flask Blueprint hello2, og rediger blueprint-erklæringen som vist nedenfor.
hello2 = Blueprint('hello2', __name__, template_folder='templates', static_folder='static')
Naviger til Flask Blueprint's registrerede URL, dvs. http: // localhost: 8080 / hello2 igen. Resultatet på grund af de hidtil foretagne ændringer skal se ud som vist nedenfor.
faser af softwareudviklingens livscyklus
Flask Docker
Docker hjælper med at containerisere en applikation. Det isolerer det miljø, som Flask-applikationen har brug for, på en måde, så der ikke er behov for komplette virtualiserede miljøer såsom virtuelle maskiner.
Desuden har dockercontainere et minimalt fodaftryk og er mere behagelige at administrere og skalere ved hjælp af en orkestrationsplatform. I disse dage, hvor hver anden applikation også har containeriseret implementering, er vi også nødt til at lære at implementere vores prøveapplikation som en dockercontainer.
En Linux-baseret container kan køre på Windows og en MAC. En dockerized Flask App kan således implementeres på ethvert operativsystem uanset hvilket operativsystem den blev bygget i.
I dette afsnit forklarer vi trinene til docking af en Flask-app. Vi dockeriserer dette projekt, så det kan implementeres i en container med alle afhængigheder pakket inde i det.
Først, installer Docker på din maskine.
sudo apt-get install docker.io
Når installationen er færdig, skal du gå ind i vores eksempelprojekts rodmappe og oprette en Dockerfile.
Skriv koden nedenfor i den Dockerfile.
FROM python:3 ADD . /flaskTutorialApp WORKDIR /flaskTutorialApp RUN pip install -r requirements.txt ENTRYPOINT ['python'] CMD ['run.py']
Opdater config.py-filen, og skift databasen til SQLite, som vist nedenfor.
# The SQLAlchemy connection string. SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db') # SQLALCHEMY_DATABASE_URI = 'mysql://myapp@localhost/myapp'
Desuden, hvis dette er første gang, du arbejder med SQLite i denne tutorial-serie, skal du oprette adminbrugeren ved hjælp af kolben fab create-admin-kommando.
Kontroller, om administratorbrugeren kan logge på applikationen.
Opbyg nu dockerbilledet af vores prøveapplikation ved hjælp af nedenstående kommando.
sudo docker build --tag flask-tutorial
Denne kommando tager noget tid, da den downloader ressourcer fra docker-hubben. Når denne kommando er afsluttet, skal du kontrollere, at billederne er vist ved hjælp af kommandoen nedenfor.
sudo docker images
Kør nu dette for nylig oprettede Docker-billede.
sudo docker run -p 5001:8080 flask-tutorial:latest
Konsollen viser udviklingsservers logbeskeder.
Installation af Docker resulterer i oprettelse af et virtuelt NIC med navnet docker0. Find IP-adressen ved hjælp af kommandoen sudo ifconfig. Når du først får IP-adressen til Docker, kan du få adgang til applikationen ved at navigere til nedenstående URL.
http: //: 5001
Når du er sikker på udviklingen af applikationen, kan du distribuere dit Docker-billede til Docker Hub, så de andre kan downloade og bruge det.
Test af kolbe-tegningen
Lad os nu oprette få tests til test af Blueprint hello2. Lad os se, om vores eksempelapp returnerer den korrekte HTTP-kode, når klienten sender en Get-anmodning om ressourcer på / hello2-slutpunkt eller ej. Hvis du husker det, registrerede vi vores Flask Blueprint hello2 med et url_prefix med værdien som / hello2.
Opret en fil kaldet test_blueprint.py under test og tilføj følgende test i den.
def test_hello2(client): resp = client.get('/hello2') assert 308 == resp.status_code
HTTP 308 vedrører Permanent omdirigering, og det forventes, at vores Flask-app skal omdirigere anmodningen til de ressourcer, der er relateret til Blueprint kaldet hello2.
Lad os nu tilføje endnu en test for at kontrollere rodstien til ressourcerne i vores Blueprint. Lad os tilføje en test for at se, om den har en værdi eller ej.
from app.hello2 import hello2 def test_rootpath(): assert hello2.root_path is not None
Lad os nu køre disse tests sammen med de andre tests for at sikre, at de består.
pytest -v
Du vil se et lignende output af testresultaterne, som vist nedenfor.
Foretag nu alle ændringer i repoen, og offentliggør disse ændringer i det eksterne lager på Github. Sammenlign forskellene med koden med mastergrenens, og opret en pull-anmodning, hvis der ikke er nogen konflikter.
Pull-anmodningen påberåber build-job, der er en del af vores Github Workflow. Hvis alle kontroller af pullanmodningerne fra tutorial-4 ikke mislykkes, kan vi sikkert flette denne gren med masteren.
Ofte stillede spørgsmål
Q # 1) Hvad er Flask BluePrint?
Svar: Flask Blueprint er en måde at strukturere en Flask Application på i mindre og genanvendelige moduler. En kolbe Blueprint har sine separate ressourcer såsom visninger, skabeloner, statiske filer, modeller, formularer osv. Vi bruger Flask Blueprint-metoden til at skabe let vedligeholdelige og skalerbare kolbeapplikationer.
Spørgsmål nr. 2) Hvordan bruger du Flask Blueprint?
Svar: For at bruge Flask Blueprint skal vi importere det og registrere det med Flask Application-objektet ved hjælp af app.register_blueprint-metoden. Vi kan videregive en værdi til url_prifix-parameteren for at lægge en sti til ruterne til Flask Blueprint.
Konklusion
I denne vejledning forklarede vi Flask Blueprints sammen med begreberne om at skabe statiske ressourcer til en Flask-app. Vi undersøgte fordelene ved at bruge Flask Blueprint sammen med tankerne om blueprint-ressourcer ved hjælp af et Flask-plugin kaldet Flask-Bootstrap.
Vi dækkede også begreberne oprettelse af Docker-billedet af prøveflaskens tutorial-applikation. Desuden oprettede vi også to tests til validering af Flask Blueprints.
I vores næste tutorial vil vi dække de ofte følgede mønstre, mens vi bygger funktioner i webapplikationerne ved hjælp af Flask.
=> Besøg her for at lære kolbe fra bunden
Anbefalet læsning
- Flask API-vejledning med eksempel | Udvidelse af kolbe med API'er
- Top 31 populære Python Flask Interview-spørgsmål med svar
- Django Vs Flask Vs Node: Hvilken ramme skal du vælge
- Flaskedesignmønstre og bedste fremgangsmåder til webapplikationer
- [Top 10] Bedste appudviklingssoftwareplatforme i 2021
- Top 51 Bootstrap Interview Spørgsmål og svar