flask template form
Deze tutorial legt uit wat Flask Template, Form, View, Response en Redirect zijn met praktische voorbeelden:
Over het algemeen wordt sjablonen gebruikt bij programmeren om een deel van de tekst met verschillende gegevens opnieuw te gebruiken. Met betrekking tot webontwikkeling gebruiken ontwerpers sjablonen om gegevens weer te geven in een vorm die leesbaar en aantrekkelijk is voor menselijke lezers.
Een sjabloonontwerp omvat over het algemeen het gebruik van een taal vanwege de complexiteit van menselijke interactie.
Bekijk hier de Flask Beginners Guide
Wat je leert:
Invoering
Flask gebruikt een sjabloonengine genaamd Jinja2, die het gedrag van een applicatie weergeeft op basis van het interactieniveau van de gebruiker. Een Jinja-sjabloon maakt gebruik van variabelen, uitdrukkingen en tags.
Variabelen en uitdrukkingen worden tijdens runtime vervangen door waarden voordat de pagina in de browser wordt weergegeven. Jinja-tags helpen bij het schrijven van logica en controleverklaringen in de Flask-sjabloon.
Flask View
Het begrip Flask-weergave is afgeleid van een veel voorkomend ontwerppatroon voor webtoepassingen genaamd Model-View-Controller. Een weergave is een van de drie onderling verbonden elementen in dit paradigma, waar het zich bezighoudt met applicatielogica. De weergave zorgt voor de presentatie van informatie aan de Gebruiker.
stack-implementatie in c ++ met behulp van array
In onze vorige tutorial hebben we een weergave ontworpen door de klasse BaseView van de Flask-Appbuilder in een subklasse te brengen. In het volgende deel van deze tutorial zullen we ons laatste voorbeeld uitbreiden en manieren presenteren waarop weergaven kunnen worden aangepast.
Kolf sjabloon
Laten we beginnen en onze eerste sjabloon schrijven. Maak een bestand met de naam hello.html onder de sjablonenmap.
Schrijf de volgende code in dat bestand en sla het op.
Sjabloon voor lus
In de bovenstaande Flask-sjabloon hebben we een for-lus gebruikt om de items van de lijst te herhalen. In onze controller of handler hebben we een lijst met waarden van begroetingen doorgegeven aan de sjabloon. Binnen de sjabloon hebben we toegang tot elk item met behulp van de {{item}} - syntaxis.
Sjabloon als block
Noteer bovendien het gebruik van een if-statement. Hier testen we het item voor Morning en maken het vet en cursief.
Laten we nu een stap vooruit gaan om meer te weten te komen over de concepten van Flask Forms.
Kolfvormen
Een van de meest cruciale aspecten van sjablonen is om input van de gebruikers te nemen en back-endlogica te schrijven op basis van die input. Laten we een formulier maken.
We gebruiken Flask-Appbuilder SimpleFormView om ons formulier weer te geven. Laten we echter eerst een formulier maken. Naast het maken van een formulier, moeten we het commando flask fab create-admin gebruiken om een admin-gebruiker te maken.
Gebruik daarom de opdracht voordat u de ontwikkelserver start, zodat de vervolgens gemaakte views en formulieren kunnen worden gevalideerd met een ingelogde gebruiker. We loggen in met de admin-gebruiker en blijven valideren dat gemaakte weergaven zichtbaar zijn onder het menu zoals weergegeven in de schermafbeeldingen.
Maak Admin
Gebruik de onderstaande opdracht om een admin-gebruiker te maken.
flask fab create-admin
Log in met de beheerdersreferenties
- Klik op Inloggen nadat u naar http: // localhost: 8080 bent gegaan.

- Log in met de beheerdersreferenties die in het vorige gedeelte zijn gemaakt.

- Klik op de categorie Mijn formulieren om uw weergaven te openen.

