Innerhalb des vorgeschlagenen Entwicklungsmodells oder -paradigmas FlascheEiner der wichtigsten Punkte ist die Verwaltung der Ansichten, da wir damit definieren können, wie der Benutzer mit unserer Seite oder Anwendung interagiert.
Der einfachste Weg, mit einer Ansicht zu arbeiten, besteht darin, die Operation direkt in der Definition ihres Pfads zu definieren. Dies ist jedoch nicht immer sinnvoll oder angemessen, insbesondere wenn wir große Anwendungen erstellen.
AnforderungenWir brauchen eine funktionsfähige Installation von Flasche und aus Kompatibilitätsgründen benötigen wir eine höhere Version als diese 0.7 da eine der Komponenten, mit denen wir arbeiten werden, erst nach dieser Version in das Framework aufgenommen wurde. Wir müssen auch eine Bewerbung starten oder haben eine Bewerbung Flasche damit wir die Beispiele in den View-Bereich einbinden und somit per Browser ausführen können.
Rollenbasierte Ansichten
Es ist eine der einfachsten Möglichkeiten, eine Interaktion mit dem Benutzer aufzubauen, wir müssen nur eine Funktion schreiben und sie mit der Route dekorieren, dies macht den Router Flasche die Anforderung empfängt, prüft es, ob eine Funktion auf die Route wartet, und führt sie dann aus, wenn sie diese erhält.
Im Allgemeinen erfordert diese Art von Ansichten mindestens die Methode BEKOMMEN von HTTPAls bewährte Vorgehensweise und aus Sicherheitsgründen können wir jedoch auch die Methode verwenden, wenn wir unserer Datenpersistenzstruktur Werte hinzufügen möchten POST.
Erstellen einer Ansicht mit GET
Wir erstellen eine Ansicht mit der Methode BEKOMMENUm dies zu tun, müssen Sie einfach ihren Namen in einer Funktion definieren und ihr eine Route zuweisen, dann werden wir unseren Inhalt innerhalb der Funktion platzieren. Sehen wir uns den folgenden Code an, um uns zu veranschaulichen.
@ app.route ('/view-get') def view(): value = request.args.get ('content', 'sample') return 'Dies ist eine Ansicht, die GET verwendet und einen Wert erhält:% s'% WertIm Code sehen wir dann, wie wir die Dekorateur Um anzuzeigen, auf welche Route wir warten, definieren wir die entsprechende Funktion und rufen innerhalb dieser mit Anfrage zu den eingegangenen Argumenten von BEKOMMEN, in diesem Fall suchen wir nach einem Argument namens content und weisen es einer Variablen namens value zu. Wenn dieses Argument nicht existiert, wird "sample" als Standardwert platziert, und schließlich geben wir einen Text zurück und übergeben den Inhalt von value .
Wenn wir unser Beispiel im Browser ausführen, erhalten wir Folgendes:
Erstellen einer Ansicht mit POST
Was passiert, wenn wir sensible Daten erhalten möchten und diese nicht über Parameter in der URL übergeben möchten, da wir in diesen Fällen die POST-Methode verwenden müssen, da sie die Daten natürlich aus der Sicht des Benutzers dorthin sendet sind andere Sicherheitsmaßnahmen, die wir verwenden sollten, aber im Moment brauchen wir sie für diesen Fall nicht.
Um eine Ansicht zu erstellen, die Daten per POST empfängt, müssen Sie nur die erwartete Methode im Dekorateur die die gewünschte Route erhält, verwenden wir dazu den zusätzlichen Parameter Methoden.
Dann können wir innerhalb unserer Funktion verwenden Anfrage Um die Werte zu erhalten, müssen wir jedoch im Gegensatz zum vorherigen Beispiel anstelle der Argumente angeben, dass wir die Werte aus einem Formular erhalten. Schauen wir uns den Code für das an, was wir gerade erklärt haben.
@ app.route ('/ post-view', Methoden = ['POST',]) def post_view (): value = request.form.get ('content', 'sample') return 'Dies ist eine Ansicht mit POST und erhält einen Wert:% s'% WertWir können feststellen, dass es sich mit Ausnahme der bereits erwähnten Unterschiede fast um den gleichen Code wie oben handelt, aber mal sehen, was passiert, wenn wir unseren Code direkt in unserem Browser ausführen:
VERGRÖSSERN
Wie geben wir nur an, dass wir die Methode erhalten können? POST, beim Zugriff über BEKOMMEN unsere Bewerbung lehnt die Eingabe ab und schickt uns deshalb einen Code 405 Methode nicht zulässig, daher zeigt diese Ansicht ohne Werte aus einer POST-Anfrage keine Informationen an.
GET und POST in der Ansicht kombinieren
Da der Umgang mit unterschiedlichen Ansichten für jede Methode nicht immer das ist, was wir wollen, können wir beide Methoden in derselben Ansicht verwenden, dies ist insbesondere dann sehr nützlich, wenn wir beispielsweise Formulare mit der Methode bearbeiten BEKOMMEN wir zeigen die form und mit POST wir bearbeiten den Versand derselben.
Um diesen Modus zu verwenden, müssen wir nur hinzufügen BEKOMMEN in der Liste, an die wir weitergegeben haben Methoden bei der Definition der Dekorateur mit dem Pfad sehen wir den folgenden Code:
@ app.route ('/view', Methoden = ['GET', 'POST',]) def view(): if request.method == "GET": return '' 'Views anzeigen' '' else: value = request.form.get ('content', 'sample') return 'Dies ist eine Ansicht mit GET und POST, die einen Wert erhält:% s'% WertBeim Aufrufen der Route aus dem Browser mit Methode BEKOMMEN wir bekommen folgendes:
Dann, indem wir etwas in das Textfeld schreiben und die Eingabetaste drücken, senden wir das Formular an denselben Pfad, aber mit der Methode POST, was uns ein Ergebnis wie das folgende liefert:
Hier haben wir dann eine echte funktionsbasierte Sicht geschrieben, die es uns ermöglicht, beide Methoden zu verwenden und zu nutzen HTTP um unsere Operationen zu machen.
Klassenbasierte Ansichten
Da die Erstellung von Funktionen, obwohl sie unseren Zwecken dienen, manchmal sehr umständlich ist und es sich anbietet, mehr Code als nötig zu haben, Flasche die Aufrufe umgesetzt klassenbasierte Ansichten, ein Konzept, von dem er sich geborgt hat Django, und das ermöglicht es uns, Klassen zu schreiben, mit denen wir Ansichten generieren, diese Klassen können generisch sein, mit denen wir auf Wunsch vererben können.
Um diesen Komponententyp zu verwenden, müssen wir zuerst importieren aus flasche.ansichten, wo die klasse Sicht Es handelt sich um eine generische Klasse, die es uns ermöglicht, die grundlegenden Funktionalitäten hinzuzufügen, um Routen zu versenden und Methoden zu definieren.
Erstellen unserer klassenbasierten Ansicht
In diesem Beispiel erstellen wir die gleiche Ansicht wie im vorherigen Beispiel, jedoch mit einem klassenbasierten Ansatz. Auf diese Weise können wir die Unterschiede zwischen beiden Formen feststellen. wir haben das gemacht importieren der View-Klasse.
Schauen wir uns den Code für unser Beispiel an:
class ViewClass (View): Methoden = ['GET', 'POST',] def Dispatch_Request (self): if request.method == "GET": return '' 'Views anzeigen' '' if request.method == " POST ": value = request.form.get ('content', 'sample') return 'Dies ist eine Ansicht, die GET und POST verwendet, die einen Wert empfängt:% s'% valorapp.add_url_rule ('/view-class', view_func = VistaClase.as_view ('Ansichtsklasse'))Dies ist die grundlegendste Form dieser Art von Ansichten, aber wir sehen, dass wir nicht mehr auf die Dekorateur, was wir tun, ist die Methode aufzurufen Versandanfrage und wir kamen an ihm vorbei selbst Damit es dasselbe Objekt erhält, können wir die Anfragen bestimmen, die wir erhalten, dann geben wir an, dass wir beide Methoden erhalten und schließlich definieren wir unser Verhalten, das Ergebnis pro Browser ist das gleiche wie beim vorherigen, wir haben a Feld und wenn wir es senden, erhalten wir die angegebene Antwort.
Aber was ist, wenn wir viel saubereren Code schreiben wollen? Dafür können wir die Klasse verwenden MethodView von Flasche was es uns ermöglicht, Methoden innerhalb der Klasse zu erstellen, um die Methoden zu definieren HTTP auf einfachere Weise.
Sehen wir uns das folgende Beispiel an, in dem wir den vorherigen Code neu schreiben, um diesen Modus zu verwenden:
class ViewClass (MethodView): def get (self): return '' 'Views anzeigen'' 'def post (self): value = request.form.get (' content ',' sample ') return' Dies ist eine Ansicht mit GET und POST, die einen Wert erhalten:% s'% valorapp.add_url_rule ('/view-class', view_func = ViewClass.as_view ('view-class'))Wie wir sehen, haben wir auf die Definition der Methoden, die wir erhalten, verzichtet, außerdem verwenden wir die Methode nicht mehr versenden, wir definieren einfach, was wir in der Methode tun werden POST, und was wir im GET tun werden, wodurch unser Sehvermögen viel mehr gereinigt wird.
Es gibt immer noch eine Debatte, ob es besser ist, rollenbasierte Ansichten Wellen klassenbasiert, aber es gibt wirklich keine bessere als die andere, es gibt einfach zwei Arbeitsweisen. Die Empfehlung ist, dass wir, wenn die Ansicht sehr einfach ist, sie mit Funktionen machen können und wenn sie bereits eine vollständigere Logik hat, machen wir es mit Klassen .
Damit haben wir dieses Tutorial abgeschlossen, in dem wir eine wichtige Grundlage geschaffen haben, indem wir wissen, wie Views funktionieren und wie wir mit ihren verschiedenen Methoden arbeiten können HTTP, da dies die Grundlage ist, auf der wir fortschrittlichere Anwendungen erstellen können.