flask template form
Denna handledning förklarar vad som är flaskmall, form, vy, svar och omdirigering med praktiska exempel:
I allmänhet används mallar i programmering för att återanvända en del text med olika data. När det gäller webbutveckling använder formgivare mallar för att visa data i en form som är läsbar och attraktiv för mänskliga läsare.
En malldesign involverar i allmänhet användningen av ett språk på grund av komplexiteten som uppstår genom mänsklig interaktion.
=> Ta en titt på Flask Beginners Guide här
Vad du kommer att lära dig:
Introduktion
Flask använder en mallmotor som heter Jinja2, som visar beteendet hos en applikation baserat på användarens interaktionsnivå. En Jinja-mall använder variabler, uttryck och taggar.
Variabler och uttryck ersätts med värden under körning innan sidåtergivning i webbläsaren. Jinja-taggar hjälper till att skriva logik och styra uttalanden i kolvmallen.
Kolvvy
Begreppet flaskvy härleds från ett vanligt mönster för webbapplikationsdesign som heter Model-View-Controller. En vy är ett av de tre sammankopplade elementen i detta paradigm, där det handlar om applikationslogik. Vyn tar hand om presentation av information till användaren.
I vår tidigare handledning designade vi en vy genom att underklassera BaseView-klassen i Flask-Appbuilder. I den efterföljande delen av denna handledning ska vi utöka vårt sista exempel och presentera sätt på vilka vyer kan anpassas.
Kolvmall
Låt oss börja och skriva vår första mall. Skapa en fil som heter hello.html i mallkatalogen.
Skriv följande kod i den filen och spara den.
Hello World!, from Software Testing Help.
{% for item in greetings %} {% if 'Morning' in item %} {{item}}
{% else %} {{item}}
{% endif %} {% endfor %}
Mall för loop
I ovanstående kolvmall har vi använt en for-loop för att upprepa objekt i listan. I vår kontroller eller hanterare skickade vi en lista med värden för hälsningar till mallen. Inuti mallen kommer vi åt varje objekt med syntaxen {{item}}.
Mall om block
Anteckna dessutom användningen av ett if-uttalande. Här testar vi artikeln för morgon och gör den fet och kursiv.
Låt oss nu gå vidare för att lära oss mer om begreppen Flask Forms.
Kolvformulär
En av de viktigaste aspekterna av mallar är att ta inmatningar från användarna och skriva backendlogik baserat på den ingången. Låt oss skapa ett formulär.
Vi använder Flask-Appbuilder SimpleFormView för att återge vårt formulär. Låt oss dock skapa ett formulär först. Förutom skapandet av ett formulär måste vi använda kolven fab create-admin-kommando för att skapa en adminanvändare.
Använd därför kommandot innan du startar utvecklingsservern så att de sedan skapade vyerna och formulären kan valideras med en inloggad användare. Vi loggar in med administratörsanvändaren och fortsätter att verifiera att skapade vyer är synliga under menyn som visas på skärmdumparna.
Skapa administratör
Använd kommandot nedan för att skapa en adminanvändare.
kolv fab skapa-admin
Logga in med administratörsuppgifterna
- Klicka på Logga in när du har navigerat till http: // localhost: 8080.

- Logga in med administratörsuppgifterna som du skapade i föregående avsnitt.

- Klicka på kategorin Mina formulär för att komma åt dina synpunkter.