Notitie: U kunt de laatste stap pas uitvoeren nadat u de weergaven aan het standaardmenu in de navigatiebalk hebt toegevoegd.
Laten we doorgaan en enkele op formulieren gebaseerde weergaven maken.
Maak een bestand met de naam forms.py onder de app-directory en schrijf de volgende code erin.
We hebben een formulier gemaakt op basis van het DynamicForm van Flask-Appbuilder. Er zijn vier tekstvelden. We breiden ons groetenvoorbeeld uit. Van de vier velden zijn er twee verplicht en twee optioneel omdat we voor de eerste twee begroetingen de waarden voor validators hebben genoemd.
Laten we nu een weergave voor dit formulier maken. Schrijf deze volgende regels code in het bestand views.py.
In onze weergave hierboven hebben we twee methoden genaamd form_get en form_post voor het invullen van de standaardwaarden in de velden van de formulieren en het lezen van de ingevoerde waarden nadat het formulier is verzonden vanuit de browser, respectievelijk.
De GreetingsView toont het formulier, zoals weergegeven in de onderstaande afbeelding.
We maken ook gebruik van een Flask-sessieobject om de veldwaarden op te slaan in form_post, zodat we deze kunnen openen in de overeenkomstige nieuwe weergave die we gaan schrijven.
Laten we nu de HelloWorld-klasse aanpassen en een andere methode toevoegen om de begroetingen weer te geven. We zullen het hello_greetings2 noemen.
In deze weergave lezen we de waarden uit het sessieobject en gebruiken we de Flask-rendertemplate om die waarden weer te geven in de gebruikersgerichte HTML. Merk op dat hello_greetings2 een alternatieve manier is om dezelfde functionaliteit te bereiken, vergelijkbaar met hello_greetings.
Het enige verschil is dat we met behulp van de hello_greetings2 de waarden laten zien die door de gebruiker zijn ingevoerd, en in hello_greetings hebben we geen invoer van de gebruiker overgenomen en deze hard gecodeerd tijdens het schrijven van de weergave die is toegewezen aan de respectieve route.
Kolf reactie
Het is vrij zeldzaam dat u het expliciete gebruik van Flask-respons in de code zult vinden. Response-klasse in Flask is slechts een subklasse van de Response-klasse uit de Response-klasse van Werkzueg, die op zijn beurt de ResponseBase-klasse onderverdeelt.
Flask Response-object wordt intern gevormd door Flask wanneer we een return-statement of een methode zoals render_template aanroepen.
Bovendien kunnen we de responscode en het inhoudstype indien nodig aanpassen als onderdeel van de retourverklaring in onze weergaven, zoals weergegeven in de gewijzigde HelloWorld-weergave hieronder.
Direct gebruik van de Flask's Response-klasse kan worden afgedekt in een use-case wanneer we de inhoud streamen in plaats van de volledige inhoud in één keer te retourneren vanwege de beperkingen van de bestandsgrootte en netwerkbandbreedte.
We hebben hieronder een voorbeeld getoond van het streamen van de inhoud van een grote CSV.
Flask Redirect
Het is voor een applicatie niet altijd mogelijk om vooraf het antwoord te definiëren op basis van de verschillende verzoeken van de klant.
We gebruiken Flask Redirect in scenario's waar het mogelijk is om de inhoud te leveren die kan worden vervuld door de andere weergaven of locaties als reactie op een verzoek. We gebruiken Flask Redirect samen met abort met de standaard HTTP-retourcodes.
Bijvoorbeeld, in de onderstaande code hebben we Redirect met HTTP-code 301 gebruikt en afgebroken met 401.
Controleer verder in GreetingsView waar we gebruik hebben gemaakt van Flask redirect en url_for om een verzoek intern om te leiden naar een andere weergave door de waarden van greetings op te slaan in het sessieobject. Flask redirect retourneert altijd een responsobject, met de standaard of de statuscode naar een andere locatie in de applicatie.
Flask Debugtoolbar
We hebben de interactieve debugger van Flask al geïntroduceerd in onze laatste tutorial. In deze tutorial nemen we nog een stap om het debuggen van de Flask-applicatie gemakkelijker te maken. Na installatie wordt de Flask Debug-werkbalk weergegeven als een overlay over de Flask-applicatie.
Installeer de Flask Debug-werkbalk.
Om de debugtoolbar te activeren, open je het __init__.py bestand in ons project en pas je de code aan door de volgende regels code toe te voegen.
Houd er rekening mee dat de Flask-werkbalk voor foutopsporing alleen is ingeschakeld in de foutopsporingsmodus. Eenmaal ingeschakeld, zult u twee dingen waarnemen wanneer u uw applicatie opnieuw laadt.
# 1) Debug Toolbar verschijnt aan de rechterkant van de browser. Klik en vouw het uit om de verschillende functies van de werkbalk te zien.

#twee) Elke keer dat een nieuw POST-verzoek naar de applicatie wordt gestuurd, wordt deze onderschept door de werkbalk zodat we de variabelen en de andere parameters die betrekking hebben op het debuggen van de applicatie kunnen inspecteren.

Deze standaard onderschepping kan worden uitgeschakeld met de onderstaande configuratie.

