Binnen het model of paradigma van ontwikkeling dat het voorstelt KolfEen van de belangrijkste punten is het beheer van de weergaven, omdat we hiermee de manier kunnen bepalen waarop de gebruiker met onze pagina of applicatie zal omgaan.
De eenvoudigste manier om met een weergave te werken, is door de bewerking rechtstreeks in de definitie van het pad te definiëren, maar dit is niet altijd nuttig of adequaat, vooral als we grote applicaties bouwen.
VereistenWe hebben een functionele installatie nodig van: Kolf en om compatibiliteitsredenen hebben we een versie nodig die hoger is dan die 0.7 aangezien een van de componenten waarmee we gaan werken pas na genoemde versie in het framework is opgenomen. We moeten ook een applicatie starten of een applicatie hebben Kolf zodat we de voorbeelden in de weergavesectie kunnen opnemen en ze dus per browser kunnen uitvoeren.
Op rollen gebaseerde weergaven
Het is een van de eenvoudigste manieren om interactie met de gebruiker op te bouwen, we hoeven alleen een functie te schrijven en deze te versieren met de route, dit zorgt ervoor dat wanneer de router Kolf het verzoek ontvangt, controleert het of er een functie wacht op de route, en als het het krijgt, voert het het uit.
Over het algemeen vereist dit type weergaven ten minste de methode KRIJGEN van HTTPAls een goede gewoonte en om veiligheidsredenen, als we waarden willen toevoegen aan onze gegevenspersistentiestructuur, kunnen we echter ook de methode gebruiken NA.
Een weergave maken met GET
We gaan een weergave maken met behulp van de methode KRIJGENOm dit te doen, hoef je alleen maar de naam ervan in een functie te definiëren en er een route aan toe te wijzen, dan zullen we in de functie onze inhoud plaatsen, laten we de volgende code eens bekijken om onszelf te illustreren.
@ app.route ('/ view-get') def view (): value = request.args.get ('content', 'sample') return 'Dit is een weergave die GET gebruikt en krijgt een waarde:% s'% waardeIn de code zien we dan hoe we de . gebruiken decorateur Om aan te geven op welke route we wachten, definiëren we de bijbehorende functie en daarbinnen bellen we met verzoek naar de argumenten ontvangen door KRIJGEN, in dit geval zoeken we naar een argument met de naam inhoud en wijzen het toe aan een variabele met de naam waarde, als dit argument niet bestaat, wordt "sample" als de standaardwaarde geplaatst en ten slotte retourneren we een tekst en geven we de inhoud van waarde door .
Als we ons voorbeeld in de browser uitvoeren, krijgen we het volgende:
Een weergave maken met POST
Wat gebeurt er als we gevoelige gegevens willen ontvangen en we deze niet via parameters in de URL willen doorgeven, omdat we in deze gevallen de POST-methode moeten gebruiken, omdat deze de gegevens verzendt die verborgen zijn voor het zicht van de gebruiker, natuurlijk daar zijn andere beveiligingsmaatregelen die we zouden moeten gebruiken, maar op dit moment hebben we ze niet nodig voor dit geval.
Om een weergave te bouwen die gegevens ontvangt via POST, hoeft u alleen de verwachte methode aan te geven in de decorateur die de gewenste route ontvangt, hiervoor gebruiken we de extra parameter methoden.
Dan kunnen we binnen onze functie gebruiken verzoek om de waarden te verkrijgen, moeten we echter, in tegenstelling tot het vorige voorbeeld, in plaats van de argumenten te vereisen, aangeven dat we de waarden van een formulier ontvangen. Laten we eens kijken naar de code voor wat we zojuist hebben uitgelegd.
@ app.route ('/ post-view', methods = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'Dit is een weergave met POST en ontvangt een waarde:% s'% waardeWe kunnen zien dat het bijna dezelfde code is als hierboven, behalve de reeds genoemde verschillen, maar laten we eens kijken wat er gebeurt als we onze code rechtstreeks in onze browser uitvoeren:
VERGROTEN
Hoe specificeren we alleen dat we de methode kunnen ontvangen? NA, bij toegang via KRIJGEN onze applicatie weigert de invoer en stuurt ons daarom een code 405 Methode niet toegestaan, dus zonder waarden afkomstig van een POST-verzoek zal deze weergave geen informatie tonen.
GET en POST combineren in de weergave
Omdat het hanteren van verschillende weergaven voor elke methode niet altijd is wat we willen, kunnen we beide methoden in dezelfde weergave gebruiken, dit is erg handig, vooral wanneer we formulieren willen verwerken, bijvoorbeeld met de methode KRIJGEN we tonen de vorm en met NA wij verwerken de verzending van hetzelfde.
Om deze modus te gebruiken, hoeven we alleen toe te voegen KRIJGEN in de lijst waaraan we zijn doorgegeven methoden bij het definiëren van de decorateur met het pad, laten we de onderstaande code bekijken:
@ app.route ('/ view', methods = ['GET', 'POST',]) def view (): if request.method == "GET": return '' 'Show Views' '' else: value = request.form.get ('content', 'sample') return 'Dit is een weergave met GET en POST die een waarde ontvangt:% s'% waardeBij het aanroepen van de route vanuit de browser met methode KRIJGEN we krijgen het volgende:
Door vervolgens iets in het tekstveld te schrijven en op Enter te drukken, sturen we het formulier naar hetzelfde pad, maar met de methode NA, wat ons een resultaat geeft als het volgende:
Hier hebben we dan een echte functie-gebaseerde weergave geschreven, die ons in staat stelt om beide methoden van te gebruiken en te benutten HTTP om onze operaties uit te voeren.
Op klassen gebaseerde weergaven
Omdat het creëren van functies, hoewel ze onze doelen dienen, soms erg omslachtig is en zich leent voor het hebben van meer code dan nodig is, Kolf de oproepen geïmplementeerd op klassen gebaseerde weergaven, een concept waarvan hij heeft geleend Django, en dat stelt ons in staat om klassen te schrijven waarmee we views zullen genereren, deze klassen kunnen generiek zijn waarmee we overerving kunnen maken als we dat willen.
Om dit type component te gebruiken, moeten we eerst importeren uit: fles.views, waar de klas Weergave Het is een generieke klasse waarmee we de basisfunctionaliteiten kunnen toevoegen om routes te verzenden en methoden te definiëren.
Onze op klassen gebaseerde weergave maken
In dit voorbeeld gaan we dezelfde weergave maken als in het vorige voorbeeld, maar vanuit een op klassen gebaseerde benadering, op deze manier kunnen we de verschillen tussen beide vormen vaststellen, onthoud dat hoewel het niet in de voorbeeldcode voorkomt, we hebben de gemaakt importeren van de klasse View.
Laten we eens kijken naar de code voor ons voorbeeld:
class ViewClass (View): methods = ['GET', 'POST',] def dispatch_request (self): if request.method == "GET": return '' 'Show Views' '' if request.method == " POST ": value = request.form.get ('content', 'sample') return 'Dit is een weergave die GET en POST gebruikt die een waarde ontvangt:% s'% valorapp.add_url_rule ('/view-class', view_func = VistaClase.as_view ('view-class'))Dit is de meest basale vorm van deze manier van kijken, maar we zien dat we niet langer afhankelijk zijn van de decorateur, wat we doen is de methode noemen dispatch_request en we passeerden hem zelf zodat het hetzelfde object ontvangt hiermee kunnen we de verzoeken bepalen die we ontvangen, dan geven we aan dat we beide methoden zullen ontvangen en tenslotte definiëren we ons gedrag, het resultaat per browser zal hetzelfde zijn als de vorige, we zullen een veld en wanneer we het verzenden, ontvangen we het gespecificeerde antwoord.
Maar wat als we veel schonere code willen schrijven? Hiervoor kunnen we de klasse gebruiken MethodeBekijken van Kolf waarmee we methoden binnen de klasse kunnen maken om de methoden te definiëren HTTP op een eenvoudigere manier.
Laten we het volgende voorbeeld bekijken waarin we de vorige code herschrijven om deze modus te gebruiken:
class ViewClass (MethodView): def get (self): return '' 'Show Views'' 'def post (self): value = request.form.get (' content ',' sample ') return' Dit is een weergave met GET en POST die een waarde ontvangt:% s'% valorapp.add_url_rule ('/view-class', view_func = ViewClass.as_view ('view-class'))Zoals we kunnen zien, hebben we afgezien van de definitie van de methoden die we zullen ontvangen, bovendien gebruiken we de methode niet langer verzenden, we definiëren eenvoudig wat we zullen doen in de methode NA, en wat we zullen doen in de GET, waardoor ons zicht veel meer wordt schoongemaakt.
Er is nog steeds een discussie dat als het beter is om op rollen gebaseerde weergaven golven klassikaal, maar er is echt niet de een beter dan de ander, er zijn gewoon twee manieren om te werken, de aanbeveling is dat als de weergave heel eenvoudig is, we het met functies kunnen doen en als het al een meer complete logica heeft, doen we het met klassen .
Hiermee hebben we deze tutorial afgerond, waarin we een belangrijke basis hebben opgebouwd door te weten hoe views werken en hoe we met hun verschillende methodes kunnen werken HTTP, aangezien dit de basis is die we kunnen gebruiken om meer geavanceerde applicaties te maken.