Notera: Du kommer att kunna utföra det sista steget först efter att du har lagt till vyerna i standardmenyn som visas i navfältet.
Låt oss gå vidare och skapa några formbaserade vyer.
Skapa en fil som heter forms.py under appkatalogen och skriv följande kod i den.
from wtforms import Form, StringField from wtforms.validators import DataRequired from flask_appbuilder.fieldwidgets import BS3TextFieldWidget from flask_appbuilder.forms import DynamicForm class GreetingsForm(DynamicForm): greeting1 = StringField(('Morning'), description = ('Your morning Greeting'), validators = (DataRequired()), widget = BS3TextFieldWidget()) greeting2 = StringField(('Afternoon'), description = ('Your Afternoon Greeting'), validators = (DataRequired()), widget = BS3TextFieldWidget()) greeting3 = StringField(('Evening'), description = ('Your Evening Greeting'), widget = BS3TextFieldWidget()) greeting4 = StringField(('Night'), description = ('Your Night Greeting'), widget = BS3TextFieldWidget())
Vi har skapat ett formulär baserat på DynamicForm från Flask-Appbuilder. Det finns fyra textfält. Vi utvidgar vårt hälsningsexempel. Av de fyra fälten är två obligatoriska och två är valfria eftersom vi för de två första hälsningarna har nämnt värdena för validerare.
Låt oss nu skapa en vy för det här formuläret. Skriv följande kodrader i filvisningarna.py.
from flask import render_template, flash from flask_appbuilder import SimpleFormView from app.forms import GreetingsForm class GreetingsView(SimpleFormView): form = GreetingsForm form_title = 'This is a Greetings form' message = 'Your Greetings are submitted' def form_get(self, form): form.greeting1.data = 'Your Morning Greeting' form.greeting2.data = 'Your Afternoon Greeting' form.greeting3.data = 'Your Evening Greeting' form.greeting4.data = 'Your Night Greeting' def form_post(self, form): flash(self.message, 'info') greetings = ( form.greeting1.data, form.greeting2.data, form.greeting3.data, form.greeting4.data, ) session('greetings')=greetings return redirect(url_for('HelloWorld.hello_greetings2'))
Enligt vår åsikt ovan har vi två metoder som kallas form_get och form_post för att fylla i standardvärdena i formulärens fält och läsa de angivna värdena när formuläret har skickats från webbläsaren.
GreetingsView visar formuläret, som visas i bilden nedan.
Vi använder också ett Flask-session-objekt för att lagra fältvärdena i form_post så att vi kan komma åt samma i motsvarande nya vy som vi håller på att skriva.
Låt oss nu ändra HelloWorld-klassen och lägga till en annan metod för att visa hälsningarna. Vi kommer att kalla det hej_hälsningar2.
class HelloWorld(BaseView): ## other methods @expose('/greetings2') def hello_greetings2(self): greetings = session('greetings') return render_template('hello.html', greetings=greetings)
I den här vyn läser vi värdena från sessionsobjektet och använder Flask render-mallen för att visa dessa värden i den användarvända HTML-filen. Lägg märke till att hello_greetings2 är ett alternativt sätt att uppnå samma funktionalitet som hello_greetings.
Den enda skillnaden är att med hjälp av hello_greetings2 visar vi de värden som anges av användaren, och i hello_greetings tog vi inga inmatningar från användaren och hårdkodade dem medan vi skrev vyn mappad till respektive rutt.
Kolvsvar
Det är ganska sällsynt att du hittar den uttryckliga användningen av Flask-svar i koden. Svarsklass i Flask är bara en underklass av svarsklassen från Werkzuegs svarsklass, som i sin tur underklasserar sin ResponseBase-klass.
Flask Response-objekt bildas internt av Flask när vi kallar ett returuttal eller en metod som render_template.
Dessutom kan vi anpassa svarkoden och innehållstypen om det behövs som en del av returuttalandet i våra åsikter, som visas i den modifierade HelloWorld-vyn nedan.
class HelloWorld(BaseView): ## other methods @expose('/greetings2') def hello_greetings2(self): greetings = session('greetings') return render_template('hello.json', greetings=greetings), 201, {'Content-Type' : 'application/json'
Direkt användning av flaskans svarsklass kan täckas i ett användningsfall när vi strömmar innehållet istället för att returnera hela innehållet på en gång på grund av begränsningarna för filstorlek och nätverksbandbredd.
Vi har nedan visat ett exempel på att strömma innehållet från en stor CSV.
from flask import Response @app.route('https://cdn.softwaretestinghelp.com/largefile.csv') def send_large_csv(): '''A controller to stream the content of a large csv file''' def gen(): for row in iter_all_rows(): yield ','.join(row) + '
' return Response(gen(), mimetype='text/csv')
Flaskomdirigering
Det är inte alltid möjligt för ett program att fördefiniera svaret baserat på olika förfrågningar från klienten.
Vi använder Flask Redirect, i scenarier, där det är möjligt att betjäna det innehåll som kan uppfyllas av de andra vyerna eller platserna som svar på en begäran. Vi använder Flask Redirect tillsammans med avbryta med standard HTTP-returkoder.
Till exempel, i koden nedan har vi använt omdirigera med HTTP-kod 301 och avbryta med 401.
from flask import Flask, redirect, url_for, request, abort app = Flask(__name__) @app.route('/') def index(): return render_template('log_in.html') # Log In template @app.route('/login',methods = ('POST', 'GET')) def login(): if request.method == 'POST': if request.form('username') == 'admin' : # if user is admin return redirect(url_for('success')), 301 else: abort(401) # stop processing else: return redirect(url_for('index')) # redirect to another view
Kontrollera dessutom i GreetingsView där vi har använt Flask-omdirigering och url_for för att omdirigera en begäran internt till en annan vy genom att lagra hälsningsvärdena i sessionsobjektet. Flaskomdirigering returnerar alltid ett svarsobjekt med standardkoden eller statuskoden till en annan plats i applikationen.
Kolv Debugtoolbar
Vi introducerade redan Flasks interaktiva felsökare i vår senaste handledning. I den här handledningen tar vi ytterligare ett steg för att göra felsökningen av Flask-applikationen enklare. En gång installerad visas verktygsfältet Flask Debug som ett overlay över Flask-applikationen.
Installera verktygsfältet Flask Debug.
pip install flask-debugtoolbar
För att aktivera debugtoolbar, öppna filen __init__.py i vårt projekt och ändra koden genom att lägga till följande kodrader.
from flask_debugtoolbar import DebugToolbarExtension app.debug = True toolbar = DebugToolbarExtension(app)
Observera att verktygsfältet Felsökningsfel endast är aktiverat i felsökningsläge. När du väl är aktiverad kommer du att observera två saker när du laddar om din applikation.
# 1) Felsökningsverktygsfältet visas till höger i webbläsaren. Klicka och expandera för att se de olika funktionerna i verktygsfältet.