Laten we nu een paar tests schrijven om onze opvattingen te testen op de aanvullende functies die we in de voorbeeldapplicatie hebben geïntroduceerd.
Schakel de foutopsporing uit zoals hieronder wordt weergegeven in __init__.py voordat u verder gaat met testen. U kunt ook commentaar geven op de onderstaande regel.
Flask-toepassingsweergaven testen
We moeten de testcode ordenen om deze beter beheersbaar te maken. Maak een bestand met de naam conftest.py in de hoofdmap en verplaats de onderstaande regels van test_hello.py naar dit bestand.
pytest-armaturen worden tijdens runtime door pytest geladen. Deze armaturen zijn beschikbaar en worden gedeeld met alle tests. Het definiëren van een conftest.py in het root-pad van een project wordt als een best practice beschouwd, omdat pytest alle modules in het project kan herkennen zonder een expliciete PYTHONPATH op te geven.
Voeg nog een test toe voor het test_hello-bestand. Een voorbeeldtest wordt hieronder gegeven. We noemen de get-methode van het clientobject en bevestigen de verwachte waarde in responsgegevens die zijn opgeslagen in resp. Gegevens.
Op dezelfde manier kunt u meer tests schrijven die naar verschillende weergaven verwijzen. We zullen meer tests schrijven in de volgende tutorials.
Voer de tests uit met de onderstaande opdracht vanuit de hoofdmap van het project.
Testrun produceert de testresultaten in de console, zoals hieronder weergegeven:

Er zijn nog geen mislukkingen. Laten we nog een test ontwerpen, zoals hieronder vermeld.
Deze test zal mislukken omdat we geen berichtkenmerk hebben gedefinieerd in de HelloWorld-klasse in het bestand views.py.
Nadat u tests hebt uitgevoerd met pytest -v, worden de resultaten die vergelijkbaar zijn met de onderstaande afbeelding weergegeven op de console.

In het onderstaande gedeelte worden de stappen uitgelegd die we moeten uitvoeren tijdens het uitvoeren van de tests op een CI / CD-platform. We gebruiken Git-acties voor hetzelfde project.
CI / CD met Git-acties
We slaan nu alle wijzigingen in de bestanden op en maken een commit door het bericht voor deze tutorial te geven. Na het vastleggen op de lokale repository, halen we wijzigingen op van de externe oorsprong met de –rebase-vlag om te zien of er conflicten zijn met de nieuwe wijzigingen op de afstandsbediening. We rebasen om de geschiedenis consistent te houden.
Gebruik de onderstaande opdracht om de wijzigingen van de externe oorsprong op te halen en samen te voegen. Leg uw wijzigingen echter vast voordat u de wijzigingen op afstand ophaalt.
Check nu de lokale master branch uit en voeg deze samen met de tutorial-2 branch. Zodra het samenvoegen is gelukt, publiceert u die wijzigingen naar de master van de origin. Deze actie roept de builds op doelplatforms op. We testen deze code op Python3.7 en Python 3.8 op Ubuntu als laatste.
Gevolgtrekking
In deze tutorial hebben we gezien hoe sjablonen werken in het Flask-framework. We hebben de stappen uiteengezet voor het maken en weergeven van kolfsjablonen met door de gebruiker gedefinieerde waarden met behulp van variabelen en uitdrukkingen.
We zagen ook voorbeelden van een vooraf gedefinieerde weergave BaseView van de Flask Appbuilder-plug-in. Deze weergave kan door Flask-ontwikkelaars gemakkelijk worden onderverdeeld om aangepaste weergaven te maken.
Tot nu toe behandelde concepten helpen de lezers om snel statische en dynamische websites te maken met behulp van de Flask zonder een database-backend. We zullen in de volgende tutorial uitleggen hoe je gegevens van en naar de databases kunt lezen en schrijven met ModelView, wanneer we het concept van het gebruik van databases met Flask doornemen.
Lees de Easy Flask-trainingsserie door
Aanbevolen literatuur
- Python Flask-zelfstudie - Inleiding tot Flask voor beginners
- Flask Design Patterns en best practices voor webapplicaties
- Flask API-zelfstudie met voorbeeld | Kolf uitbreiden met API's
- Standard Template Library (STL): een korte introductie
- Wat is een testscenario: testscenario-sjabloon met voorbeelden
- Voorbeeldtestcase-sjabloon met testcasevoorbeelden (Download)
- Voorbeeldsjabloon voor acceptatietestrapport met voorbeelden
- Sjablonen in C ++ met voorbeelden