[Musikwiedergabe] EZRA Zigmond: Hallo, alle zusammen. Dank für das Kommen heraus heute. Dieses Seminar ist "Python Web Apps mit Flasche. " Also, ich werde reden ein wenig darüber, warum möchten Sie vielleicht Flask verwenden, um Web-Anwendungen mit Python im Gegensatz zu einigen anderen Frameworks gibt, wie Django, die die bekannteste ist. Der Untertitel ist "und peewee ", was etwas ist werden wir darüber, wie zu sprechen mit SQL-Datenbanken zu interagieren. Es macht es wirklich schön. So, hier ist nur ein kurzer Überblick was ich will gehen über. Also, zuerst, nur eine Folie das wird Quickstart sein, das ist, wie man alles bekommen Einrichten des Computers an. Ich werde demonstrieren diese auf meinem lokalen Mac-Maschine, nur weil das ist, wo ich dies getan vor, ich bin am liebsten mit ihm, aber das ist definitiv möglich, auf dem CD50-IDE. So, nach diesem, ich will vorstellen, was Flask ist, und davon überzeugen, warum sollten Sie verwenden Sie es in den ersten Platz. Dann werde ich einen schnellen geben Beispiel dafür, was Sie kann in Glaskolben, ein kleines Beispiel zu tun von dem, was Sie in peewee tun können, und dann werde ich Ihnen zeigen, eine weitere vollständige Beispielanwendung dass ich zusammen, dass wir durch gemeinsam gehen. Und dann schließlich in, die letzte Folie, ich habe einige Ressourcen, die Sie suchen im online für weitere Informationen. Dies stellt jedoch keine vollständige Tutorial, wie man Flask verwenden. Und ich werde hoffen, verlassen einige Zeit für Fragen. Jeder lokal beobachten, nur wie, in der Mitte schreien Falls du irgendwelche Fragen hast. So schnelle Installation stuff, wenn Sie folgen möchten, oder wenn Sie diese erhalten möchten up auf Ihrem eigenen Rechner, Ich werde sein mit Python 2.7.10. Flask funktioniert mit Python 3, aber Ich mag Verwendung von Python 2, weil es einige Python-Pakete, noch nicht mit 3 zu arbeiten. Wenn Sie pip installiert haben, die ist ein Python-Paket-Manager, Ich denke, wenn Sie Ihre Python ist größer als oder gleich 2.7.9 haben Sie es bereits installiert, ist es Super leicht, diese Pakete zu installieren. Sie können pip installieren müssen Flask, pip installieren peewee, normalerweise Sie sudo nur laufen müssen so dass die Berechtigungen erarbeiten. Und, wenn Sie eine Super alte Version des Python, Ich empfehle, die Aktualisierung Ihrer Python, oder unter Verwendung von Easyinstall, um PIP zu installieren. Also, das nächste Frage ist, was ist Flask? Und ich denke, zunächst ein vernünftige Frage Ich fragte mich, für eine lange Zeit ist, was ist eine Web-app? Denn das ist ein Wort, das ich denken ist viel herum geworfen dass ich nicht wirklich wissen. Und ich denke, dass die beste Beispiel, wie eine Web-app ist, wirklich CS50 Finanzen, in denen es ist nicht wirklich nur eine Website, aber es ist etwas, dass Sie könnte eine Art interagieren. Es gibt Benutzerkonten und allerlei verschiedene Dinge. Also, wo genau Sie ziehen die Linie zwischen dem, was ist eine Website, und was ist eine Web-App, ist Art willkürlich, aber ich denke, die Idee, es ist etwas mehr als eine Website und es ist eine nützliche Anwendung. So ist Flask ein Rahmen für die machen Web-Anwendungen mit Python. Und hoffentlich Ende Dies werde ich Sie zu überzeugen, dass man tatsächlich etwas schreiben wie CS50 Finance mit Python, die ich wie viel besser als PHP, persönlich. Also, Glaskolben ist, nennen sie eine microframework, wodurch, sie bedeuten, ist es sehr einfach, aber erweiterbar. So hat es gerade was Sie benötigen, aber wenn Sie mehr Funktionen wünschen, es ist leicht, sie in zu bringen. Aber gerade weil es ein microframework, nicht bedeutet, dass es nur für kleine Projekte. Ich habe hier einen Link, die besagt, dass Obama verwendet Flask 2012 für seine Kampagne Website, die hoffentlich, ist so etwas wie eine Bestätigung. Aber die Sache, die ich wirklich über Flask gefallen ist, dass es nicht wirklich jede Art von Entscheidungen für Sie. Nur weil wir reden über Web-Anwendungen, Ich muss es zu Ruby on vergleichen Rails und Django, die beide sind große Frameworks, aber Beide Annahmen darüber, wie Sie wollen Interaktion mit Datenbanken, wie Sie Ihren präsentieren Blick, und sie sind auf jeden Fall gute Aspekte zu. Zum Beispiel, Ruby on Rails hat diese aktive Aufzeichnungssystem, ist eine sehr schöne ist Weg zur Interaktion mit Daten, aber wenn Sie Ruby on verwenden möchten Rails, du bist irgendwie in diese gebunden. Aber mit Glaskolben, wie werde ich zeigen Sie mit peewee, Sie welcher Art auch immer verwenden können der Datenbank, die Sie möchten, und Sie nur ziehen kann, dass in als Erweiterung in die Flasche. Also, warum ich wirklich wie Glaskolben, es ist, dass es keine Annahmen zu machen für Sie basierend auf Dinge, die Sie nicht wirklich brauchen. Also, warum sollten Sie Flask benutzen? Die Vorteile sind, es ist einfach hat wirklich die Kernfunktionen hinein gebaut, die Sie benötigen. So müssen Sie nicht zu kümmern Verständnis eine ganze Reihe von Dingen, dass Sie nicht wirklich brauchen. Sie müssen sich keine Sorgen machen zu müssen zum Deaktivieren der Features dass Sie nicht wirklich brauchen. Und, wie gesagt, es ist super einfach, in den Verlängerungen der Dinge hinzufügen dass Sie benötigen. Einige von ihnen weist Flask ihre eigene Unterstützung für ihn. Also gibt es etwas namens Flask admin, die diese Admin-Spiegel Panel, das Django bietet, das gibt Ihnen eine schöne visuelle Art und Weise auf Ihre Website zu verwalten. Aber noch einmal, wenn Sie , etwas einfach, Sie wahrscheinlich einen großen Server-Betreiber brauchen Panel, so dass ich denke, das ist sehr nett. Und die Nachteile sind, dass Sie haben weniger Leistung aus der Box. Also, wenn Sie zuerst öffnen Glaskolben, und in Ihrer Python-Programm, geben Sie einfach von Flask import *, oder was auch immer, Sie nicht genau alle erhalten Funktionen möchten Sie vielleicht. Und so muss man expliziter Liste der Funktionen, die Sie möchten. Also das ist ein Nachteil, aber ich denken, dass für den Bau von kleinen Web- Apps wie werde ich sein, die Sie, das ist nicht wirklich ein Problem. Und was ist das letzte, was ist denn sagen, was ein Tippfehler ist, ist, dass es weniger standardisiert Konventionen zum Flask zu verwenden, nur weil es nicht so viele Menschen, die es professionell nutzen im Vergleich zu Django. Also, wenn Sie etwas aussehen, "Wie kann ich tun, x" in Django, Sie werden wahrscheinlich feststellen, es. Es gibt gutes Design Muster, die Sie verwenden können, jedoch mit Glaskolben, es ist Art seinen Weg gehen, nur weil es ein hübsche kleine Bibliothek. Das sind also die Nachteile, aber ich denke, dass es immer noch eine gute Bibliothek zu benutzen. Also lasst uns einfach rechts in die Flasche zu springen. Dies ist definitiv nicht um eine komplette Tutorial, aber es ist, um Ihnen eine Idee geben der, wie die Dinge zu strukturieren, und so Sie sich wohl fühlen werde ab und suchen Sie in der Dokumentation und der Suche nach mehr. Also, lassen Sie mich eröffnen ein wirklich einfaches Beispiel anfangs und zeigen Ihnen, was das sieht aus wie, und dann werden wir brechen sie ein bisschen mehr. Also das hier, lassen Sie mich es läuft. So, ich habe jetzt meine Anwendung läuft. Ich werde öffnen Safari und es ist auf meinem lokalen Host ausgeführt wird. Also ich werde einfach diese zu vergrößern. Aber localhost: 5000 Und so, gerade jetzt, hat das alles ist, wenn Sie die Website besuchen, sie druckt "Hallo Flask" die nicht super nützlich, aber ich denke, es ist cool, dass in dieser kleinen Datei hier, wir haben ein Web-Server läuft das ist Ausdruck von etwas. Also, lassen Sie tatsächlich aussehen auf den Code für eine Sekunde, und brechen sie ein wenig. Ist die Größe gut für alle da? Also, hoffentlich, du bist etwas komfortabel mit Python. Ich gehe davon aus, dass wir zu betrachten die Python und durch sie zu lesen. Wenn Sie Fragen zu haben nichts, ich kann auch über das gehen. So ist die erste Zeile ist, vom Glaskolben, wir importieren, Glaskolben mit einem großen "F" welche Art von alles ist der wichtigsten Features, die Sie benötigen. Wann immer du schreibst eine Datei und mit Glaskolben, Sie gehen zu importieren, dass möchten, nur weil das hat alle wichtigen Dinge. Das nächste, was wir tun, ist, dass wir rufen Sie diese Funktion Flask, nur eine app-Objekt zu erstellen, und du bist immer das tun zu wollen. Und dann sprang, um die unten schnell, hier ist dieser Teil, 'if_name _ == "_ main_" ", das ist Art von einem Python-Konvention. So wird dies nur ausführen, wenn Sie führen Sie diese Datei direkt mit Python. Dann nennen wir app.run, die wird tatsächlich die App zu starten werde. Also, das ist die Hauptstruktur, dass Sie werden auf jeden Flask Anwendung haben, wird Sie dieses haben app = Flask (_NAME_) und dann app.run. So, dass ich die beiden Dinge, hier sind, was wir als Routen. Also, lasst uns darüber reden Routing ein bisschen mehr. Ich komme zu der Folie zu gehen. Also die grundlegendste Konzept in der Flasche wird das Routing. Und es ist die Idee, dass man zuweisen Funktionen in Python auf bestimmte Adressen auf Ihrer Webseite ein. Also, wann immer Sie wollen um eine neue Route zu erstellen, Sie diese @ app.route verwenden Funktion Dekorateur. Also, wenn Sie nicht vertraut sind Funktion Dekorateure in Python, es ist das Konzept, Stellt eine Funktion übernehmen und umgeben ihn durch etwas anderes. Also wirklich, was dieser tut, Dekorateur, ist, dass es die Funktion darunter, und weitere Informationen ergänzt um ihn, aber was tatsächlich Flask hat das zu erreichen ist nicht super entscheidende, aber was wichtig ist, ist, dass, bevor die Route, die Sie Diesen @ app.route, und dann die Adresse der Route, so dass der Schrägstrich ist, was wir sah, wenn wir öffnen Sie einfach die Web-Seite. Das ist also der Homepage. Es ist nur die Schrägstrich-Route. Und dann haben Sie diese Funktion. Der Name der Funktion kann alles sein, was Sie wollen. Es muss nicht notwendigerweise müssen mit der Strecke zu tun. Und dann, was auch immer der Funktion Rückkehr sollte die Funktion einen String zurück. Und das String kann HTML oder irgendetwas, und das ist eigentlich das, was erhalten Ihren Web-Browser als HTML zurück, und es wird machen, dass. Das ist also der gleiche Code das war aus dem Beispiel dass ich gerade lief, so dass, wenn wir Strich zu besuchen, es eine Hallo Welt-Funktion ruft die nur eine Zeichenfolge, Hallo Flask zurückkehrt, und das wird auf dem Bildschirm ausgegeben. Es gibt also ein weiteres Beispiel, was ist, wenn Sie besuchen / hallo, Es druckt Hallo Wort, das sollte eigentlich sagen: Hallo Welt, aber lasst uns so tun, als beabsichtigt war. Lassen Sie uns also zu ziehen, dass sich ganz schnell. Also, wenn Sie gehen, um localhost / hallo, es wird jetzt etwas anderes zu drucken. Also das ist nur ein kleines Beispiel dafür, wie Sie können zwei verschiedene Routen erstellen. Also, das ist bislang nicht super nützlich, es gibt nicht viel Sie tun können, Sie könnten nur alles tun, was mit mit verschiedenen HTML-Seiten, und wenn Sie eine bestimmte besuchen Seite ist nur die Seite lädt. Also mal sehen, etwas mehr nützliche Dinge, die Sie tun können. Also, eine Sache, die Sie haben könnten in dem Beispiel, das ich zog bemerkt up, ist, dass ich app.run hatte (debug = True). Und so, was diese Debug-Argument tut, dass, wenn Sie Ihre Web-Server laufen, wenn Sie in Ihrer Anwendung sind, Wenn Sie eine Datei ändern, wird es automatisch neu den Server. Und so können Sie eigentlich nicht haben, um Neustart Python, die super nützlich ist. Ich kann zeigen, dass. Lassen Sie mich nach oben ziehen mein Code mit dem Tippfehler drin, und so tun, dass Tippfehler wurde dort setzen absichtlich für lehrreiche Zwecke. Also lassen Sie uns dieses wieder hinzuzufügen. So, jetzt sagt Hallo Welt. Ich werde sie zu speichern. Und wenn wir wieder nach oben ziehen das Terminal, werden Sie sagen, dass es neu zu starten, weil es eine Veränderung festgestellt, und so jetzt, wenn wir diese Seite neu laden, Es druckt die richtige Sache. So debug ist super nützlich, dass. Auch, wenn Sie welche haben Art von einem Absturz, so lassen Sie mich diese Anwendung zum Absturz zu bringen indem es nicht einen String zurück. Also, lassen Sie einfach nur sie return None aus irgendeinem Grund. Und dann, als ich diese zu besuchen Seite, wird es nur zum Absturz, aber der Server nicht nur zum Absturz, es tatsächlich gibt Ihnen einen super nützlich zurück Spur von allem, was schief gelaufen ist. Und was ist wirklich nett, ist, dass bei jedem Schritt in dieser Rückverfolgung, könnten Sie öffnen ein interaktives Shell hier und Art zu drucken, was Variablen, die Sie wollen, um einen Blick auf zu nehmen. Und so das Debugging ist wirklich nützlich, um herauszufinden, was ist los mit Ihrer Server, und nicht nur zu sehen, etwas in PHP wie ein 500 Innen Server-Fehler, die super nutzlos. Eine Sache, die Sie wissen sollten, ist, dass, wenn Sie Ihre Anwendung online zu stellen so ist es für die Öffentlichkeit, die Sie nie wollen, um Debug-Modus eingeschaltet lassen, weil die Menschen tatsächlich verwenden Sie diese Konsole, die ich Ihnen gezeigt, beliebigen Code auszuführen. So dass sie sich wie jeder drucken Geheimcodes Sie dort haben, sie genau aussehen kann wie Ihre Website funktioniert. So ist es wirklich nützlich, zur Prüfung, aber immer stellen Sie sicher, es zu nehmen, bevor Sie etwas online zu publizieren. Also, wenn Sie mit etwas, bist wie PHP, gibt es diese Idee dass Sie weitergeben können Informationen zwischen Web-Seiten indem sie die Informationen tatsächlich in der URL, die eine GET-Anforderung ist, aber in der Flasche, können Sie tatsächlich etwas tun, ein bisschen wie das, indem er einen Weg, der hat eine Variable als ein Teil davon. Also, wenn Sie, dies zu betrachten zB auf dem Bildschirm hier, wir haben einen Weg, der ist ('/ hallo /'), und so, wenn Sie besuchen / hallo / etwas, dass etwas wird sich tatsächlich gefüllt in den Namen variabel. Und beachten Sie, dass die Funktion das kommt mit dieser Strecke muss im Parameter nehmen zu nennen, so dass es tatsächlich in die Funktion übergeben bekommen. Und dann, wenn du bist innerhalb dieser Funktion, Sie können das, wie zu behandeln ein normales Python-Variable, und so ist, dann, wird es ausdrucken Hallo, und es wird im Namen mit ausfüllen einige String-Formatierung. So zum variablen Teile zu einer Routing hinzuzufügen, Sie den Winkel-Kennzeichnung zu verwenden. Und gegebenenfalls, die Sie verwenden können eine so genannte Konverter. Und so, wenn Sie diese setzen Annotation mit dem Doppelpunkt, Sie können angeben, dass es ein int oder ein Schwimmer oder Pfad, und es wird automatisch zu konvertieren, dass. Sie können auch die Konvertierung innerhalb des Python-Funktion, nur durch die Verwendung eines gegossenen, aber manchmal, wenn Sie sicherstellen, dass es sich um eine int möchten, können Sie in Aufmachungen Konvertierungsregel drin. Also lassen Sie uns nach oben ziehen ein Beispiel einiger variable Regeln. Also hier hat dies die gleiche grundlegende Struktur mit der von Flask Import Glaskolben, die app = Kolben (_NAME_) und dann ist es am Ende läuft. Wir haben diese zwei verschiedenen variable Strecken hier. Und die erste, ist die eine, die ich zeigte in der Folie, die das war es dauert nur in einem string name und es wird auszudrucken hallo, name. Und dann wird das zweite verwendet man die Umwandlung. So wird dies automatisch konvertieren in einen int, und doppelklicken Sie die int, und drucken Sie, dass aus. Und, wissen wir nicht, jede Art zu tun der Umwandlung in ihr weil Flask kümmert sich darum. Also lassen Sie uns dieses Rennen. Wenn Sie eine Flasche haben Anwendung läuft, Sie davon Strg-C kann an den Server mit stoppen. Und dann werde ich die Variablen ausgeführt werden. Lassen Sie uns also auf localhost / hallo / Ezra gehen und Hoffentlich wird diese hallo zu mir sagen. So dauerte es in meinem Namen in der Variablen Strecke, und es füllte es in hier. Also werde ich auch zeigen, eine schnelle Beispiel für die Verdoppelung. Also, wenn Sie / Doppel / 3 zu gehen, es wird aus 6 zu drucken. Also das kümmerte die Umwandlung für uns. So können Sie es auch tun, mit float, und etwas Besonderes, wenn Sie brauchen, um so etwas wie angeben ein Weg, die es akzeptieren, Schrägstriche können, aber das sollte in der Regel nicht ein Problem sein. Bisher haben wir, noch gerade Rückkehr Zeichenfolgen, die nicht sehr interessant. Wir konnten tatsächlich zurückkehren literal HTML-String. So in dem Code können wir etwas einfügen wie die b-Tag setzen fett zu machen, aber die meisten der Zeit, die Sie nicht wirklich wollen, Schreiben von HTML-Code zu sein in Ihrer Python-Code. Es wird wirklich chaotisch, und es ist keine gute Zeit. Kolben ermöglicht es uns, trennen die HTML in was heißt das Template, und so, wenn Sie denken, im Hinblick auf die MVC-Modell dass Sie mit vertraut sind, hoffentlich, von der Arbeit mit CS50 Finanzen ein wenig, Sie über die Python-Dateien vorstellen können als mehr des Controllers, in denen sie sind mit dem, was die Interaktion Datenmodell Sie haben könnten. Und dann werden sie rief, Ansichten und Weitergabe von Informationen zu dieser Ansicht in der Informationen zu füllen in HTML, die es braucht. Und was wir diese Ansichten aufrufen Vorlagen sind in der Klasse. So Flask verwendet eine andere Python Modul, dass es automatisch installieren, wenn Sie pip installieren Flask genannt Jinja, die können Sie diese hinzufügen Anmerkungen zu der HTML- dass Sie auf dem Bildschirm sehen, dass können Sie setzen in Sachen wie conditionals, und Schleifen in den HTML. So sieht es ein bisschen wie, wie Sie vielleicht PHP innerhalb einer HTML-Datei zu verwenden, aber dies ist nur, wenn der Kolben Server serviert die HTML-Datei, es wird dieses Template-Engine laufen und parsen durch diese und füllen Sie die Dinge in. So Flask hat eine render_template Funktion dass Sie am unteren Rand sehen Sie hier. Und so, wenn Sie diese Seite besuchen, ist es würde diese hello.html Vorlage zu machen, und dann in dieser HTML-Seite zu füllen. Also lassen Sie uns dieses echte laufen gerade schnell, und sehen, wie es aussieht, und dann werde ich durch ein zu gehen wenig näher. So werden Ihre Vorlagen gehen in einer Templates-Ordner zu gehen. Es wird automatisch in der Suche Templates-Ordner für die Vorlage. Also lassen Sie öffnen dieses oben. Also, ich werde das Templating Beispiel auszuführen. Also, wenn ich gehe zu / hallo / Ezra, es diese schreckliche hat, widerlich marquee-Tag, die ich in. Sehr schön, sehr dynamisch. Ich bin ein großer Fan. Aber was passiert, wenn Ich habe gerade auf, / hallo gehen? So sagt es gerade Hallo Welt. Ich habe nicht geben sie einen Namen, und sie füllte es in automatisch. Also mal sehen, wie es tat, und wie können wir loswerden, dass Festzelt bekommen vielleicht. So, hier ist diese Art von ein interessantes Beispiel, Wenn Sie mit, wie Schalter vertraut sind Anweisungen arbeiten in einer Sprache. Sagen, das ist ein bisschen wie, diese Art von einem Sturz über, wo man tatsächlich angebracht zwei verschiedene Wege auf die gleiche Funktion. So dass wir den / hallo Route legen und das / hallo / name Weg zu Hallo, und wir geben using-- Python können Sie angeben Standardfunktion arguments-- so, wenn es keinen Namen, so wenn wir gehen, um gerade / hallo, wird es automatisch zu filtern zu nennen ist gleich Keine. Also, wir machen den Vorlage mit name = name, so wird es in dem Namen Parameter übergeben gleich diesem Namen Funktionsparameter, in die Vorlage. Das immer noch nicht erklären, wie es der Entscheidung, ob Hallo Welt zu drucken, oder drucken Sie meinen Namen. Lassen Sie uns also tatsächlich aussehen in die Vorlage selbst, und sehen, wo das herkommt. So, in dieser Vorlage, die wir tatsächlich etwas bedingter Logik, was einige Leute würden argumentieren, die Sie tatsächlich sollte nicht viel von bedingtem Logik innerhalb Ihrer Vorlage selbst. Es sollte mehr innerhalb der sein Controller, aber für dieses Beispiel es ist etwas, ziemlich klein. Also hier, überprüfen wir, ob der Name, so dass Wenn der Name nicht gleich None, ob ein Name tatsächlich bestanden in, dann werden wir sagen, Hallo, Namen mit dem Header und das Festzelt, all das normale HTML, andernfalls uns ausdrucken Hallo, Welt ganz normal. So ein paar Dinge hier zu bemerken, darüber, wie Sie das Template zu formatieren, ist, dass alle diese bedingte Anweisungen, ein bisschen wie, wie wir es, wenn PHP Sie einige PHP einfügen möchten, können Sie die weniger-als verwenden Frage Marke, Art analog ist es hier mit dem {%. So, hier haben wir unsere bedingten Code. Und dann, wenn Sie wirklich wollen, buchstäblich etwas bewerten, und drucken it out auf den Bildschirm, die Sie verwenden Sie die Doppelstreben. Also hier sind die Doppelstreben, und geben wir Namen, so daß man innerhalb dieser wird sie zu bewerten an den Variablennamen, die wurde von der übergebene rendern Template-Funktion, anstatt nur Druck aus, wenn wir wurden von ihnen zu befreien, es ist nur zu drucken würde das Wort "Name". Also, das ist etwas aufpassen. So eine andere Sache, Hinweis ist, dass, wenn wir möchte die Verwendung render_template Funktion, Wir haben tatsächlich zu importieren es ausdrücklich von Flask. Und dies ist ein Beispiel für die Modularität der Glaskolben, dass Sie nicht haben, um zu importieren Dinge, die Sie nicht benötigen. Sie können bringen Sie nur in der Funktionen, die Sie tatsächlich tun müssen, was manchmal schön, so dass Sie nicht tun, müssen alle diese Funktionen haben herumzusitzen, dass Sie sie nicht verwenden, sondern auch, wenn Sie vergessen, dass Sie importieren müssen render_template, Sie werden wahrscheinlich eine Warnung dass wird Sie darüber wissen. Ja, ist das Templat. Also haben wir gezeigt haben, wie man machen einfache Web-Seiten, und fügen Sie ein wenig mehr Logik, um es, im Hinblick auf die variable Routing. Damit können Sie verschiedene Dinge auf der Basis zu tun welche URL Sie zu gehen, und auch dann, geben die HTML ein bisschen mehr Sinn, Hinblick darauf, wie Sie die Dinge zu machen möchten. Sie müssen nicht alle setzen Ihre HTML in Ihren Python, aber für so ziemlich jede Web-Anwendung, Sie gehen zu wollen, sind eine Art Datenmodell zugeordnet. Und so traditionell, würde dies so etwas wie einer SQL-Datenbank. Und Sie nur in Wechselwirkung treten können direkt mit SQL. Python hat, ich glaube, es heißt. SQLite 3. Sie können einfach SQLite 3 importieren und SQL-Abfragen direkt ausführen, aber ich weiß nicht wie es euch geht, aber ich wirklich nicht, wie, gerade, Schreiben Sie SQL-Abfragen. Es neigt dazu, wirklich lang und kompliziert. Und so etwas, das Ich mag zu verwenden ist, was ist als ORM, die eine ist bekannt objekt-relationales Mapping. Und der Punkt, der eine objekt-relationales Mapping, ist, dass es zwei verschiedene Möglichkeiten, wie Sie über Datenbanken zu denken. So das Beispiel, das Professor Malan Regel verwendet in der Klasse, ist die Excel-Tabelle, in der Sie müssen diese Zeilen und diese Spalten, und das ist wirklich nützlich, wie es in SQL vertreten und wie Sie mit ihr zu interagieren, aber eine weitere Möglichkeit, dass es tatsächlich sinnvoll, darüber zu denken manchmal, ist in Bezug auf die Klassen und Objekte. Also anstatt zu denken, jeder Tabelle als mit diese Reihe, die bestimmte hat Informationen, können Sie tatsächlich betrachten Sie es als Jede Tabelle ist eine Klasse, und dann jede Instanz der Klasse hat bestimmte Eigenschaften. So, in diesem Beispiel sind die Instanzen die Klasse sind die Zeilen in der Tabelle, und dann jede Eigenschaft würde sein, eine Spalte in der Tabelle. Also, die ORM, die Ich mag zu bedienen heißt peewee. Es ist wirklich klein, ein bisschen wie Flachmann. Ich denke, dass sie gut zusammen, aber es gibt viele andere ORMs die Sie verwenden können. Ein beliebter ist man wie SQLAlchemy bekannt, und ich kann mich nicht erinnern, warum ich ursprünglich wählte peewee über SQLAlchemy, sonst würde ich Sie, warum ich sagen, denke, es ist das beste, aber wir sind gerade dabei, dies zu nutzen eine, weil ich weiß, wie man es benutzt. Also, das ist eine Frage, warum Sie sollten mit einem ORM die Mühe, anstatt nur direkt Schreiben von SQL-Abfragen? Und ich denke, das beste Fall ist, dass Sie nicht wirklich zu tun haben um SQL-Abfragen zu schreiben. Es ist viel einfacher, als werde ich Ihnen zeigen, um Dinge tun, wie Auswahl, Insertion, Löschen, insbesondere die Erstellung von Tabellen. Es ist viel einfacher, einen Klassenstruktur, als es zu strukturieren a erstellen TABLE-Anweisung, aber eine Sache, bewusst zu sein, ist, dass die ORM wird sein Bestes versuchen, um herauszufinden, was die effiziente SQL-Abfrage wäre, aber manchmal wird es falsch. Und vor allem, wenn Sie Arbeiten mit einer großen Datenbank, Sie, dass eine Abfrage feststellen können das sollte schnell laufen, ist eigentlich mehr dabei. Und wenn man sich, wie Blick unter die Motorhaube die ORM ist die Interpretation, dass in SQL, Es könnte sein, etwas zu tun, wirklich lächerlich, nur weil es eine Art deutete Ihre Absichten falsch. Und, es gab Zeiten, in denen Ich musste es außer Kraft zu setzen und einfach auszuführen meine eigene SQL-Abfragen, nur denn es war auf seltsame Weise Parsen. So gibt es einige Overhead, nur in der Weise, , dass es kompiliert Ihre Erklärungen nach unten in SQL. Also, lasst uns sehen super schnell an Ein einfaches Beispiel für ein Datenmodell dass Sie vielleicht zu verwenden. Also, das ist Python-Code, so dass die erste, was Sie tun möchten, ist von peewee import *. Also, im Gegensatz zu Glaskolben, in dem Sie Alle diese einzelnen Module, und Sie importieren Flask möchten, und Brief-Vorlage, und einige andere dass wir später sehen werden, von peewee, Sie können einfach alles importieren, denn es ist eine ziemlich kleine Bibliothek. Also, das erste, was Sie tun möchten, ist, tatsächlich schaffen dieses Datenbankobjekt. Also, Sie haben db = SQLiteDatabase, und dann den Namen Ihrer Datenbank. Und dies tatsächlich erstellen Sie eine Datenbankobjekt dass Sie interagieren, mit peewee. Und dann haben wir die tatsächlichen Modell, das wir schaffen wollen. So dass die Tabelle wollen wir erstellen. Also, im peewee, hat jede Klasse eine eigene Tabelle in Ihrer Datenbank. So sind alle Klassen erben von der Basis-Modell, und die Hauptstadt M-Modell ist etwas, was in peewee definiert ist. Also, alle Ihre Modelle sollten erben als höchsten Oberklasse, sie sollten aus dem erben Modell, aber was ist wirklich cool, ist, dass Sie tatsächlich Ihre Modelle erben voneinander. Und ein großer Teil der Zeit, Ihrem Datenmodelle nicht unbedingt machen eine schöne Vererbungshierarchie, aber Zeiten, in denen sie es tun, es ist wirklich schön, weil Sie das Modell haben, inhärente voneinander. So legten wir diese Klasse "Student", die ein Modell erbt, und es hat drei Eigenschaften. Es hat eine ID, das ist, a primaryKeyField, die ist etwas, das vorgesehen ist von peewee, ist der Name ein CharField, und eine Einstufung ist eine Integer. So kann dies sind oder nicht wie CS50 tatsächlich speichert alle der Schüler Noten. Es ist nicht, aber das ist, wie ich es tun würde. Und dann muss es innerhalb diese Klasse, und dies ist etwas, was Sie tun können, mit Python, können Sie verschachtelte Klassen haben. Und das ist etwas, das ist durch peewee erforderlich. Also, diese Klasse Meta, müssen Sie um anzugeben, dass die Datenbank gleich dem Objekt dass wir oben erstellt. Und das sagt, was Datei ist diese Tabelle eigentlich los, um in enthalten sein. So ist dies etwas, das Sie haben innerhalb alle Ihre Modelle zu tun. Sie müssen nur angeben, innerhalb dieser Meta-Klasse diese Datenbank ist gleich db. Also, was ich normalerweise tue, wenn ich eine Reihe von verschiedenen Modellen, ist, dass ich eine Basis Modell, dass ich in der Regel rufen Sie einfach "Basismodell" Das hat den Meta-Klasse, und es setzt die Datenbank gleich db. Und dann alle meine späteren Modellen wird von dieser Basisklasse erben. Und dann habe ich keine Sorgen zu machen über die Einstellung der Meta-Klasse. So, wenn dieses tatsächlich bekommt nach unten in einer SQL-Anweisung kompiliert wird, es sieht aus wie diese böse Sache nach unten Hier, "CREATE TABLE student ID integer, " was auch immer. Und, ich denke, dass es kürzer ist, Diese SQL-Abfrage genau hier, aber, wenn Sie an dieser Klasse hier können Sie genau sehen, was los ist. Sie können, welche Art von Feldern zu sehen es gibt, was sie genannt werden, und so denke ich, dass sehen sich gerade dieses Python-Code ist viel besser lesbar als versuchen, diese SQL-Abfrage schreiben. So, um tatsächlich verwenden Sie die Datenbank, wir müssen es innerhalb Python zu verbinden. Also, ich schreibe in der Regel eine Funktion namens initialize_db, die zwei Dinge tut. Es dauert in der Datenbank Objekt db und es verbindet, um es zu, das gerade geöffnet up Abschnitt in die Datenbank. Wenn Sie nur wenn läufst Webseite auf Ihrem lokalen Rechner, es ist nicht ein super große Sache zu sorgen zu Verbinden und Trennen, aber wenn Sie mit es auf einer Website, die Sie wollen sicherstellen, dass, wenn ein Benutzer verbindet, um sie, wenn sie glattstellen die Website, sie zu trennen, so dass Sie nicht eine Gruppe von Leuten angeschlossen haben zu Ihrer Datenbank alle auf einmal. Und dann, wenn Sie Verbindung zur Datenbank, Sie anrufen db.create_tables möchten, und die Liste der Modelle, was Sie wollen um Tabellen zu erstellen. So, hier, ich will nur erstellen Sie es für diese Schüler. Und dann, was wichtig ist, ist es, geben sicheren = True meisten Zeit. Also, was diese Aussage tun werden, ist, dass es Tabellen für die Studentenmodell, aber nur wenn dieser Tabelle hat nicht wurde bereits erstellt. Das ist, was die sichere angibt. So wird es nicht überschrieben werden Ihre vorhandenen Tisch, es wird nur erstellen Sie eine neue Tabelle, falls es nicht dort. Also, die Sie gerade erstellen könnte die Tabellen einmal mit SQL. Und dann müssen Sie diese Datenbank Sitz dort, und dann eine Verbindung zu jeder Zeit, aber es ist in der Regel schön, nur um legte in diesem create_tables Anruf, so dass, wenn Sie jemals löschen Sie Ihre Datenbank, wenn Sie Ihre Web laufen App noch einmal, wird es es neu zu erstellen. Also, stellen Sie sicher, dass ein gefahrloser angegeben ist wahr zu sein, oder Sie werden Ihre Daten nur finden, am Anfang jedes Mal verprügelt. Und dann können Sie einfach anrufen initialize_db um festzustellen, eine Verbindung, und erstellen Tabellen, wenn nötig. Also, die häufigste, was dass Sie wollen, um zu tun, oder eine der häufigsten Dinge, ist, um tatsächlich die Dinge einfügen in Ihre Datenbank. Usw., anstatt um eine INSERT INTO schreiben Rechnung mit allen die Werte festgelegt, Sie eigentlich anrufen Funktion auf dem Studentenklasse. Also, wenn Sie eine Klasse erstellen dass erbt von Modell, es hat diese Methode zu erstellen. Also, Klasse name.create tun Sie, und legen Sie die Parameter angeben, dass Sie möchten, dass in übergeben. Also, wenn ich einige Studenten hinzufügen unsere CS50 Klasse Buch beispielsweise Ich werde in David gebracht, der einen sehr gute Note, hat er eine 95. Und ich, die nicht zu tun ist so gut in CS50, ich habe eine 50. Und so, das Schöne an was das erstellen Funktion tut, ist, dass es gibt eine Instanz oder Reihe, dass es in der Tabelle erstellt, und so dann Sie speichern, dass in einem Variable, und die Arbeit mit ihm später. Sie können rund um Veränderung, die Ich werde ein Beispiel zu zeigen. Beachten Sie, dass ich nicht müssen die ID angeben, denn da es das PrimaryKeyField, wird es automatisch erhöht sich, wenn Sie es nicht angeben. Und in der Tat, werden Sie wahrscheinlich sollte es nicht angeben, weil Sie vielleicht versehentlich clobber ist jemand anderes ID. Und Sie machen wollen sicher, dass es einzigartig. Also, eigentlich, die gemeinsame Sache, die Sie tun möchten, Wahrscheinlich wählen Sie aus der Datenbank, wenn Sie haben eine Menge Informationen drin. Und so, wenn Sie alles erhalten möchten, so das Äquivalent der Auswahl star von Studenten Aussage, es würde nur student.select sein. Und das wird Ihnen wieder ein Array mit all den Schüler Objekte darin dass Sie überlaufen Sie wollen. Sie können die Dinge aus ihm heraus. Und die meisten der Zeit, die Sie wollen nicht nur wählen, um zu tun, Sie wirklich wollen, etwas zu geben. Und so können Sie Kette Zusammen stellen diese Funktionsaufrufe, wie, wie man es Kette zusammen die Aussagen in SQL. So dass Sie student.select tun können ()., Wo in diesem Beispiel. Und dann können Sie geben Sie die Bedingungen, nur mit normalen Python Boolesche Werte, die Dinge zu überprüfen. Also, in diesem Fall zu wollen begrenzen, was Sie zur Auswahl stehen, wobei student.grade gleich 50 ist, und student.name gleich Ezra, damit wird nur erhalten Sie mich aus ihm heraus. Und beachten Sie, wirklich subtile Sache hier ist, , dass, wenn Sie angeben möchten ein und / oder eine oder und / oder, in Python, würden Sie normalerweise verwenden, Ich denke, das Wort "und" tatsächlich, aber hier die einzelnen Und-Zeichen zu verwenden, Das ist normalerweise ein Bit-Operatoren, aber in diesem speziellen Fall, gerade die Weise, peewee tut es, Sie die Einzelnutzung Und-Zeichen angeben, "und." Das ist etwas, Ich bekomme eine Menge gemischt, aber es erscheint nicht, daß in der Praxis viel. Und dann, wenn Sie alle haben die Studenten aus der Datenbank, Sobald Sie getan haben, sind Sie wählen und Ihr Verschleiß oder was auch immer, können Sie eine foreach-Schleife zu verwenden, wie normale in Python, mit jeder Art von Iterator oder mit jeder Art von Array. So was Sie tun können, für s in student.select (). whe re (Student.grade <75), und so wird dies Iteration über jeden Schüler in der Tabelle deren Grad weniger als 75, die in diesem Fall ist immer noch nur ich. Und dann könnten Sie so etwas tun, innerhalb von dass Schleife, wie senden Sie mir eine E-Mail- und sagen Sie mir, tatsächlich biegen Sie in meinem Problem Sets. Also, eine weitere Sache, die Sie zu tun, ist es wirklich einfach zu aktualisieren Zeilen innerhalb der Tabelle. Also, denken Sie daran wieder hier, Ihren, wenn ich eingelegt, Ich nahm den Wert, der war von student.create zurückgegeben, und ich zugeordnet es um Namen genannt Ezra. Und jetzt können Sie das ändern Werte innerhalb dieser Instanz, wie würden Sie ein normale Klasse in Python. So können Sie einstellen, ezra.grade = 95 und das wird die lokale Kopie zu aktualisieren, aber wenn Sie wirklich wollen, übertragen diese Änderungen zur Datenbank, müssen Sie ezra.save nennen, so dass Sie die .save Methode namens für die Instanz. Und jetzt habe ich erfolgreich geändert meine eigene Klasse innerhalb der Datenbank. Ja, dann lassen Sie uns sagen, dass ich erwischt Änderung meiner Klasse in der Datenbank. Professor Malan ist wahrscheinlich zu wollen, um mich aus der Klasse zu löschen, und so können Sie die .Delete nennen Instanz-Methode nur auf das Ding. Also, wenn Sie wollte gehen wieder in dieser Schleife hier, und tatsächlich, statt von E-Mails alle der Studierenden, deren Grad kleiner als 75, um sie zu löschen wollte, dass du, innerhalb dieser Schleife konnte man rufen s.delete Instanz. Und das letzte, was Sie tun möchten, ist, wenn Sie eine Verbindung herzustellen, und Sie sind mit Ihrer Arbeit zu tun, Sie anrufen db.close möchten, wo db ist, dass Datenbank Objekt, das wir vorher hatten. Und Sie sicherstellen, dass wollen alles wird aus der geschlossen wird. Cool. So, jetzt habe ich ein Beispiel-Anwendung. Ich habe eine Art vor, machte alles nur damit wird es keine Live-Codierung sein Fehler, aber wir können zu Fuß durch und sehen, wie Sie Kolben gegeben und zusammen peewee, und machen eine einfache Anwendung. Ich nenne es CS50 rant, und es ist Art von einem einfachen Blog-Plattform. Also, zuerst, werde ich es laufen und zeigen, wie es aussieht, und dann können wir mehr in den Code zu suchen. Okay, lass uns einfach laufen diese. Cool, Ich werde dies zu machen ein wenig kleiner. Es ist nicht sehr schön, nur weil Ich habe nicht machen eine Menge CSS, aber was sie tut, ist, es hat diese Datenbank von Blog-Posts, und es durch alle geht sie, und es wird ihnen angezeigt werden auf der Seite, um der jüngsten. Und so sind nur einige Beiträge dass ich in der Datenbank gespeichert war. Also, wenn wir eine neue erstellen möchten Beitrag können wir zu gehen, um einen neuen Beitrag hinzufügen, und wir können den Titel der Enter- Post, so etwas wie, CS50-Seminar. Wow, wirklich genießen das Seminar. Cool. Dann senden Sie drücken Sie, und es wird umleiten Sie zurück auf die Startseite, und dann Sie, denn Neuester Beitrag wurde zugegeben. Und wir haben noch alle dort. So, jetzt, das durch all den Schritt lassen Code und sehen, wie dies umgesetzt wird. Also, ich glaube, die erste Sache, dass uns gelassen einen Blick auf, ist eigentlich die Modelle. Ein großer Teil der Zeit, wenn Sie etwas entwerfen, Sie zuerst, wie denken möchten Sie gehen, um Ihre Daten zu vertreten, und dann entwerfen Dinge um, dass, so dass alles, was sinnvoll ist. Und das ist tatsächlich, wie ich es tat, als ich so dass diese, Ich setzte mich hin und dachte: was will ich in einem Beitrag. So, hier haben wir die gleiche Struktur dass ich früher zu erwähnen, in denen wir db = SQLDatabase ('posts.db'). In der Realität werden Sie wahrscheinlich nicht wollen, hart Code in Datenbanken deines Namens. Das sollte wohl ein Parameter sein das ist irgendwo gespeichert, vielleicht in einer Konfigurationsdatei, aber in ein kleines Beispiel, wie diese, es ist okay, Festcode, dass in. So, jetzt haben wir diesen Beitrag der Klasse, die erbt von der Basis-Modell. Und es hat wiederum die ID = primaryKeyField. Eigentlich, wenn Sie nicht angeben, wenn ich tatsächlich bekam das beheben, dann peewee wir kümmern automatische Erstellung, dass ID-Feld, und es wird automatisch machen es zu einem Primärschlüssel, die Ich denke, dass ist wirklich nett, weil in der Regel, das ist etwas, die Sie haben wollen, aber Ich mag, um es in die speziell gesagt, nur damit ich erinnere mich, dass es dort. Aber wenn Sie nicht angeben, dass, das wird es automatisch. Also, ich habe einen Zeitpunkt, eine Datetime und alles diese verschiedenen Bereichen, wenn Sie Blick auf die peewee Dokumentation, Es wird eine Liste der verschiedenen geben Arten von Feldern, die Sie verwenden können. In den meisten Fällen, ist es analog zu dem, was Sie in SQL sehen würde. So gibt es eine CharField ein VarCharFields, Textfeldern, die für sehr lange Texte, wie ein Blog-Post potentiell, DateTimeFields, DoubleFields, FloatFields, alle Dinge. Und Sie können in anderen Argumente übergeben um sie, die ich nicht angeben. Nehmen wir zum Beispiel, Sie wollte nicht ermöglichen zwei Beiträge zu den gleichen Titel haben, Sie angeben könnten so etwas wie einzigartige = True, und das ist nur ein zusätzlicher Parameter Das Feld, das, wenn es kompiliert es nach unten in die SQL, wird es geben daß sie um eindeutig sein. Sie können auch etwas geben nicht null und all die anderen Dinge Sie normalerweise tun in SQL. Also, das ist eine ziemlich einfache Modell, das das Datum hat. Beachten Sie hier, innerhalb des Datetime, I angegeben, was der Standard ist. I angegebenen es zu sein datetime.datetime.now, wegen der Art und Weise, Diese wird ausgewertet, es tatsächlich auswertet die DateTime.Now wenn Es wird in die Datenbank eingefügt. Ich denke, dass, hätte ich zu überprüfen diese, aber wenn Sie haben so etwas wie dieses, dann es tatsächlich zu bewerten wäre, dass einmal, und dann wird das Datetime- würde immer die gleiche sein. Also, wenn Sie etwas zu tun, mit datetimes, Doppelrückschlag dass es, wenn die Bewertung tatsächlich wird eingesetzt, oder Sie könnten verwechselt werden. Der Titel ist nur ein CharField, die es sind Argumente, die Sie übergeben können in genau festlegt, wie lange Sie es haben wollen, aber hier, es war auch nicht wichtig. Und Text sein wird der Text der gesamten Post, und das wird eine sein, Textfield, nur weil Sie wollen, , damit es ein ziemlich langer String sein. Dann haben wir diese Meta Unterklasse, die nur gibt an, dass wir wollen, dass die Datenbank wenn dies tatsächlich in geöffnete die db-Objekt, das wir hier haben ist. Und letzte, was wir haben, hier ist nur diese Funktion dass wir zu gehen Verwenden von unserem Haupt App um die Datenbank für die Verbindung zu initialisieren , und dann, um den Beitrag Tabelle zu erstellen. Nun lassen Sie uns einen Blick auf die wichtigsten app selbst. Also dieses ist durchaus ein etwas länger als die, dass wir zuvor gesehen haben, aber hoffentlich nicht allzu schlecht. Also, lassen Sie mich dies erstrecken sich. Okay. Also, bemerken und die obere I importiert eine ganze Reihe von anderen Dingen von Flask, dass wir nicht wirklich gesehen. Und hoffentlich können wir durchmachen Jede dieser einen nach dem anderen und sprechen ein wenig mehr über sie, indem beispielsweise sortiert. So haben wir die Glaskolben, und die render_template, die wir bisher gesehen haben, Anfrage-Objekt, was kommen wird, wenn wir uns an, wie die Form, die ich tatsächlich zu zeigen funktioniert. Umzuleiten, die Sie umgeleitet werden können vom Erstellen neuer Beitrag zurück zurück auf die ursprüngliche Homepage, und dann URL, das ist etwas, mit dem Sie es herauszufinden, wo auf die Website eine bestimmte Seite ist. Also, das nächste was ich tue, ist, dass ich Import alle Informationen, die aus den Modellen Dateien, die wir bei einem Blick auf. Und, ja. Also, noch etwas Neues, das kommt auf, wenn Sie zu tun haben, insbesondere Datenbanken, ist, dass Sie angeben können, eine Funktion, die aufgerufen wird, bevor jeder Wunsch und Funktion, bekommt nach jeder Anforderung aufgerufen, mit diesem Funktion Dekorateur app.before Anfrage. Und so wird dies ausgeführt werden sollen überall dort, wo diese Funktion. Dies muss nicht sein vor der Anfrage genannt, aber in der Regel das ist etwas, sinnvoll, es nennen. Was auch immer Funktion können Sie festlegen, Sie wollen dort aufgerufen werden, so dass ich angegebenen dieses initialize_db Funktion, die wir in den Models mussten zurück Datei, so dass vor jeder Anfrage, die Sie wollen die Verbindung zur Datenbank. Es gibt zwei verschiedene Möglichkeiten, dies zu tun. Sie könnenapp zu tun., I glaube, es ist after_request. Und die Differenz zwischen after_request und teardown_request, ist, dass after_request wird nur geschehen, wenn der Antrag tatsächlich gültig war. Und so, nur wenn das Anfrage erfolgreich war, wenn nichts schief gelaufen ist, aber teardown_request passiert im Falle einer erfolgreichen Anforderung oder im Falle eines Fehlers. Also, in der Regel, Sie wollen zu bedienen teardown_request, es sei denn, Sie tun möchten etwas, vor allem verschiedene im Falle eines Fehlers. Aber gerade zum Schließen der Datenbank, ob es erfolgreich ist oder wenn es scheitert, wir tun Sie trennen möchten aus der Datenbank. Also es heißt, db.close auf der db-Objekt. Beachten Sie, dass der teardown_request erfolgt in einer Ausnahme. So können Sie überprüfen, ob es tatsächlich ein Fehler, als es die Schließung, aber hier, hoffentlich gibt sind nicht eine ganze Reihe von Fehlern, so dass wir einfach irgendwie zu ignorieren, dass. Okay, und der Rest ist es nicht so schlimm. Also, wenn wir auf die Homepage, wir gemacht dieses home.html Template dass öffnet sich. Der Pass ist in der Post gleich, und was dies tut, ist, daran erinnern, wir haben diesen Beitrag Modell, so wählen wir alle Beiträge, und dann eine andere Sache, die Sie tun können, können Sie die WHERE-Klausel angeben, können Sie ein spezifizieren Bestellung durch, und so machen wir alle Beiträge, die erhalten ausgewählt und dann wir sie Bestellung durch den post.date.descending. Und das wird angeben, wenn sie tatsächlich herauskommen, die jüngste wird sehr erste. Und dann kommen wir an, dass in home.html die Vorlage, also lassen Sie uns tatsächlich eröffnen dass Template wirklich schnell, und werfen Sie einen Blick darauf, wie die funktioniert. Und das ist keine große HTML, aber Hoffentlich können wir auf der Python zu konzentrieren. So gibt es einen Link auf die Neu hinzufügen Post, so dass diese den Weg gibt innerhalb der Flasche, die wir zu definieren, was hier ist. Dies ist die neue Postroute, und wir geben Sie, dass Sie sich hier ein. Und damit ist ein Link, dann gehen zu dieser Strecke innerhalb des Flask-Server. Je mehr interessante Sache ist dies für die Schleife hier. So legen wir fest, dass dieser Post Parameter, wurde in den vergangen render_template Funktion, Für jeden Eintrag in der Post Objekt, das in übergeben wird. Wir wollen zum Ausdrucken die Post-Titel, in H1, und dann unten, ausdrucken möchten wir die Post Text innerhalb eines Absatzes. Und hier können wir tatsächlich rufen Sie eine Python-Funktion, so dass wir strftime aufrufen können, ST-RF-time, und Sie können im Format-String übergeben dass Sie, um die Daten in ausdrucken möchten. So ist es ist recht nett, dass man tatsächlich diese Python-Funktion aufrufen von innen hier. Sie müssen nicht, um die Formatierung zu tun der Steuerungsseite, denn wirklich, Formatieren Sie das Datum ist etwas, Sie in der Ansicht umgehen wollen. Und all diese Prozent Dinge, ist nicht super wichtig. Schlägt man in der Dokumentation für die strftime-Funktion in Python, es alles gibt Dinge, aber das ist how, wenn wir waren auf der Suche bei hier der Homepage, Es formatiert diese mit einem schönen Datum, und es gibt an, AM oder PM, aber in der Regel, wenn man haben hier nicht über diese, Sie werden wahrscheinlich einige Müll Datum, das sah nicht sehr gut. Und dann geben wir die post.text, konnte und ich habe ein paar setzen Zeilenumbrüche hier, nur einige Räume zwischen jedem Pfosten gesetzt. Also, ich glaube, das Wichtigste was in diesem Beispiel ist, dass man diese for-Schleife verwenden. Und dies ist analog zu Dinge, die Sie in PHP tun können. Sie können durch Iteration, alles übergeben wird in, usw., anstatt zu tun Kopieren / Einfügen, Kopieren / Einfügen alle HTML, Sie müssen es nur einmal schreiben und dann Sie überlaufen alle Beiträge. Und das ist etwas, gemeinsam ist, dass Sie wollen, zu tun ist, wenn Sie eine Menge von Daten haben, ist, dass für alles, was in Ihren Daten, Sie eine ähnliche Sache machen wollen. Und dann, nur nicht vergessen, dass, wenn Sie explizit ausdrucken etwas wollen in der HTML, verwenden Sie die Doppelstreben hier, aber dann, wenn Sie angeben möchten einige Informationen über einen Zustand, oder über eine for-Schleife, die Sie verwenden Sie die Halterung Prozent. Also, geht zurück auf die Python- Code, damit erklärt, was in der Haupt geschieht Route, wenn wir dorthin gehen, es gerade zeigt alle Beiträge, aber dann die Frage, ist, wie können wir tatsächlich bekommen Beiträge in die Datenbank, die ist ein wenig interessanter. Also, wenn Sie an der New klicken Beitrag Link, den wir hier gesehen haben, Es leitet Sie auf diesem Formular. Und das ist nur ein einfacher Aufruf an die render_template Funktion, die dann geht in den neuen Eintrag in HTML-Formular. Werfen wir also einen Blick auf, dass. Also dieses ist ziemlich einfach. Es hat eine einfache HTML-Formular, das wird ein wenig bekannt vor, basierend auf den Formen, in CS50 Finance. Und so haben wir hier angeben, die Aktion. Und hier, wenn Sie gerade arbeiten mit PHP normalerweise es wäre etwas wie, create.php, aber hier wir tatsächlich eine Route festlegen innerhalb des Flask-Server. Und ja, dieser Weg entspricht auf die Strecke zu erstellen dass wir hier, die wir werden in die in einem zweiten zu gehen. Und so haben wir festlegen, dass es ist ein Post-Methode, weil wir senden möchten diese Form Daten, und in der Regel wenn Sie Daten aus einem Formular sendet, möchten Sie vielleicht einen Beitrag Anfrage verwenden, nur damit Sie nicht am Ende mit diesem großen, unhandlichen URL. Aber man könnte auch eine GET-Anforderung verwenden, und geben es in mit variabler Routing, aber für Formulare, es ist schön an einen Pfosten Anfrage hier. Und so ist, dann, wie du gerade würde mit HTML und PHP zu tun, Sie können diese Texteingaben angeben, und Sie können den Namen von ihnen geben, und das ist der Name, der übergeben bekommen wird in das Anfrage Objekt innerhalb Flask. Und dann haben wir ein Absenden Button mit der Aufschrift Post. Und hier ist Beitrag der Name des Button, weil es ein Blog-Post, aber hier ist die Post-Request-Methode. Das sind also das gleiche Wort aber eigentlich in keinem Zusammenhang. Ja Gehen wir zurück zu den Python-Code, wenn wir so genannte Methode zu erstellen, bemerken hier, dass man tatsächlich innerhalb der Route festlegen die Anforderungsmethoden dass Sie übernehmen möchten, und so hier, ich angeben, dass ich nur wollen einen Beitrag Verfahren zu akzeptieren. Also, wenn ich tatsächlich versuchen, die Seite zu besuchen direkt, was mit wird eine GET-Anforderung, es wird mir sagen, "Methode nicht erlaubt." Und so haben Sie Seiten, Art wie Diese Seite zu erstellen, die ich nur wirklich Verwendung als eine Möglichkeit für das Formular vorgelegt bekommen, Sie können angeben, dass Sie dies nicht tun wollen die Menschen in der Lage, es zu gehen direkt über eine GET-Anfrage, oder wenn Sie nicht wollen, aus irgendeinem Grund, ein Gesuch, Sie könnten nur angeben, hier bekommen, aber in diesem Beispiel, wir wollen, dass die Gesuch zu gehen. Also, wenn create_post aufgerufen wird, wenn besuchen wir, dass über das Gesuch, wenn Sie zu einer bestimmten gehen Strecke, es gibt diese Anfrage-Objekt, und wir importieren musste Anfragen an die Spitze, aber es gibt diese Anfrage Objekt, das in übergeben wird, und Sie die Formulardaten zugreifen können, die automatisch gefüllt bekommen Wenn Sie eine Anforderung aus einem Formular zu senden. Und dann, was ich denke, ist wirklich cool ist dass die Form Objekt übergeben bekommen in, ist nur eine Python-Wörterbuch, enthält, wenn Sie dies hier access-- lassen me nächsten ziehen Sie die HTML, um es einfach so können Sie das haben als Referenz, ja, so die Namen, die wir hier angeben für die verschiedenen Felder, so der Titel und der Text, die wir dann benutzen Sie einfach den über hier als Indizes in die Formulardaten. Also das ist super bequem. Also dann nennen wir post.create, die erstellen und automatisch einfügen diese neue Post-Objekt in der Datenbank. Und ich denke, diese Funktion zu erstellen Hier ist eine wirklich coole Beispiel dafür, wie leistungsstarke Kolben wird und die Arbeit mit diesem, weil, wenn Sie wurden, etwas zu tun in PHP, könnten Sie zu haben, tun eine Menge Validierung, Sie wären dann stellen Sie eine Datenbankverbindung, Sie wären dann führen Sie die SQL-Abfrage, aber hier müssen wir nur dieses schöne post.create, die wir dann einfach Holen Sie sich die Informationen aus der Request-Objekt, und übergeben Sie sie in eine neue Post, dass wir schaffen. Und dann, das allerletzte was wir tun wollen, ist es, die umgeleitet werden Benutzer zurück in die Heimat. Und so nutzen wir Flask umleiten Funktion. Und etwas, das wir nicht gesehen hatte, zuvor war diese URL-Funktion. So ist die URL für die Funktion können Sie tatsächlich den Namen übergeben einer Funktion in Ihrer Python-Code, anstelle der bestimmten Route dass es an. So konnte ich genauso gut umgeleitet einem Benutzer, Schrägstrich, die sie schicken würde wieder nach Hause, aber mit der URL für die Funktion ist nett, weil, wenn Sie ändern die Ort, an dem die Dinge sind, also lassen Sie uns sagen, dass ich das ändern Heimat auf / home stattdessen, Dies würde immer noch dann wieder / home, denn tatsächlich geht und schaut nach oben der Name der Funktion, und geben Ihnen zurück die URL für das. Also, irgendwie auf die davon aus, dass Sie eher zu, wo die Dinge ändern sind, als die Namen der Funktionen. Sie können dies auch wirklich nutzen schöne URL für Funktion. Und eine Sache, die Sie wissen sollten das ist ein wenig kompliziert, ist, dass Sie denken, Sie könnten nur rufen umleiten auf der URL, aber eigentlich alle Routen haben , eine Art von Text und HTML zurückkehren, so dass Sie tatsächlich haben, Rück die Umleitung Anruf. Sonst werden Sie etwas zu bekommen ungültige etwa nicht wieder einen String, Da alle diese zurückkehren müssen HTML Sie wirklich wollen, zu machen. Und so, wenn Sie die Umleitung aufrufen, Es leitet Sie auf der Seite, aber es tatsächlich HTML zurückgibt müssen Sie diese Umleitung auszuführen. Gehen Sie zurück auf die Startseite. Also müssen wir diese zwei verschiedene Ansichten. Wir haben die Home-Ansicht. Oder ich denke, ich sollte Vorlagen sagen. Wir haben diese beiden Vorlagen, die Heimat Vorlage, zeigt alle unsere Beiträge und dann haben wir diese Anzeige Sache, und wenn Sie den Beitrag klicken, geht es auf eine neue Route im Glaskolben, aber das Route nicht unbedingt eine entsprechende Vorlage. Sie müssen nicht, um zu sehen nichts, aber man kann immer noch diese Arbeiten gehen hinter den Kulissen. Und dann haben Sie umgeleitet zurück zur Homepage. Und auf jeden Fall ist es einfach, um zu arbeiten in irgendeiner schöner CSS in die Vorlage und stellen Sie so aussehen viel schöner, aber alle von der Hauptsystem gibt es in der Python. Haben Sie Fragen zu diesem Beispiel? Ich weiß, es gibt eine Menge von verschiedene Dinge, die es gibt, eine Menge Dinge, die wir nicht gesehen hatte, vor, aber wie alles. Ja. ZIELGRUPPE 1: Haben Sie nichts zu tun haben Sonder, um die Daten, die es zu schrubben kommen in der Form? Ich bemerkte Sie gerade gesagt "zu schaffen" EZRA Zigmond: Ja, das ist also tatsächlich, das ist ein wirklich guter Punkt. Die Frage war, sind Sie brauchen, um zu überprüfen und sicherzustellen daß die Daten gültig sind, und zu tun, jede Art von Wäsche um sicherzustellen, dass sie gültig ist, weil, wie Sie hier sehen können, Ich sage nicht, das zu tun. Also mal sehen, was passiert, wenn ich nach etwas leer. Also, es wird eigentlich nur machen ein leer Post und füllen Sie die Datetime. So in der Realität würde Sie wahrscheinlich wollen, etwas zu tun, wie, vielleicht angeben, wenn Titel gleich ist die leere Zeichenkette, dann tun Sie das nicht. Oder tun es nur, wenn der Titel nicht gleich der leeren String. So dass es nicht wirklich automatisch kümmern sich um diese Wäsche für Sie, so dass Sie noch brauchen, um das zu tun. Ja, gute Frage. ZIELGRUPPE 2: Ist es Peeling für die Fortsetzung Injektion? Wissen Sie? EZRA Zigmond: Ich hoffe, peewee tut. Ich denke, es wäre sicherlich ein hübsch sein bad-Bibliothek, wenn sie nicht tun. Ich weiß es nicht genau. Müsste ich bei der Suche Abfrage, die es generiert. Ich denke, dass, wenn ich in eine typisierte Blog-Post, die Art sah wie eine SQL-Injection-Angriff, so etwas wie dieses, wenn diese ist wie ein Passwort-Feld oder so etwas, Sie könnte so etwas wie dies zu tun. Ich denke, das wird immer noch bekommen buchstäblich geschrieben, aber ich denke, peewee tut eine Art von Wäsche des Daten bevor es tatsächlich führt es aus. ZIELGRUPPE 1: Das Textfeld ist entwickelt, um Klartext zu nehmen, nicht wahr? EZRA Zigmond: Ja, ist es. Ja. Ich denke also, dass alle die, so ist dies, richtiges Verhalten, das wird das zu tun, Aber ich denke, peewee hoffentlich tut eine Art von Schutz an ihrem Ende. Und wenn man wollte überprüfen, dass es es Möglichkeiten, wenn Sie eine Abfrage zu generieren. so dass Sie nicht zu haben, führen Sie es direkt. Ich müsste einen nehmen Blick auf Unterlagen, aber man kann tatsächlich sehen die SQL, die es erzeugt, und einen Blick auf das, und machen sicher, dass es zu entkommen Dinge. Ein weiterer Grund, warum Sie wollen an der SQL aussehen dass peewee ausgibt, ist, wenn Dinge scheinen wirklich langsam gehen, können Sie einen Blick und sehen, was es tatsächlich zu tun, denn es ist manchmal leicht versehentlich hinzufügen in, wie Sie es schreiben, können Sie versehentlich habe es wählen Sie zunächst die gesamte Datenbank, und führen Sie dann eine Art Betrieb auf, dass, wenn Sie es wirklich bedeutet, um eine Untergruppe auszuwählen. Und so, wenn die Dinge nicht ganz rechts gehen, es ist gut, einen Blick auf die Anfrage übernehmen Das ist eigentlich immer generiert. Ja. ZIELGRUPPE 2: Wenn Sie zum ersten Mal gestartet, Sie setzen in der Port als 5000. EZRA Zigmond: Ja. ZIELGRUPPE 2: Ist der Standard mit peewee, oder ist das etwas, was Sie ändern können? EZRA Zigmond: Ja, so dass die Port ist standardmäßig mit Flachmann. Wenn Sie es, ohne laufen Spezifizieren nichts, wird es automatisch tun. Ich glaube, ich hätte zu überprüfen diese, Sie können jedoch, dass in der app.run angeben, Ich denke, man kann etwas tun, port = 8080. Lassen Sie uns geben, dass ein Versuch, sehr kurz. Ja, so müssen Sie nur angeben können, port = 8080, und es wird dort ausgeführt, was ich denke, wenn man wollte, um sie auszuführen auf der IDE, ich habe nicht versucht, diese aus, aber ich denke, dass, wenn Sie lief es auf Port 8080, Sie wahrscheinlich in der Lage sein, Zugriff auf den Server, genau wie Sie für die Website waren. Ja, das ist aber nicht nur einfach zu ändern, wenn Sie irgendeine Art wie Port-Forwarding Dinge, die Sie tun müssen. Noch Fragen? Ja? ZIELGRUPPE 1: Also, ich sah Ihr Modelle, die, wie Sie bereits erwähnt, müssen Sie die angeben, Datenbank für jedes Objekt. Haben Sie vielleicht wissen, tut dass es wirklich einfach, wenn Sie haben viele SQLite-Datenbanken, die Sie um für eine einzelne Web-App verwenden möchten, dass man nur ein paar angeben der verschiedene, in Ihrem Modell? EZRA Zigmond: Ja, lassen Sie mich zu öffnen, dass sich ganz schnell. Also, Sie sagen, wenn Sie haben wollen eine Reihe von verschiedenen etwas, vielleicht mögen und die Studenten, für einige Grund so etwas? Ja, so denke ich, dass Sie immer noch, jedes Modell müsste immer noch einfach nur eine Datenbank zugewiesen ist, aber wenn Sie haben wollte verschiedene Modelle, haben verschiedene Datenbankobjekte zugeordnet um es, könnte man auf jeden Fall tun. Also, wenn ich eine neue, etwas wie das, und jetzt ist dies ein Schüler, sieht seltsam wie ein Blog-Post, Ich könnte das angeben Datenbank ist gleich hier db_2. Also, ich denke, das ist das Haupt Weise können Sie das tun. Cool. Noch Fragen? Also nur zu Ende zu ein wenig bit, hier sind einige Ressourcen, und diese Folien werden online gebucht werden so können Sie tatsächlich auf diese Links. Die besten Quellen sind wirklich die Dokumentation für Flask und peewee selbst. Sie sind wirklich gut geschrieben, denke ich. So wird der Kolben Website hier, und sie einen Schnellstart-Tutorial, dass wird durch ähnliche Fuß Dinge, auf das, was ich durch ging, aber wenn Sie jede Art von Kritik will der Dinge, die ich ging, oder Sie dachten, dass ich erklärte, etwas in einer verwirrenden Art und Weise, sie werden ähnliche Beispiele dort haben. Peewee hat Dokumentation und sie einen Schnellstart-Tutorial haben dass über die wichtigsten Parameter geht dass Sie möchten, um zu verwenden. Also, die Dinge, die ich gesprochen mit die einzigartige und Angabe Standardwerte, die verschiedenen Arten von Feldern, die Sie verwenden können, diese würden alle da sein. Auch, wenn Sie Fragen zu peewee, und Sie können sie auf Stackoverflow zu senden, der Kerl, peewee tatsächlich geht weiter und antwortet denen manchmal. Wenn Sie eine Frage, hoffentlich er wird in der Lage, sie zu beantworten, denn er schrieb die ganze Sache. Ich denke, das ist alles, was Ich wollte zu decken. Dank für das Coming-out.