#två) Varje gång en ny POST-begäran skickas till applikationen fångas den upp av verktygsfältet så att vi kan inspektera variablerna och andra parametrar som rör felsökning av applikationen.

Denna standardavlyssning kan inaktiveras med konfigurationen nedan.
app.config('DEBUG_TB_INTERCEPT_REDIRECTS') = False

Låt oss nu skriva några tester för att testa våra åsikter för de ytterligare funktioner som vi har introducerat i exempelapplikationen.
frågor och svar om kvalitetskontrollintervju pdf
Innan du går vidare med testningen, vänligen inaktivera felsökning som visas nedan i __init__.py. Alternativt kan du kommentera nedanstående rad.
app.debug = False
Testar flaskans applikationsvyer
Vi måste organisera testkoden för att göra den mer hanterbar. Skapa en fil som heter conftest.py i rotkatalogen och flytta nedanstående rader från test_hello.py till den här filen.
from app import appbuilder import pytest @pytest.fixture def client(): ''' A pytest fixture for test client ''' appbuilder.app.config('TESTING') = True with appbuilder.app.test_client() as client: yield client
pytest-fixturer laddas av pytest vid körning. Dessa fixturer är tillgängliga och delas med alla tester. Definiera en conftest.py i rotvägen för något projekt anses vara en bästa praxis eftersom pytest kan känna igen alla moduler i projektet utan att ange en uttrycklig PYTHONPATH.
Lägg till ett test till test_hello-filen. Ett exempel på ett test ges nedan. Vi kallar klientobjektets get-metod och hävdar det förväntade värdet i svarsdata lagrade i resp. Data.
På samma sätt kan du skriva fler tester som pekar på olika vyer. Vi kommer att skriva fler tester i de efterföljande självstudierna.
def test_greetings(client): ''' A test method to test view hello_greetings''' resp = client.get('/hello/greetings', follow_redirects=True) assert b'Good Morning' in resp.data
Kör testerna med kommandot nedan från projektets rotkatalog.
pytest -v
Testkörning ger testresultaten i konsolen, som visas nedan:

Det finns inga fel ännu. Låt oss utforma ytterligare ett test, som nämnts nedan.
def test_greetings2(client): ''' A test method to test view hello_greetings2 ''' resp = client.get('/hello/greetings2', follow_redirects=True) assert b'Good Morning' in resp.data
Detta test misslyckas eftersom vi inte definierade något meddelandeattribut i HelloWorld-klassen i filen views.py.
När du har kört tester med pytest -v kommer resultaten som liknar bilden nedan att visas igen på konsolen.

Avsnittet nedan förklarar stegen som vi måste utföra när vi kör testerna på en CI / CD-plattform. Vi använder Git Actions för samma projekt.
CI / CD med Git Actions
Vi sparar nu alla ändringar i filerna och skapar ett åtagande genom att ge meddelandet för den här självstudien. Efter att ha åtagit oss det lokala förvaret drar vi ändringar från fjärrkontrollen med flaggan –rebase för att se om det finns några konflikter med de nya ändringarna på fjärrkontrollen. Vi baserar om för att hålla historien konsekvent.
Använd kommandot nedan för att dra och slå samman ändringarna från fjärrkontrollen. Men gör dina ändringar innan du drar ändringarna från fjärrkontrollen.
git pull origin master --rebase
Kolla nu den lokala huvudgrenen och slå samman med tutorial-2-grenen. När sammanslagningen är framgångsrik, publicera dessa ändringar till ursprungets befälhavare. Denna åtgärd kommer att åberopa byggnaderna på målplattformar. Vi testar den här koden på Python3.7 och Python 3.8 på Ubuntu senaste.
Slutsats
I denna handledning såg vi hur mallar fungerar i flaskramen. Vi skisserade stegen för att skapa och rendera kolvmallar med användardefinierade värden med hjälp av variabler och uttryck.
Vi såg också exempel på en fördefinierad vy BaseView av Flask Appbuilder-plugin. Denna vy kan delklassas lätt av Flask-utvecklare för att skapa anpassade vyer.
Begrepp som hittills täckts hjälper läsarna att snabbt skapa statiska och dynamiska webbplatser med hjälp av kolven utan en databasbackend. Vi kommer att förklara hur man läser och skriver data från och till databaserna med ModelView i nästa handledning när vi går igenom konceptet att använda databaser med Flask.
=> Läs igenom Easy Flask Training Series
Rekommenderad läsning
- Python Flask Tutorial - Introduktion till kolv för nybörjare
- Flaskdesignmönster och bästa metoder för webbapplikationer
- Flask API-handledning med exempel | Utöka flaskan med API: er
- Standardmallbibliotek (STL): En kort introduktion
- Vad är testscenario: testscenarimall med exempel
- Exempel på testfallsmall med testfallsexempel (Ladda ner)
- Exempelmall för godkännandeprovrapport med exempel
- Mallar i C ++ med exempel