1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [Musikwiedergabe] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Hallo, alle zusammen. 5 00:00:05,830 --> 00:00:08,020 Dank für das Kommen heraus heute. 6 00:00:08,020 --> 00:00:10,660 Dieses Seminar ist "Python Web Apps mit Flasche. " 7 00:00:10,660 --> 00:00:14,510 >> Also, ich werde reden ein wenig darüber, warum 8 00:00:14,510 --> 00:00:17,400 möchten Sie vielleicht Flask verwenden, um Web-Anwendungen mit Python im Gegensatz 9 00:00:17,400 --> 00:00:21,556 zu einigen anderen Frameworks gibt, wie Django, die die bekannteste ist. 10 00:00:21,556 --> 00:00:24,330 Der Untertitel ist "und peewee ", was etwas ist 11 00:00:24,330 --> 00:00:27,250 werden wir darüber, wie zu sprechen mit SQL-Datenbanken zu interagieren. 12 00:00:27,250 --> 00:00:29,610 Es macht es wirklich schön. 13 00:00:29,610 --> 00:00:32,390 >> So, hier ist nur ein kurzer Überblick was ich will gehen über. 14 00:00:32,390 --> 00:00:35,520 Also, zuerst, nur eine Folie das wird Quickstart sein, 15 00:00:35,520 --> 00:00:38,530 das ist, wie man alles bekommen Einrichten des Computers an. 16 00:00:38,530 --> 00:00:41,760 Ich werde demonstrieren diese auf meinem lokalen Mac-Maschine, 17 00:00:41,760 --> 00:00:45,220 nur weil das ist, wo ich dies getan vor, ich bin am liebsten mit ihm, 18 00:00:45,220 --> 00:00:48,510 aber das ist definitiv möglich, auf dem CD50-IDE. 19 00:00:48,510 --> 00:00:52,050 >> So, nach diesem, ich will vorstellen, was Flask ist, 20 00:00:52,050 --> 00:00:55,089 und davon überzeugen, warum sollten Sie verwenden Sie es in den ersten Platz. 21 00:00:55,089 --> 00:00:56,880 Dann werde ich einen schnellen geben Beispiel dafür, was Sie 22 00:00:56,880 --> 00:01:00,550 kann in Glaskolben, ein kleines Beispiel zu tun von dem, was Sie in peewee tun können, 23 00:01:00,550 --> 00:01:05,010 und dann werde ich Ihnen zeigen, eine weitere vollständige Beispielanwendung 24 00:01:05,010 --> 00:01:07,520 dass ich zusammen, dass wir durch gemeinsam gehen. 25 00:01:07,520 --> 00:01:10,040 >> Und dann schließlich in, die letzte Folie, ich habe 26 00:01:10,040 --> 00:01:12,730 einige Ressourcen, die Sie suchen im online für weitere Informationen. 27 00:01:12,730 --> 00:01:15,560 Dies stellt jedoch keine vollständige Tutorial, wie man Flask verwenden. 28 00:01:15,560 --> 00:01:18,140 Und ich werde hoffen, verlassen einige Zeit für Fragen. 29 00:01:18,140 --> 00:01:21,050 Jeder lokal beobachten, nur wie, in der Mitte schreien 30 00:01:21,050 --> 00:01:22,340 Falls du irgendwelche Fragen hast. 31 00:01:22,340 --> 00:01:27,150 >> So schnelle Installation stuff, wenn Sie folgen möchten, 32 00:01:27,150 --> 00:01:29,240 oder wenn Sie diese erhalten möchten up auf Ihrem eigenen Rechner, 33 00:01:29,240 --> 00:01:32,440 Ich werde sein mit Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flask funktioniert mit Python 3, aber Ich mag 35 00:01:35,860 --> 00:01:38,660 Verwendung von Python 2, weil es einige Python-Pakete, 36 00:01:38,660 --> 00:01:40,910 noch nicht mit 3 zu arbeiten. 37 00:01:40,910 --> 00:01:44,800 Wenn Sie pip installiert haben, die ist ein Python-Paket-Manager, 38 00:01:44,800 --> 00:01:48,190 Ich denke, wenn Sie Ihre Python ist größer als oder gleich 2.7.9 39 00:01:48,190 --> 00:01:52,220 haben Sie es bereits installiert, ist es Super leicht, diese Pakete zu installieren. 40 00:01:52,220 --> 00:01:54,990 >> Sie können pip installieren müssen Flask, pip installieren peewee, 41 00:01:54,990 --> 00:01:58,600 normalerweise Sie sudo nur laufen müssen so dass die Berechtigungen erarbeiten. 42 00:01:58,600 --> 00:02:01,080 Und, wenn Sie eine Super alte Version des Python, 43 00:02:01,080 --> 00:02:05,100 Ich empfehle, die Aktualisierung Ihrer Python, oder unter Verwendung von Easyinstall, um PIP zu installieren. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Also, das nächste Frage ist, was ist Flask? 46 00:02:11,120 --> 00:02:13,280 Und ich denke, zunächst ein vernünftige Frage Ich fragte mich, 47 00:02:13,280 --> 00:02:15,585 für eine lange Zeit ist, was ist eine Web-app? 48 00:02:15,585 --> 00:02:17,960 Denn das ist ein Wort, das ich denken ist viel herum geworfen 49 00:02:17,960 --> 00:02:19,240 dass ich nicht wirklich wissen. 50 00:02:19,240 --> 00:02:22,340 Und ich denke, dass die beste Beispiel, wie eine Web-app ist, 51 00:02:22,340 --> 00:02:26,960 wirklich CS50 Finanzen, in denen es ist nicht wirklich nur eine Website, 52 00:02:26,960 --> 00:02:29,320 aber es ist etwas, dass Sie könnte eine Art interagieren. 53 00:02:29,320 --> 00:02:31,736 Es gibt Benutzerkonten und allerlei verschiedene Dinge. 54 00:02:31,736 --> 00:02:35,010 Also, wo genau Sie ziehen die Linie zwischen dem, was ist eine Website, 55 00:02:35,010 --> 00:02:38,780 und was ist eine Web-App, ist Art willkürlich, aber ich denke, die Idee, 56 00:02:38,780 --> 00:02:42,110 es ist etwas mehr als eine Website und es ist eine nützliche Anwendung. 57 00:02:42,110 --> 00:02:46,081 >> So ist Flask ein Rahmen für die machen Web-Anwendungen mit Python. 58 00:02:46,081 --> 00:02:48,330 Und hoffentlich Ende Dies werde ich Sie zu überzeugen, 59 00:02:48,330 --> 00:02:52,210 dass man tatsächlich etwas schreiben wie CS50 Finance mit Python, die ich 60 00:02:52,210 --> 00:02:53,950 wie viel besser als PHP, persönlich. 61 00:02:53,950 --> 00:02:57,320 >> Also, Glaskolben ist, nennen sie eine microframework, wodurch, 62 00:02:57,320 --> 00:02:59,800 sie bedeuten, ist es sehr einfach, aber erweiterbar. 63 00:02:59,800 --> 00:03:02,980 So hat es gerade was Sie benötigen, aber wenn Sie mehr Funktionen wünschen, 64 00:03:02,980 --> 00:03:04,522 es ist leicht, sie in zu bringen. 65 00:03:04,522 --> 00:03:06,480 Aber gerade weil es ein microframework, nicht 66 00:03:06,480 --> 00:03:08,960 bedeutet, dass es nur für kleine Projekte. 67 00:03:08,960 --> 00:03:12,590 Ich habe hier einen Link, die besagt, dass Obama verwendet Flask 2012 68 00:03:12,590 --> 00:03:14,410 für seine Kampagne Website, die hoffentlich, 69 00:03:14,410 --> 00:03:16,937 ist so etwas wie eine Bestätigung. 70 00:03:16,937 --> 00:03:18,770 Aber die Sache, die ich wirklich über Flask gefallen 71 00:03:18,770 --> 00:03:22,401 ist, dass es nicht wirklich jede Art von Entscheidungen für Sie. 72 00:03:22,401 --> 00:03:24,150 Nur weil wir reden über Web-Anwendungen, 73 00:03:24,150 --> 00:03:26,940 Ich muss es zu Ruby on vergleichen Rails und Django, die beide 74 00:03:26,940 --> 00:03:30,450 sind große Frameworks, aber Beide Annahmen 75 00:03:30,450 --> 00:03:33,600 darüber, wie Sie wollen Interaktion mit Datenbanken, 76 00:03:33,600 --> 00:03:36,900 wie Sie Ihren präsentieren Blick, und sie sind auf jeden Fall 77 00:03:36,900 --> 00:03:38,850 gute Aspekte zu. 78 00:03:38,850 --> 00:03:41,490 >> Zum Beispiel, Ruby on Rails hat diese aktive Aufzeichnungssystem, 79 00:03:41,490 --> 00:03:43,100 ist eine sehr schöne ist Weg zur Interaktion mit Daten, 80 00:03:43,100 --> 00:03:45,960 aber wenn Sie Ruby on verwenden möchten Rails, du bist irgendwie in diese gebunden. 81 00:03:45,960 --> 00:03:47,835 Aber mit Glaskolben, wie werde ich zeigen Sie mit peewee, 82 00:03:47,835 --> 00:03:49,830 Sie welcher Art auch immer verwenden können der Datenbank, die Sie möchten, 83 00:03:49,830 --> 00:03:53,980 und Sie nur ziehen kann, dass in als Erweiterung in die Flasche. 84 00:03:53,980 --> 00:03:56,350 >> Also, warum ich wirklich wie Glaskolben, es ist, dass es 85 00:03:56,350 --> 00:04:01,170 keine Annahmen zu machen für Sie basierend auf Dinge, die Sie nicht wirklich brauchen. 86 00:04:01,170 --> 00:04:04,440 >> Also, warum sollten Sie Flask benutzen? 87 00:04:04,440 --> 00:04:08,230 Die Vorteile sind, es ist einfach hat wirklich die Kernfunktionen 88 00:04:08,230 --> 00:04:09,420 hinein gebaut, die Sie benötigen. 89 00:04:09,420 --> 00:04:11,980 So müssen Sie nicht zu kümmern Verständnis eine ganze Reihe von Dingen, 90 00:04:11,980 --> 00:04:13,175 dass Sie nicht wirklich brauchen. 91 00:04:13,175 --> 00:04:15,060 Sie müssen sich keine Sorgen machen zu müssen zum Deaktivieren der Features 92 00:04:15,060 --> 00:04:16,620 dass Sie nicht wirklich brauchen. 93 00:04:16,620 --> 00:04:21,082 >> Und, wie gesagt, es ist super einfach, in den Verlängerungen der Dinge hinzufügen 94 00:04:21,082 --> 00:04:21,790 dass Sie benötigen. 95 00:04:21,790 --> 00:04:24,700 Einige von ihnen weist Flask ihre eigene Unterstützung für ihn. 96 00:04:24,700 --> 00:04:28,230 Also gibt es etwas namens Flask admin, die diese Admin-Spiegel 97 00:04:28,230 --> 00:04:32,060 Panel, das Django bietet, das gibt Ihnen eine schöne visuelle Art und Weise 98 00:04:32,060 --> 00:04:33,405 auf Ihre Website zu verwalten. 99 00:04:33,405 --> 00:04:35,280 Aber noch einmal, wenn Sie , etwas einfach, 100 00:04:35,280 --> 00:04:39,550 Sie wahrscheinlich einen großen Server-Betreiber brauchen Panel, so dass ich denke, das ist sehr nett. 101 00:04:39,550 --> 00:04:45,940 Und die Nachteile sind, dass Sie haben weniger Leistung aus der Box. 102 00:04:45,940 --> 00:04:49,660 Also, wenn Sie zuerst öffnen Glaskolben, und in Ihrer Python-Programm, 103 00:04:49,660 --> 00:04:53,150 geben Sie einfach von Flask import *, oder was auch immer, 104 00:04:53,150 --> 00:04:55,957 Sie nicht genau alle erhalten Funktionen möchten Sie vielleicht. 105 00:04:55,957 --> 00:04:58,540 Und so muss man expliziter Liste der Funktionen, die Sie möchten. 106 00:04:58,540 --> 00:05:01,990 Also das ist ein Nachteil, aber ich denken, dass für den Bau von kleinen Web- 107 00:05:01,990 --> 00:05:04,782 Apps wie werde ich sein, die Sie, das ist nicht wirklich ein Problem. 108 00:05:04,782 --> 00:05:07,281 Und was ist das letzte, was ist denn sagen, was ein Tippfehler ist, 109 00:05:07,281 --> 00:05:10,240 ist, dass es weniger standardisiert Konventionen zum Flask zu verwenden, 110 00:05:10,240 --> 00:05:12,400 nur weil es nicht so viele Menschen, die es professionell nutzen 111 00:05:12,400 --> 00:05:13,191 im Vergleich zu Django. 112 00:05:13,191 --> 00:05:16,380 Also, wenn Sie etwas aussehen, "Wie kann ich tun, x" in Django, 113 00:05:16,380 --> 00:05:18,190 Sie werden wahrscheinlich feststellen, es. 114 00:05:18,190 --> 00:05:20,260 >> Es gibt gutes Design Muster, die Sie verwenden können, 115 00:05:20,260 --> 00:05:22,660 jedoch mit Glaskolben, es ist Art seinen Weg gehen, 116 00:05:22,660 --> 00:05:24,850 nur weil es ein hübsche kleine Bibliothek. 117 00:05:24,850 --> 00:05:27,100 Das sind also die Nachteile, aber ich denke, 118 00:05:27,100 --> 00:05:29,370 dass es immer noch eine gute Bibliothek zu benutzen. 119 00:05:29,370 --> 00:05:31,909 >> Also lasst uns einfach rechts in die Flasche zu springen. 120 00:05:31,909 --> 00:05:34,200 Dies ist definitiv nicht um eine komplette Tutorial, 121 00:05:34,200 --> 00:05:37,480 aber es ist, um Ihnen eine Idee geben der, wie die Dinge zu strukturieren, 122 00:05:37,480 --> 00:05:40,790 und so Sie sich wohl fühlen werde ab und suchen Sie in der Dokumentation 123 00:05:40,790 --> 00:05:42,570 und der Suche nach mehr. 124 00:05:42,570 --> 00:05:48,500 >> Also, lassen Sie mich eröffnen ein wirklich einfaches Beispiel anfangs 125 00:05:48,500 --> 00:05:50,737 und zeigen Ihnen, was das sieht aus wie, und dann werden wir 126 00:05:50,737 --> 00:05:52,070 brechen sie ein bisschen mehr. 127 00:05:52,070 --> 00:05:56,160 >> Also das hier, lassen Sie mich es läuft. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 So, ich habe jetzt meine Anwendung läuft. 130 00:06:09,750 --> 00:06:15,910 Ich werde öffnen Safari und es ist auf meinem lokalen Host ausgeführt wird. 131 00:06:15,910 --> 00:06:19,360 Also ich werde einfach diese zu vergrößern. 132 00:06:19,360 --> 00:06:23,960 Aber localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Und so, gerade jetzt, hat das alles ist, wenn Sie die Website besuchen, 134 00:06:27,650 --> 00:06:31,490 sie druckt "Hallo Flask" die nicht super nützlich, 135 00:06:31,490 --> 00:06:34,630 aber ich denke, es ist cool, dass in dieser kleinen Datei hier, 136 00:06:34,630 --> 00:06:37,390 wir haben ein Web-Server läuft das ist Ausdruck von etwas. 137 00:06:37,390 --> 00:06:40,500 Also, lassen Sie tatsächlich aussehen auf den Code für eine Sekunde, 138 00:06:40,500 --> 00:06:43,080 und brechen sie ein wenig. 139 00:06:43,080 --> 00:06:45,260 Ist die Größe gut für alle da? 140 00:06:45,260 --> 00:06:51,560 >> Also, hoffentlich, du bist etwas komfortabel mit Python. 141 00:06:51,560 --> 00:06:55,820 Ich gehe davon aus, dass wir zu betrachten die Python und durch sie zu lesen. 142 00:06:55,820 --> 00:06:59,290 Wenn Sie Fragen zu haben nichts, ich kann auch über das gehen. 143 00:06:59,290 --> 00:07:03,974 >> So ist die erste Zeile ist, vom Glaskolben, wir importieren, Glaskolben mit einem großen "F" 144 00:07:03,974 --> 00:07:06,140 welche Art von alles ist der wichtigsten Features, die Sie benötigen. 145 00:07:06,140 --> 00:07:08,890 Wann immer du schreibst eine Datei und mit Glaskolben, 146 00:07:08,890 --> 00:07:12,120 Sie gehen zu importieren, dass möchten, nur weil das hat alle wichtigen Dinge. 147 00:07:12,120 --> 00:07:15,400 Das nächste, was wir tun, ist, dass wir rufen Sie diese Funktion Flask, nur 148 00:07:15,400 --> 00:07:19,270 eine app-Objekt zu erstellen, und du bist immer das tun zu wollen. 149 00:07:19,270 --> 00:07:25,960 >> Und dann sprang, um die unten schnell, hier ist dieser Teil, 150 00:07:25,960 --> 00:07:28,760 'if_name _ == "_ main_" ", das ist Art von einem Python-Konvention. 151 00:07:28,760 --> 00:07:32,750 So wird dies nur ausführen, wenn Sie führen Sie diese Datei direkt mit Python. 152 00:07:32,750 --> 00:07:36,040 Dann nennen wir app.run, die wird tatsächlich die App zu starten werde. 153 00:07:36,040 --> 00:07:39,570 >> Also, das ist die Hauptstruktur, dass Sie werden auf jeden Flask Anwendung haben, 154 00:07:39,570 --> 00:07:48,550 wird Sie dieses haben app = Flask (_NAME_) und dann app.run. 155 00:07:48,550 --> 00:07:54,940 >> So, dass ich die beiden Dinge, hier sind, was wir als Routen. 156 00:07:54,940 --> 00:07:57,150 Also, lasst uns darüber reden Routing ein bisschen mehr. 157 00:07:57,150 --> 00:07:58,430 Ich komme zu der Folie zu gehen. 158 00:07:58,430 --> 00:08:02,540 >> Also die grundlegendste Konzept in der Flasche wird das Routing. 159 00:08:02,540 --> 00:08:06,750 Und es ist die Idee, dass man zuweisen Funktionen in Python 160 00:08:06,750 --> 00:08:11,280 auf bestimmte Adressen auf Ihrer Webseite ein. 161 00:08:11,280 --> 00:08:13,930 Also, wann immer Sie wollen um eine neue Route zu erstellen, 162 00:08:13,930 --> 00:08:16,500 Sie diese @ app.route verwenden Funktion Dekorateur. 163 00:08:16,500 --> 00:08:19,770 Also, wenn Sie nicht vertraut sind Funktion Dekorateure in Python, 164 00:08:19,770 --> 00:08:24,160 es ist das Konzept, Stellt eine Funktion übernehmen 165 00:08:24,160 --> 00:08:26,800 und umgeben ihn durch etwas anderes. 166 00:08:26,800 --> 00:08:30,140 >> Also wirklich, was dieser tut, Dekorateur, ist, dass es die Funktion darunter, 167 00:08:30,140 --> 00:08:33,409 und weitere Informationen ergänzt um ihn, aber was tatsächlich Flask 168 00:08:33,409 --> 00:08:37,480 hat das zu erreichen ist nicht super entscheidende, aber was wichtig ist, 169 00:08:37,480 --> 00:08:43,640 ist, dass, bevor die Route, die Sie Diesen @ app.route, und dann 170 00:08:43,640 --> 00:08:46,480 die Adresse der Route, so dass der Schrägstrich ist, was wir 171 00:08:46,480 --> 00:08:48,360 sah, wenn wir öffnen Sie einfach die Web-Seite. 172 00:08:48,360 --> 00:08:49,580 Das ist also der Homepage. 173 00:08:49,580 --> 00:08:51,037 Es ist nur die Schrägstrich-Route. 174 00:08:51,037 --> 00:08:52,370 Und dann haben Sie diese Funktion. 175 00:08:52,370 --> 00:08:54,453 Der Name der Funktion kann alles sein, was Sie wollen. 176 00:08:54,453 --> 00:08:56,930 Es muss nicht notwendigerweise müssen mit der Strecke zu tun. 177 00:08:56,930 --> 00:08:59,440 Und dann, was auch immer der Funktion Rückkehr 178 00:08:59,440 --> 00:09:01,730 sollte die Funktion einen String zurück. 179 00:09:01,730 --> 00:09:03,740 Und das String kann HTML oder irgendetwas, 180 00:09:03,740 --> 00:09:06,920 und das ist eigentlich das, was erhalten Ihren Web-Browser als HTML zurück, 181 00:09:06,920 --> 00:09:08,200 und es wird machen, dass. 182 00:09:08,200 --> 00:09:12,030 >> Das ist also der gleiche Code das war aus dem Beispiel 183 00:09:12,030 --> 00:09:16,430 dass ich gerade lief, so dass, wenn wir Strich zu besuchen, es eine Hallo Welt-Funktion ruft die 184 00:09:16,430 --> 00:09:20,470 nur eine Zeichenfolge, Hallo Flask zurückkehrt, und das wird auf dem Bildschirm ausgegeben. 185 00:09:20,470 --> 00:09:27,290 >> Es gibt also ein weiteres Beispiel, was ist, wenn Sie besuchen / hallo, 186 00:09:27,290 --> 00:09:30,370 Es druckt Hallo Wort, das sollte eigentlich sagen: Hallo Welt, 187 00:09:30,370 --> 00:09:32,010 aber lasst uns so tun, als beabsichtigt war. 188 00:09:32,010 --> 00:09:35,140 Lassen Sie uns also zu ziehen, dass sich ganz schnell. 189 00:09:35,140 --> 00:09:41,290 >> Also, wenn Sie gehen, um localhost / hallo, es wird jetzt etwas anderes zu drucken. 190 00:09:41,290 --> 00:09:45,680 Also das ist nur ein kleines Beispiel dafür, wie Sie können zwei verschiedene Routen erstellen. 191 00:09:45,680 --> 00:09:50,630 >> Also, das ist bislang nicht super nützlich, es gibt nicht viel Sie tun können, 192 00:09:50,630 --> 00:09:55,360 Sie könnten nur alles tun, was mit mit verschiedenen HTML-Seiten, 193 00:09:55,360 --> 00:09:58,000 und wenn Sie eine bestimmte besuchen Seite ist nur die Seite lädt. 194 00:09:58,000 --> 00:10:00,864 Also mal sehen, etwas mehr nützliche Dinge, die Sie tun können. 195 00:10:00,864 --> 00:10:03,780 Also, eine Sache, die Sie haben könnten in dem Beispiel, das ich zog bemerkt 196 00:10:03,780 --> 00:10:07,160 up, ist, dass ich app.run hatte (debug = True). 197 00:10:07,160 --> 00:10:09,580 Und so, was diese Debug-Argument tut, 198 00:10:09,580 --> 00:10:14,600 dass, wenn Sie Ihre Web-Server laufen, wenn Sie in Ihrer Anwendung sind, 199 00:10:14,600 --> 00:10:18,100 Wenn Sie eine Datei ändern, wird es automatisch neu den Server. 200 00:10:18,100 --> 00:10:21,160 >> Und so können Sie eigentlich nicht haben, um Neustart Python, die super nützlich ist. 201 00:10:21,160 --> 00:10:24,020 Ich kann zeigen, dass. 202 00:10:24,020 --> 00:10:26,960 Lassen Sie mich nach oben ziehen mein Code mit dem Tippfehler drin, 203 00:10:26,960 --> 00:10:30,420 und so tun, dass Tippfehler wurde dort setzen absichtlich für lehrreiche Zwecke. 204 00:10:30,420 --> 00:10:31,625 Also lassen Sie uns dieses wieder hinzuzufügen. 205 00:10:31,625 --> 00:10:33,140 So, jetzt sagt Hallo Welt. 206 00:10:33,140 --> 00:10:34,410 Ich werde sie zu speichern. 207 00:10:34,410 --> 00:10:36,540 Und wenn wir wieder nach oben ziehen das Terminal, werden Sie 208 00:10:36,540 --> 00:10:39,520 sagen, dass es neu zu starten, weil es eine Veränderung festgestellt, 209 00:10:39,520 --> 00:10:43,620 und so jetzt, wenn wir diese Seite neu laden, Es druckt die richtige Sache. 210 00:10:43,620 --> 00:10:45,630 >> So debug ist super nützlich, dass. 211 00:10:45,630 --> 00:10:48,740 Auch, wenn Sie welche haben Art von einem Absturz, so 212 00:10:48,740 --> 00:10:54,370 lassen Sie mich diese Anwendung zum Absturz zu bringen indem es nicht einen String zurück. 213 00:10:54,370 --> 00:10:57,540 Also, lassen Sie einfach nur sie return None aus irgendeinem Grund. 214 00:10:57,540 --> 00:11:00,810 Und dann, als ich diese zu besuchen Seite, wird es nur zum Absturz, 215 00:11:00,810 --> 00:11:04,465 aber der Server nicht nur zum Absturz, es tatsächlich gibt Ihnen einen super nützlich zurück 216 00:11:04,465 --> 00:11:06,490 Spur von allem, was schief gelaufen ist. 217 00:11:06,490 --> 00:11:10,050 Und was ist wirklich nett, ist, dass bei jedem Schritt in dieser Rückverfolgung, 218 00:11:10,050 --> 00:11:14,260 könnten Sie öffnen ein interaktives Shell hier und Art zu drucken, was 219 00:11:14,260 --> 00:11:17,780 Variablen, die Sie wollen, um einen Blick auf zu nehmen. 220 00:11:17,780 --> 00:11:21,054 >> Und so das Debugging ist wirklich nützlich, um herauszufinden, 221 00:11:21,054 --> 00:11:23,470 was ist los mit Ihrer Server, und nicht nur zu sehen, 222 00:11:23,470 --> 00:11:28,201 etwas in PHP wie ein 500 Innen Server-Fehler, die super nutzlos. 223 00:11:28,201 --> 00:11:30,700 Eine Sache, die Sie wissen sollten, ist, dass, wenn Sie Ihre Anwendung online zu stellen 224 00:11:30,700 --> 00:11:34,260 so ist es für die Öffentlichkeit, die Sie nie wollen, um Debug-Modus eingeschaltet lassen, 225 00:11:34,260 --> 00:11:37,320 weil die Menschen tatsächlich verwenden Sie diese Konsole, die ich 226 00:11:37,320 --> 00:11:39,150 Ihnen gezeigt, beliebigen Code auszuführen. 227 00:11:39,150 --> 00:11:42,120 >> So dass sie sich wie jeder drucken Geheimcodes Sie dort haben, 228 00:11:42,120 --> 00:11:44,755 sie genau aussehen kann wie Ihre Website funktioniert. 229 00:11:44,755 --> 00:11:46,630 So ist es wirklich nützlich, zur Prüfung, aber immer 230 00:11:46,630 --> 00:11:50,090 stellen Sie sicher, es zu nehmen, bevor Sie etwas online zu publizieren. 231 00:11:50,090 --> 00:11:56,640 >> Also, wenn Sie mit etwas, bist wie PHP, gibt es diese Idee 232 00:11:56,640 --> 00:11:58,920 dass Sie weitergeben können Informationen zwischen Web-Seiten 233 00:11:58,920 --> 00:12:03,620 indem sie die Informationen tatsächlich in der URL, die eine GET-Anforderung ist, 234 00:12:03,620 --> 00:12:07,490 aber in der Flasche, können Sie tatsächlich etwas tun, ein bisschen wie das, 235 00:12:07,490 --> 00:12:10,590 indem er einen Weg, der hat eine Variable als ein Teil davon. 236 00:12:10,590 --> 00:12:14,090 >> Also, wenn Sie, dies zu betrachten zB auf dem Bildschirm hier, 237 00:12:14,090 --> 00:12:19,930 wir haben einen Weg, der ist ('/ hallo /'), und so, wenn Sie besuchen 238 00:12:19,930 --> 00:12:23,790 / hallo / etwas, dass etwas wird sich tatsächlich gefüllt 239 00:12:23,790 --> 00:12:25,490 in den Namen variabel. 240 00:12:25,490 --> 00:12:27,850 Und beachten Sie, dass die Funktion das kommt mit dieser Strecke 241 00:12:27,850 --> 00:12:31,302 muss im Parameter nehmen zu nennen, so dass es tatsächlich 242 00:12:31,302 --> 00:12:32,510 in die Funktion übergeben bekommen. 243 00:12:32,510 --> 00:12:34,190 >> Und dann, wenn du bist innerhalb dieser Funktion, 244 00:12:34,190 --> 00:12:36,420 Sie können das, wie zu behandeln ein normales Python-Variable, 245 00:12:36,420 --> 00:12:39,650 und so ist, dann, wird es ausdrucken Hallo, und es 246 00:12:39,650 --> 00:12:42,000 wird im Namen mit ausfüllen einige String-Formatierung. 247 00:12:42,000 --> 00:12:48,060 >> So zum variablen Teile zu einer Routing hinzuzufügen, Sie den Winkel-Kennzeichnung zu verwenden. 248 00:12:48,060 --> 00:12:51,220 Und gegebenenfalls, die Sie verwenden können eine so genannte Konverter. 249 00:12:51,220 --> 00:12:56,840 Und so, wenn Sie diese setzen Annotation mit dem Doppelpunkt, 250 00:12:56,840 --> 00:13:00,015 Sie können angeben, dass es ein int oder ein Schwimmer oder Pfad, 251 00:13:00,015 --> 00:13:01,640 und es wird automatisch zu konvertieren, dass. 252 00:13:01,640 --> 00:13:05,130 Sie können auch die Konvertierung innerhalb des Python-Funktion, 253 00:13:05,130 --> 00:13:09,710 nur durch die Verwendung eines gegossenen, aber manchmal, wenn Sie sicherstellen, dass es sich um eine int möchten, 254 00:13:09,710 --> 00:13:12,080 können Sie in Aufmachungen Konvertierungsregel drin. 255 00:13:12,080 --> 00:13:15,930 >> Also lassen Sie uns nach oben ziehen ein Beispiel einiger variable Regeln. 256 00:13:15,930 --> 00:13:21,480 Also hier hat dies die gleiche grundlegende Struktur mit der von Flask Import 257 00:13:21,480 --> 00:13:25,030 Glaskolben, die app = Kolben (_NAME_) und dann ist es am Ende läuft. 258 00:13:25,030 --> 00:13:28,050 Wir haben diese zwei verschiedenen variable Strecken hier. 259 00:13:28,050 --> 00:13:29,900 Und die erste, ist die eine, die ich zeigte 260 00:13:29,900 --> 00:13:34,230 in der Folie, die das war es dauert nur in einem string name 261 00:13:34,230 --> 00:13:35,650 und es wird auszudrucken hallo, name. 262 00:13:35,650 --> 00:13:41,410 >> Und dann wird das zweite verwendet man die Umwandlung. 263 00:13:41,410 --> 00:13:44,690 So wird dies automatisch konvertieren in einen int, und doppelklicken Sie die int, 264 00:13:44,690 --> 00:13:46,150 und drucken Sie, dass aus. 265 00:13:46,150 --> 00:13:48,220 Und, wissen wir nicht, jede Art zu tun der Umwandlung in ihr 266 00:13:48,220 --> 00:13:49,594 weil Flask kümmert sich darum. 267 00:13:49,594 --> 00:13:53,181 Also lassen Sie uns dieses Rennen. 268 00:13:53,181 --> 00:13:54,930 Wenn Sie eine Flasche haben Anwendung läuft, 269 00:13:54,930 --> 00:13:58,440 Sie davon Strg-C kann an den Server mit stoppen. 270 00:13:58,440 --> 00:14:02,420 Und dann werde ich die Variablen ausgeführt werden. 271 00:14:02,420 --> 00:14:11,740 >> Lassen Sie uns also auf localhost / hallo / Ezra gehen und Hoffentlich wird diese hallo zu mir sagen. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> So dauerte es in meinem Namen in der Variablen Strecke, und es füllte es in hier. 274 00:14:20,310 --> 00:14:23,950 Also werde ich auch zeigen, eine schnelle Beispiel für die Verdoppelung. 275 00:14:23,950 --> 00:14:28,600 Also, wenn Sie / Doppel / 3 zu gehen, es wird aus 6 zu drucken. 276 00:14:28,600 --> 00:14:31,440 Also das kümmerte die Umwandlung für uns. 277 00:14:31,440 --> 00:14:34,190 >> So können Sie es auch tun, mit float, und etwas Besonderes, 278 00:14:34,190 --> 00:14:37,530 wenn Sie brauchen, um so etwas wie angeben ein Weg, die es akzeptieren, Schrägstriche können, 279 00:14:37,530 --> 00:14:39,155 aber das sollte in der Regel nicht ein Problem sein. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Bisher haben wir, noch gerade Rückkehr 282 00:14:43,820 --> 00:14:46,320 Zeichenfolgen, die nicht sehr interessant. 283 00:14:46,320 --> 00:14:48,730 >> Wir konnten tatsächlich zurückkehren literal HTML-String. 284 00:14:48,730 --> 00:14:54,322 So in dem Code können wir etwas einfügen wie die b-Tag setzen fett zu machen, 285 00:14:54,322 --> 00:14:56,030 aber die meisten der Zeit, die Sie nicht wirklich wollen, 286 00:14:56,030 --> 00:14:58,420 Schreiben von HTML-Code zu sein in Ihrer Python-Code. 287 00:14:58,420 --> 00:15:01,940 Es wird wirklich chaotisch, und es ist keine gute Zeit. 288 00:15:01,940 --> 00:15:06,430 >> Kolben ermöglicht es uns, trennen die HTML in was heißt das Template, 289 00:15:06,430 --> 00:15:09,467 und so, wenn Sie denken, im Hinblick auf die MVC-Modell 290 00:15:09,467 --> 00:15:11,550 dass Sie mit vertraut sind, hoffentlich, von der Arbeit 291 00:15:11,550 --> 00:15:15,520 mit CS50 Finanzen ein wenig, Sie über die Python-Dateien vorstellen können 292 00:15:15,520 --> 00:15:19,430 als mehr des Controllers, in denen sie sind mit dem, was die Interaktion 293 00:15:19,430 --> 00:15:20,970 Datenmodell Sie haben könnten. 294 00:15:20,970 --> 00:15:24,900 >> Und dann werden sie rief, Ansichten und Weitergabe von Informationen zu dieser Ansicht 295 00:15:24,900 --> 00:15:28,120 in der Informationen zu füllen in HTML, die es braucht. 296 00:15:28,120 --> 00:15:30,490 Und was wir diese Ansichten aufrufen Vorlagen sind in der Klasse. 297 00:15:30,490 --> 00:15:35,280 >> So Flask verwendet eine andere Python Modul, dass es automatisch 298 00:15:35,280 --> 00:15:38,620 installieren, wenn Sie pip installieren Flask genannt Jinja, die 299 00:15:38,620 --> 00:15:40,885 können Sie diese hinzufügen Anmerkungen zu der HTML- 300 00:15:40,885 --> 00:15:45,140 dass Sie auf dem Bildschirm sehen, dass können Sie setzen in Sachen wie conditionals, 301 00:15:45,140 --> 00:15:47,230 und Schleifen in den HTML. 302 00:15:47,230 --> 00:15:51,140 >> So sieht es ein bisschen wie, wie Sie vielleicht PHP innerhalb einer HTML-Datei zu verwenden, 303 00:15:51,140 --> 00:15:57,380 aber dies ist nur, wenn der Kolben Server serviert die HTML-Datei, 304 00:15:57,380 --> 00:16:01,610 es wird dieses Template-Engine laufen und parsen durch diese und füllen Sie die Dinge in. 305 00:16:01,610 --> 00:16:06,650 So Flask hat eine render_template Funktion dass Sie am unteren Rand sehen Sie hier. 306 00:16:06,650 --> 00:16:14,300 Und so, wenn Sie diese Seite besuchen, ist es würde diese hello.html Vorlage zu machen, 307 00:16:14,300 --> 00:16:16,407 und dann in dieser HTML-Seite zu füllen. 308 00:16:16,407 --> 00:16:18,990 Also lassen Sie uns dieses echte laufen gerade schnell, und sehen, wie es aussieht, 309 00:16:18,990 --> 00:16:21,198 und dann werde ich durch ein zu gehen wenig näher. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 So werden Ihre Vorlagen gehen in einer Templates-Ordner zu gehen. 312 00:16:30,260 --> 00:16:33,980 Es wird automatisch in der Suche Templates-Ordner für die Vorlage. 313 00:16:33,980 --> 00:16:35,615 Also lassen Sie öffnen dieses oben. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Also, ich werde das Templating Beispiel auszuführen. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Also, wenn ich gehe zu / hallo / Ezra, es diese schreckliche hat, 318 00:17:03,660 --> 00:17:05,930 widerlich marquee-Tag, die ich in. 319 00:17:05,930 --> 00:17:08,050 Sehr schön, sehr dynamisch. 320 00:17:08,050 --> 00:17:09,349 Ich bin ein großer Fan. 321 00:17:09,349 --> 00:17:13,900 Aber was passiert, wenn Ich habe gerade auf, / hallo gehen? 322 00:17:13,900 --> 00:17:15,220 So sagt es gerade Hallo Welt. 323 00:17:15,220 --> 00:17:17,678 Ich habe nicht geben sie einen Namen, und sie füllte es in automatisch. 324 00:17:17,678 --> 00:17:22,050 Also mal sehen, wie es tat, und wie können wir loswerden, dass Festzelt bekommen vielleicht. 325 00:17:22,050 --> 00:17:26,240 >> So, hier ist diese Art von ein interessantes Beispiel, 326 00:17:26,240 --> 00:17:29,101 Wenn Sie mit, wie Schalter vertraut sind Anweisungen arbeiten in einer Sprache. 327 00:17:29,101 --> 00:17:31,350 Sagen, das ist ein bisschen wie, diese Art von einem Sturz über, 328 00:17:31,350 --> 00:17:34,266 wo man tatsächlich angebracht zwei verschiedene Wege auf die gleiche Funktion. 329 00:17:34,266 --> 00:17:41,190 So dass wir den / hallo Route legen und das / hallo / name Weg zu Hallo, 330 00:17:41,190 --> 00:17:45,130 und wir geben using-- Python können Sie angeben Standardfunktion arguments-- 331 00:17:45,130 --> 00:17:48,300 so, wenn es keinen Namen, so wenn wir gehen, um gerade / hallo, 332 00:17:48,300 --> 00:17:50,680 wird es automatisch zu filtern zu nennen ist gleich Keine. 333 00:17:50,680 --> 00:17:55,010 >> Also, wir machen den Vorlage mit name = name, 334 00:17:55,010 --> 00:17:59,510 so wird es in dem Namen Parameter übergeben gleich diesem Namen Funktionsparameter, 335 00:17:59,510 --> 00:18:00,730 in die Vorlage. 336 00:18:00,730 --> 00:18:04,040 Das immer noch nicht erklären, wie es der Entscheidung, ob Hallo Welt zu drucken, 337 00:18:04,040 --> 00:18:05,100 oder drucken Sie meinen Namen. 338 00:18:05,100 --> 00:18:08,050 Lassen Sie uns also tatsächlich aussehen in die Vorlage selbst, 339 00:18:08,050 --> 00:18:11,610 und sehen, wo das herkommt. 340 00:18:11,610 --> 00:18:18,680 >> So, in dieser Vorlage, die wir tatsächlich etwas bedingter Logik, 341 00:18:18,680 --> 00:18:20,580 was einige Leute würden argumentieren, die Sie tatsächlich 342 00:18:20,580 --> 00:18:23,730 sollte nicht viel von bedingtem Logik innerhalb Ihrer Vorlage selbst. 343 00:18:23,730 --> 00:18:26,310 Es sollte mehr innerhalb der sein Controller, aber für dieses Beispiel 344 00:18:26,310 --> 00:18:27,476 es ist etwas, ziemlich klein. 345 00:18:27,476 --> 00:18:31,060 Also hier, überprüfen wir, ob der Name, so dass Wenn der Name nicht gleich None, 346 00:18:31,060 --> 00:18:33,130 ob ein Name tatsächlich bestanden in, dann werden wir 347 00:18:33,130 --> 00:18:36,210 sagen, Hallo, Namen mit dem Header und das Festzelt, 348 00:18:36,210 --> 00:18:41,490 all das normale HTML, andernfalls uns ausdrucken Hallo, Welt ganz normal. 349 00:18:41,490 --> 00:18:45,820 So ein paar Dinge hier zu bemerken, darüber, wie Sie das Template zu formatieren, 350 00:18:45,820 --> 00:18:49,110 ist, dass alle diese bedingte Anweisungen, 351 00:18:49,110 --> 00:18:54,475 ein bisschen wie, wie wir es, wenn PHP Sie einige PHP einfügen möchten, 352 00:18:54,475 --> 00:18:58,380 können Sie die weniger-als verwenden Frage Marke, Art analog ist es hier 353 00:18:58,380 --> 00:19:00,140 mit dem {%. 354 00:19:00,140 --> 00:19:02,130 >> So, hier haben wir unsere bedingten Code. 355 00:19:02,130 --> 00:19:05,920 Und dann, wenn Sie wirklich wollen, buchstäblich etwas bewerten, und drucken 356 00:19:05,920 --> 00:19:08,710 it out auf den Bildschirm, die Sie verwenden Sie die Doppelstreben. 357 00:19:08,710 --> 00:19:12,310 Also hier sind die Doppelstreben, und geben wir Namen, 358 00:19:12,310 --> 00:19:15,500 so daß man innerhalb dieser wird sie zu bewerten an den Variablennamen, die 359 00:19:15,500 --> 00:19:18,860 wurde von der übergebene rendern Template-Funktion, 360 00:19:18,860 --> 00:19:21,484 anstatt nur Druck aus, wenn wir wurden von ihnen zu befreien, 361 00:19:21,484 --> 00:19:23,150 es ist nur zu drucken würde das Wort "Name". 362 00:19:23,150 --> 00:19:26,340 Also, das ist etwas aufpassen. 363 00:19:26,340 --> 00:19:29,792 >> So eine andere Sache, Hinweis ist, dass, wenn wir 364 00:19:29,792 --> 00:19:31,500 möchte die Verwendung render_template Funktion, 365 00:19:31,500 --> 00:19:34,490 Wir haben tatsächlich zu importieren es ausdrücklich von Flask. 366 00:19:34,490 --> 00:19:36,915 Und dies ist ein Beispiel für die Modularität der Glaskolben, 367 00:19:36,915 --> 00:19:39,290 dass Sie nicht haben, um zu importieren Dinge, die Sie nicht benötigen. 368 00:19:39,290 --> 00:19:41,290 Sie können bringen Sie nur in der Funktionen, die Sie tatsächlich 369 00:19:41,290 --> 00:19:43,450 tun müssen, was manchmal schön, so dass Sie nicht tun, 370 00:19:43,450 --> 00:19:46,560 müssen alle diese Funktionen haben herumzusitzen, dass Sie sie nicht verwenden, 371 00:19:46,560 --> 00:19:49,730 sondern auch, wenn Sie vergessen, dass Sie importieren müssen render_template, 372 00:19:49,730 --> 00:19:52,660 Sie werden wahrscheinlich eine Warnung dass wird Sie darüber wissen. 373 00:19:52,660 --> 00:19:56,700 Ja, ist das Templat. 374 00:19:56,700 --> 00:20:01,680 >> Also haben wir gezeigt haben, wie man machen einfache Web-Seiten, 375 00:20:01,680 --> 00:20:04,947 und fügen Sie ein wenig mehr Logik, um es, im Hinblick auf die variable Routing. 376 00:20:04,947 --> 00:20:08,280 Damit können Sie verschiedene Dinge auf der Basis zu tun welche URL Sie zu gehen, und auch dann, geben 377 00:20:08,280 --> 00:20:11,950 die HTML ein bisschen mehr Sinn, Hinblick darauf, wie Sie die Dinge zu machen möchten. 378 00:20:11,950 --> 00:20:14,210 Sie müssen nicht alle setzen Ihre HTML in Ihren Python, 379 00:20:14,210 --> 00:20:16,640 aber für so ziemlich jede Web-Anwendung, 380 00:20:16,640 --> 00:20:21,480 Sie gehen zu wollen, sind eine Art Datenmodell zugeordnet. 381 00:20:21,480 --> 00:20:25,560 >> Und so traditionell, würde dies so etwas wie einer SQL-Datenbank. 382 00:20:25,560 --> 00:20:30,280 Und Sie nur in Wechselwirkung treten können direkt mit SQL. 383 00:20:30,280 --> 00:20:32,190 Python hat, ich glaube, es heißt. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Sie können einfach SQLite 3 importieren und SQL-Abfragen direkt ausführen, 386 00:20:38,454 --> 00:20:40,870 aber ich weiß nicht wie es euch geht, aber ich wirklich nicht, wie, gerade, 387 00:20:40,870 --> 00:20:42,750 Schreiben Sie SQL-Abfragen. 388 00:20:42,750 --> 00:20:45,350 Es neigt dazu, wirklich lang und kompliziert. 389 00:20:45,350 --> 00:20:49,180 >> Und so etwas, das Ich mag zu verwenden ist, was ist 390 00:20:49,180 --> 00:20:53,610 als ORM, die eine ist bekannt objekt-relationales Mapping. 391 00:20:53,610 --> 00:20:56,890 Und der Punkt, der eine objekt-relationales Mapping, 392 00:20:56,890 --> 00:21:00,100 ist, dass es zwei verschiedene Möglichkeiten, wie Sie über Datenbanken zu denken. 393 00:21:00,100 --> 00:21:03,240 >> So das Beispiel, das Professor Malan Regel 394 00:21:03,240 --> 00:21:07,660 verwendet in der Klasse, ist die Excel-Tabelle, in der Sie müssen diese Zeilen und diese Spalten, 395 00:21:07,660 --> 00:21:10,210 und das ist wirklich nützlich, wie es in SQL vertreten 396 00:21:10,210 --> 00:21:13,170 und wie Sie mit ihr zu interagieren, aber eine weitere Möglichkeit, dass es tatsächlich 397 00:21:13,170 --> 00:21:16,390 sinnvoll, darüber zu denken manchmal, ist in Bezug auf die Klassen und Objekte. 398 00:21:16,390 --> 00:21:20,420 >> Also anstatt zu denken, jeder Tabelle als mit 399 00:21:20,420 --> 00:21:23,040 diese Reihe, die bestimmte hat Informationen, können Sie tatsächlich 400 00:21:23,040 --> 00:21:26,100 betrachten Sie es als Jede Tabelle ist eine Klasse, 401 00:21:26,100 --> 00:21:29,810 und dann jede Instanz der Klasse hat bestimmte Eigenschaften. 402 00:21:29,810 --> 00:21:35,110 So, in diesem Beispiel sind die Instanzen die Klasse sind die Zeilen in der Tabelle, 403 00:21:35,110 --> 00:21:37,490 und dann jede Eigenschaft würde sein, eine Spalte in der Tabelle. 404 00:21:37,490 --> 00:21:40,840 >> Also, die ORM, die Ich mag zu bedienen heißt peewee. 405 00:21:40,840 --> 00:21:43,520 Es ist wirklich klein, ein bisschen wie Flachmann. 406 00:21:43,520 --> 00:21:46,760 Ich denke, dass sie gut zusammen, aber es gibt viele andere ORMs 407 00:21:46,760 --> 00:21:47,730 die Sie verwenden können. 408 00:21:47,730 --> 00:21:52,180 Ein beliebter ist man wie SQLAlchemy bekannt, 409 00:21:52,180 --> 00:21:56,050 und ich kann mich nicht erinnern, warum ich ursprünglich wählte peewee über SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 sonst würde ich Sie, warum ich sagen, denke, es ist das beste, 411 00:21:58,311 --> 00:22:01,060 aber wir sind gerade dabei, dies zu nutzen eine, weil ich weiß, wie man es benutzt. 412 00:22:01,060 --> 00:22:04,760 >> Also, das ist eine Frage, warum Sie sollten mit einem ORM die Mühe, 413 00:22:04,760 --> 00:22:07,552 anstatt nur direkt Schreiben von SQL-Abfragen? 414 00:22:07,552 --> 00:22:09,760 Und ich denke, das beste Fall ist, dass Sie nicht wirklich zu tun 415 00:22:09,760 --> 00:22:11,356 haben um SQL-Abfragen zu schreiben. 416 00:22:11,356 --> 00:22:14,480 Es ist viel einfacher, als werde ich Ihnen zeigen, um Dinge tun, wie Auswahl, Insertion, 417 00:22:14,480 --> 00:22:16,157 Löschen, insbesondere die Erstellung von Tabellen. 418 00:22:16,157 --> 00:22:17,990 Es ist viel einfacher, einen Klassenstruktur, 419 00:22:17,990 --> 00:22:22,250 als es zu strukturieren a erstellen TABLE-Anweisung, aber eine Sache, 420 00:22:22,250 --> 00:22:25,710 bewusst zu sein, ist, dass die ORM wird sein Bestes versuchen, 421 00:22:25,710 --> 00:22:28,640 um herauszufinden, was die effiziente SQL-Abfrage wäre, 422 00:22:28,640 --> 00:22:30,110 aber manchmal wird es falsch. 423 00:22:30,110 --> 00:22:32,660 >> Und vor allem, wenn Sie Arbeiten mit einer großen Datenbank, 424 00:22:32,660 --> 00:22:35,557 Sie, dass eine Abfrage feststellen können das sollte schnell laufen, 425 00:22:35,557 --> 00:22:36,640 ist eigentlich mehr dabei. 426 00:22:36,640 --> 00:22:40,164 Und wenn man sich, wie Blick unter die Motorhaube die ORM ist die Interpretation, dass in SQL, 427 00:22:40,164 --> 00:22:42,080 Es könnte sein, etwas zu tun, wirklich lächerlich, 428 00:22:42,080 --> 00:22:44,371 nur weil es eine Art deutete Ihre Absichten falsch. 429 00:22:44,371 --> 00:22:48,080 Und, es gab Zeiten, in denen Ich musste es außer Kraft zu setzen und einfach 430 00:22:48,080 --> 00:22:52,429 auszuführen meine eigene SQL-Abfragen, nur denn es war auf seltsame Weise Parsen. 431 00:22:52,429 --> 00:22:54,220 So gibt es einige Overhead, nur in der Weise, 432 00:22:54,220 --> 00:22:58,680 , dass es kompiliert Ihre Erklärungen nach unten in SQL. 433 00:22:58,680 --> 00:23:06,200 >> Also, lasst uns sehen super schnell an Ein einfaches Beispiel für ein Datenmodell 434 00:23:06,200 --> 00:23:07,350 dass Sie vielleicht zu verwenden. 435 00:23:07,350 --> 00:23:11,880 Also, das ist Python-Code, so dass die erste, was Sie tun möchten, ist von 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Also, im Gegensatz zu Glaskolben, in dem Sie Alle diese einzelnen Module, 438 00:23:15,850 --> 00:23:18,125 und Sie importieren Flask möchten, und Brief-Vorlage, und einige andere 439 00:23:18,125 --> 00:23:20,690 dass wir später sehen werden, von peewee, Sie können einfach alles importieren, 440 00:23:20,690 --> 00:23:22,290 denn es ist eine ziemlich kleine Bibliothek. 441 00:23:22,290 --> 00:23:26,490 >> Also, das erste, was Sie tun möchten, ist, tatsächlich schaffen dieses Datenbankobjekt. 442 00:23:26,490 --> 00:23:31,212 Also, Sie haben db = SQLiteDatabase, und dann den Namen Ihrer Datenbank. 443 00:23:31,212 --> 00:23:33,170 Und dies tatsächlich erstellen Sie eine Datenbankobjekt 444 00:23:33,170 --> 00:23:36,230 dass Sie interagieren, mit peewee. 445 00:23:36,230 --> 00:23:40,570 >> Und dann haben wir die tatsächlichen Modell, das wir schaffen wollen. 446 00:23:40,570 --> 00:23:42,470 So dass die Tabelle wollen wir erstellen. 447 00:23:42,470 --> 00:23:47,270 Also, im peewee, hat jede Klasse eine eigene Tabelle in Ihrer Datenbank. 448 00:23:47,270 --> 00:23:52,800 So sind alle Klassen erben von der Basis-Modell, 449 00:23:52,800 --> 00:23:55,960 und die Hauptstadt M-Modell ist etwas, was in peewee definiert ist. 450 00:23:55,960 --> 00:24:02,162 >> Also, alle Ihre Modelle sollten erben als höchsten Oberklasse, 451 00:24:02,162 --> 00:24:04,620 sie sollten aus dem erben Modell, aber was ist wirklich cool, 452 00:24:04,620 --> 00:24:07,610 ist, dass Sie tatsächlich Ihre Modelle erben voneinander. 453 00:24:07,610 --> 00:24:10,530 Und ein großer Teil der Zeit, Ihrem Datenmodelle nicht unbedingt 454 00:24:10,530 --> 00:24:13,754 machen eine schöne Vererbungshierarchie, aber Zeiten, in denen sie es tun, es ist wirklich schön, 455 00:24:13,754 --> 00:24:15,920 weil Sie das Modell haben, inhärente voneinander. 456 00:24:15,920 --> 00:24:19,710 >> So legten wir diese Klasse "Student", die ein Modell erbt, 457 00:24:19,710 --> 00:24:21,170 und es hat drei Eigenschaften. 458 00:24:21,170 --> 00:24:24,080 Es hat eine ID, das ist, a primaryKeyField, die 459 00:24:24,080 --> 00:24:26,920 ist etwas, das vorgesehen ist von peewee, ist der Name ein CharField, 460 00:24:26,920 --> 00:24:28,490 und eine Einstufung ist eine Integer. 461 00:24:28,490 --> 00:24:32,260 So kann dies sind oder nicht wie CS50 tatsächlich speichert alle 462 00:24:32,260 --> 00:24:33,650 der Schüler Noten. 463 00:24:33,650 --> 00:24:36,060 Es ist nicht, aber das ist, wie ich es tun würde. 464 00:24:36,060 --> 00:24:37,920 >> Und dann muss es innerhalb diese Klasse, und dies 465 00:24:37,920 --> 00:24:41,620 ist etwas, was Sie tun können, mit Python, können Sie verschachtelte Klassen haben. 466 00:24:41,620 --> 00:24:43,920 Und das ist etwas, das ist durch peewee erforderlich. 467 00:24:43,920 --> 00:24:47,250 Also, diese Klasse Meta, müssen Sie um anzugeben, dass die Datenbank 468 00:24:47,250 --> 00:24:49,830 gleich dem Objekt dass wir oben erstellt. 469 00:24:49,830 --> 00:24:54,339 Und das sagt, was Datei ist diese Tabelle eigentlich los, um in enthalten sein. 470 00:24:54,339 --> 00:24:57,130 So ist dies etwas, das Sie haben innerhalb alle Ihre Modelle zu tun. 471 00:24:57,130 --> 00:24:59,380 Sie müssen nur angeben, innerhalb dieser Meta-Klasse 472 00:24:59,380 --> 00:25:01,400 diese Datenbank ist gleich db. 473 00:25:01,400 --> 00:25:03,940 Also, was ich normalerweise tue, wenn ich eine Reihe von verschiedenen Modellen, 474 00:25:03,940 --> 00:25:05,910 ist, dass ich eine Basis Modell, dass ich in der Regel 475 00:25:05,910 --> 00:25:08,839 rufen Sie einfach "Basismodell" Das hat den Meta-Klasse, 476 00:25:08,839 --> 00:25:10,380 und es setzt die Datenbank gleich db. 477 00:25:10,380 --> 00:25:13,710 Und dann alle meine späteren Modellen wird von dieser Basisklasse erben. 478 00:25:13,710 --> 00:25:16,760 Und dann habe ich keine Sorgen zu machen über die Einstellung der Meta-Klasse. 479 00:25:16,760 --> 00:25:21,490 >> So, wenn dieses tatsächlich bekommt nach unten in einer SQL-Anweisung kompiliert wird, 480 00:25:21,490 --> 00:25:24,875 es sieht aus wie diese böse Sache nach unten Hier, "CREATE TABLE student ID integer, 481 00:25:24,875 --> 00:25:26,020 " was auch immer. 482 00:25:26,020 --> 00:25:30,002 >> Und, ich denke, dass es kürzer ist, Diese SQL-Abfrage genau hier, 483 00:25:30,002 --> 00:25:32,960 aber, wenn Sie an dieser Klasse hier können Sie genau sehen, was los ist. 484 00:25:32,960 --> 00:25:36,116 Sie können, welche Art von Feldern zu sehen es gibt, was sie genannt werden, 485 00:25:36,116 --> 00:25:38,115 und so denke ich, dass sehen sich gerade dieses Python-Code 486 00:25:38,115 --> 00:25:43,340 ist viel besser lesbar als versuchen, diese SQL-Abfrage schreiben. 487 00:25:43,340 --> 00:25:45,990 >> So, um tatsächlich verwenden Sie die Datenbank, 488 00:25:45,990 --> 00:25:48,470 wir müssen es innerhalb Python zu verbinden. 489 00:25:48,470 --> 00:25:52,770 Also, ich schreibe in der Regel eine Funktion namens initialize_db, die zwei Dinge tut. 490 00:25:52,770 --> 00:25:54,880 Es dauert in der Datenbank Objekt db und es 491 00:25:54,880 --> 00:25:58,360 verbindet, um es zu, das gerade geöffnet up Abschnitt in die Datenbank. 492 00:25:58,360 --> 00:26:00,860 Wenn Sie nur wenn läufst Webseite auf Ihrem lokalen Rechner, 493 00:26:00,860 --> 00:26:04,320 es ist nicht ein super große Sache zu sorgen zu Verbinden und Trennen, 494 00:26:04,320 --> 00:26:06,885 aber wenn Sie mit es auf einer Website, die Sie 495 00:26:06,885 --> 00:26:10,010 wollen sicherstellen, dass, wenn ein Benutzer verbindet, um sie, wenn sie glattstellen 496 00:26:10,010 --> 00:26:12,270 die Website, sie zu trennen, so dass Sie nicht eine Gruppe von Leuten angeschlossen haben 497 00:26:12,270 --> 00:26:14,480 zu Ihrer Datenbank alle auf einmal. 498 00:26:14,480 --> 00:26:16,370 >> Und dann, wenn Sie Verbindung zur Datenbank, 499 00:26:16,370 --> 00:26:20,832 Sie anrufen db.create_tables möchten, und die Liste der Modelle, was Sie wollen 500 00:26:20,832 --> 00:26:21,540 um Tabellen zu erstellen. 501 00:26:21,540 --> 00:26:23,950 So, hier, ich will nur erstellen Sie es für diese Schüler. 502 00:26:23,950 --> 00:26:28,070 Und dann, was wichtig ist, ist es, geben sicheren = True meisten Zeit. 503 00:26:28,070 --> 00:26:30,380 Also, was diese Aussage tun werden, ist, dass es 504 00:26:30,380 --> 00:26:33,580 Tabellen für die Studentenmodell, aber nur 505 00:26:33,580 --> 00:26:36,109 wenn dieser Tabelle hat nicht wurde bereits erstellt. 506 00:26:36,109 --> 00:26:37,400 Das ist, was die sichere angibt. 507 00:26:37,400 --> 00:26:39,150 So wird es nicht überschrieben werden Ihre vorhandenen Tisch, 508 00:26:39,150 --> 00:26:41,525 es wird nur erstellen Sie eine neue Tabelle, falls es nicht dort. 509 00:26:41,525 --> 00:26:45,090 Also, die Sie gerade erstellen könnte die Tabellen einmal mit SQL. 510 00:26:45,090 --> 00:26:49,410 Und dann müssen Sie diese Datenbank Sitz dort, und dann eine Verbindung zu jeder Zeit, 511 00:26:49,410 --> 00:26:52,450 aber es ist in der Regel schön, nur um legte in diesem create_tables Anruf, 512 00:26:52,450 --> 00:26:55,550 so dass, wenn Sie jemals löschen Sie Ihre Datenbank, wenn Sie Ihre Web laufen 513 00:26:55,550 --> 00:26:57,960 App noch einmal, wird es es neu zu erstellen. 514 00:26:57,960 --> 00:27:00,730 >> Also, stellen Sie sicher, dass ein gefahrloser angegeben ist wahr zu sein, 515 00:27:00,730 --> 00:27:03,580 oder Sie werden Ihre Daten nur finden, am Anfang jedes Mal verprügelt. 516 00:27:03,580 --> 00:27:06,380 Und dann können Sie einfach anrufen initialize_db um festzustellen, 517 00:27:06,380 --> 00:27:09,820 eine Verbindung, und erstellen Tabellen, wenn nötig. 518 00:27:09,820 --> 00:27:13,150 >> Also, die häufigste, was dass Sie wollen, um zu tun, 519 00:27:13,150 --> 00:27:15,920 oder eine der häufigsten Dinge, ist, um tatsächlich die Dinge einfügen 520 00:27:15,920 --> 00:27:17,170 in Ihre Datenbank. 521 00:27:17,170 --> 00:27:19,430 Usw., anstatt um eine INSERT INTO schreiben 522 00:27:19,430 --> 00:27:21,990 Rechnung mit allen die Werte festgelegt, 523 00:27:21,990 --> 00:27:24,650 Sie eigentlich anrufen Funktion auf dem Studentenklasse. 524 00:27:24,650 --> 00:27:28,200 Also, wenn Sie eine Klasse erstellen dass erbt von Modell, 525 00:27:28,200 --> 00:27:30,200 es hat diese Methode zu erstellen. 526 00:27:30,200 --> 00:27:33,870 >> Also, Klasse name.create tun Sie, und legen Sie die Parameter angeben, 527 00:27:33,870 --> 00:27:35,260 dass Sie möchten, dass in übergeben. 528 00:27:35,260 --> 00:27:39,200 Also, wenn ich einige Studenten hinzufügen unsere CS50 Klasse Buch beispielsweise 529 00:27:39,200 --> 00:27:41,820 Ich werde in David gebracht, der einen sehr gute Note, hat er eine 95. 530 00:27:41,820 --> 00:27:45,100 Und ich, die nicht zu tun ist so gut in CS50, ich habe eine 50. 531 00:27:45,100 --> 00:27:47,600 Und so, das Schöne an was das erstellen Funktion tut, 532 00:27:47,600 --> 00:27:53,040 ist, dass es gibt eine Instanz oder Reihe, dass es in der Tabelle erstellt, 533 00:27:53,040 --> 00:27:55,750 und so dann Sie speichern, dass in einem Variable, und die Arbeit mit ihm später. 534 00:27:55,750 --> 00:27:58,830 Sie können rund um Veränderung, die Ich werde ein Beispiel zu zeigen. 535 00:27:58,830 --> 00:28:03,050 >> Beachten Sie, dass ich nicht müssen die ID angeben, 536 00:28:03,050 --> 00:28:09,340 denn da es das PrimaryKeyField, wird es automatisch 537 00:28:09,340 --> 00:28:10,930 erhöht sich, wenn Sie es nicht angeben. 538 00:28:10,930 --> 00:28:12,250 Und in der Tat, werden Sie wahrscheinlich sollte es nicht angeben, 539 00:28:12,250 --> 00:28:14,810 weil Sie vielleicht versehentlich clobber ist jemand anderes ID. 540 00:28:14,810 --> 00:28:16,830 Und Sie machen wollen sicher, dass es einzigartig. 541 00:28:16,830 --> 00:28:20,662 >> Also, eigentlich, die gemeinsame Sache, die Sie tun möchten, 542 00:28:20,662 --> 00:28:22,620 Wahrscheinlich wählen Sie aus der Datenbank, wenn Sie 543 00:28:22,620 --> 00:28:24,078 haben eine Menge Informationen drin. 544 00:28:24,078 --> 00:28:27,360 Und so, wenn Sie alles erhalten möchten, so das Äquivalent der Auswahl star 545 00:28:27,360 --> 00:28:30,940 von Studenten Aussage, es würde nur student.select sein. 546 00:28:30,940 --> 00:28:34,380 Und das wird Ihnen wieder ein Array mit all den Schüler Objekte darin 547 00:28:34,380 --> 00:28:35,770 dass Sie überlaufen Sie wollen. 548 00:28:35,770 --> 00:28:37,019 Sie können die Dinge aus ihm heraus. 549 00:28:37,019 --> 00:28:39,310 Und die meisten der Zeit, die Sie wollen nicht nur wählen, um zu tun, 550 00:28:39,310 --> 00:28:40,935 Sie wirklich wollen, etwas zu geben. 551 00:28:40,935 --> 00:28:44,580 Und so können Sie Kette Zusammen stellen diese Funktionsaufrufe, 552 00:28:44,580 --> 00:28:48,830 wie, wie man es Kette zusammen die Aussagen in SQL. 553 00:28:48,830 --> 00:28:53,002 So dass Sie student.select tun können ()., Wo in diesem Beispiel. 554 00:28:53,002 --> 00:28:54,710 Und dann können Sie geben Sie die Bedingungen, 555 00:28:54,710 --> 00:28:57,880 nur mit normalen Python Boolesche Werte, die Dinge zu überprüfen. 556 00:28:57,880 --> 00:29:02,110 >> Also, in diesem Fall zu wollen begrenzen, was Sie zur Auswahl stehen, 557 00:29:02,110 --> 00:29:06,790 wobei student.grade gleich 50 ist, und student.name gleich Ezra, 558 00:29:06,790 --> 00:29:09,130 damit wird nur erhalten Sie mich aus ihm heraus. 559 00:29:09,130 --> 00:29:11,340 Und beachten Sie, wirklich subtile Sache hier ist, 560 00:29:11,340 --> 00:29:15,570 , dass, wenn Sie angeben möchten ein und / oder eine oder und / oder, 561 00:29:15,570 --> 00:29:19,840 in Python, würden Sie normalerweise verwenden, Ich denke, das Wort "und" tatsächlich, 562 00:29:19,840 --> 00:29:23,351 aber hier die einzelnen Und-Zeichen zu verwenden, Das ist normalerweise ein Bit-Operatoren, 563 00:29:23,351 --> 00:29:25,600 aber in diesem speziellen Fall, gerade die Weise, peewee tut es, 564 00:29:25,600 --> 00:29:27,660 Sie die Einzelnutzung Und-Zeichen angeben, "und." 565 00:29:27,660 --> 00:29:29,451 Das ist etwas, Ich bekomme eine Menge gemischt, 566 00:29:29,451 --> 00:29:32,530 aber es erscheint nicht, daß in der Praxis viel. 567 00:29:32,530 --> 00:29:36,350 >> Und dann, wenn Sie alle haben die Studenten aus der Datenbank, 568 00:29:36,350 --> 00:29:39,420 Sobald Sie getan haben, sind Sie wählen und Ihr Verschleiß oder was auch immer, 569 00:29:39,420 --> 00:29:42,334 können Sie eine foreach-Schleife zu verwenden, wie normale in Python, 570 00:29:42,334 --> 00:29:44,500 mit jeder Art von Iterator oder mit jeder Art von Array. 571 00:29:44,500 --> 00:29:46,333 So was Sie tun können, für s in student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), und so wird dies Iteration über jeden Schüler in der Tabelle 573 00:29:52,930 --> 00:29:56,260 deren Grad weniger als 75, die in diesem Fall ist immer noch nur ich. 574 00:29:56,260 --> 00:29:59,218 Und dann könnten Sie so etwas tun, innerhalb von dass Schleife, wie senden Sie mir eine E-Mail- 575 00:29:59,218 --> 00:30:01,680 und sagen Sie mir, tatsächlich biegen Sie in meinem Problem Sets. 576 00:30:01,680 --> 00:30:04,550 >> Also, eine weitere Sache, die Sie zu tun, ist es wirklich einfach 577 00:30:04,550 --> 00:30:06,460 zu aktualisieren Zeilen innerhalb der Tabelle. 578 00:30:06,460 --> 00:30:08,720 Also, denken Sie daran wieder hier, Ihren, wenn ich eingelegt, 579 00:30:08,720 --> 00:30:11,440 Ich nahm den Wert, der war von student.create zurückgegeben, 580 00:30:11,440 --> 00:30:14,920 und ich zugeordnet es um Namen genannt Ezra. 581 00:30:14,920 --> 00:30:18,995 Und jetzt können Sie das ändern Werte innerhalb dieser Instanz, 582 00:30:18,995 --> 00:30:20,870 wie würden Sie ein normale Klasse in Python. 583 00:30:20,870 --> 00:30:25,060 >> So können Sie einstellen, ezra.grade = 95 und das wird die lokale Kopie zu aktualisieren, 584 00:30:25,060 --> 00:30:28,380 aber wenn Sie wirklich wollen, übertragen diese Änderungen zur Datenbank, 585 00:30:28,380 --> 00:30:31,410 müssen Sie ezra.save nennen, so dass Sie die .save Methode namens 586 00:30:31,410 --> 00:30:32,650 für die Instanz. 587 00:30:32,650 --> 00:30:38,085 >> Und jetzt habe ich erfolgreich geändert meine eigene Klasse innerhalb der Datenbank. 588 00:30:38,085 --> 00:30:41,210 Ja, dann lassen Sie uns sagen, dass ich erwischt Änderung meiner Klasse in der Datenbank. 589 00:30:41,210 --> 00:30:44,126 Professor Malan ist wahrscheinlich zu wollen, um mich aus der Klasse zu löschen, 590 00:30:44,126 --> 00:30:48,630 und so können Sie die .Delete nennen Instanz-Methode nur auf das Ding. 591 00:30:48,630 --> 00:30:51,674 >> Also, wenn Sie wollte gehen wieder in dieser Schleife hier, 592 00:30:51,674 --> 00:30:53,465 und tatsächlich, statt von E-Mails alle 593 00:30:53,465 --> 00:30:56,577 der Studierenden, deren Grad kleiner als 75, um sie zu löschen wollte, dass du, 594 00:30:56,577 --> 00:30:58,660 innerhalb dieser Schleife konnte man rufen s.delete Instanz. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Und das letzte, was Sie tun möchten, ist, wenn Sie eine Verbindung herzustellen, 597 00:31:07,780 --> 00:31:10,350 und Sie sind mit Ihrer Arbeit zu tun, Sie anrufen db.close möchten, 598 00:31:10,350 --> 00:31:13,190 wo db ist, dass Datenbank Objekt, das wir vorher hatten. 599 00:31:13,190 --> 00:31:18,290 Und Sie sicherstellen, dass wollen alles wird aus der geschlossen wird. 600 00:31:18,290 --> 00:31:18,790 >> Cool. 601 00:31:18,790 --> 00:31:22,410 So, jetzt habe ich ein Beispiel-Anwendung. 602 00:31:22,410 --> 00:31:26,880 Ich habe eine Art vor, machte alles nur damit wird es keine Live-Codierung sein 603 00:31:26,880 --> 00:31:30,220 Fehler, aber wir können zu Fuß durch und sehen, wie Sie Kolben gegeben 604 00:31:30,220 --> 00:31:33,685 und zusammen peewee, und machen eine einfache Anwendung. 605 00:31:33,685 --> 00:31:38,680 Ich nenne es CS50 rant, und es ist Art von einem einfachen Blog-Plattform. 606 00:31:38,680 --> 00:31:41,150 >> Also, zuerst, werde ich es laufen und zeigen, wie es aussieht, 607 00:31:41,150 --> 00:31:42,890 und dann können wir mehr in den Code zu suchen. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Okay, lass uns einfach laufen diese. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, Ich werde dies zu machen ein wenig kleiner. 612 00:32:17,250 --> 00:32:20,000 Es ist nicht sehr schön, nur weil Ich habe nicht machen eine Menge CSS, 613 00:32:20,000 --> 00:32:23,255 aber was sie tut, ist, es hat diese Datenbank von Blog-Posts, 614 00:32:23,255 --> 00:32:25,630 und es durch alle geht sie, und es wird ihnen angezeigt werden 615 00:32:25,630 --> 00:32:28,170 auf der Seite, um der jüngsten. 616 00:32:28,170 --> 00:32:30,920 Und so sind nur einige Beiträge dass ich in der Datenbank gespeichert war. 617 00:32:30,920 --> 00:32:35,680 >> Also, wenn wir eine neue erstellen möchten Beitrag können wir zu gehen, um einen neuen Beitrag hinzufügen, 618 00:32:35,680 --> 00:32:42,720 und wir können den Titel der Enter- Post, so etwas wie, CS50-Seminar. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, wirklich genießen das Seminar. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Cool. 623 00:32:52,270 --> 00:32:56,060 Dann senden Sie drücken Sie, und es wird umleiten Sie zurück auf die Startseite, 624 00:32:56,060 --> 00:33:00,039 und dann Sie, denn Neuester Beitrag wurde zugegeben. 625 00:33:00,039 --> 00:33:01,580 Und wir haben noch alle dort. 626 00:33:01,580 --> 00:33:08,080 So, jetzt, das durch all den Schritt lassen Code und sehen, wie dies umgesetzt wird. 627 00:33:08,080 --> 00:33:11,995 >> Also, ich glaube, die erste Sache, dass uns gelassen einen Blick auf, ist eigentlich die Modelle. 628 00:33:11,995 --> 00:33:14,120 Ein großer Teil der Zeit, wenn Sie etwas entwerfen, 629 00:33:14,120 --> 00:33:17,036 Sie zuerst, wie denken möchten Sie gehen, um Ihre Daten zu vertreten, 630 00:33:17,036 --> 00:33:22,915 und dann entwerfen Dinge um, dass, so dass alles, was sinnvoll ist. 631 00:33:22,915 --> 00:33:25,290 Und das ist tatsächlich, wie ich es tat, als ich so dass diese, 632 00:33:25,290 --> 00:33:28,030 Ich setzte mich hin und dachte: was will ich in einem Beitrag. 633 00:33:28,030 --> 00:33:32,130 >> So, hier haben wir die gleiche Struktur dass ich früher zu erwähnen, 634 00:33:32,130 --> 00:33:33,755 in denen wir db = SQLDatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 In der Realität werden Sie wahrscheinlich nicht wollen, hart Code in Datenbanken deines Namens. 637 00:33:40,980 --> 00:33:43,730 Das sollte wohl ein Parameter sein das ist irgendwo gespeichert, vielleicht 638 00:33:43,730 --> 00:33:45,940 in einer Konfigurationsdatei, aber in ein kleines Beispiel, wie diese, 639 00:33:45,940 --> 00:33:48,310 es ist okay, Festcode, dass in. 640 00:33:48,310 --> 00:33:53,510 >> So, jetzt haben wir diesen Beitrag der Klasse, die erbt von der Basis-Modell. 641 00:33:53,510 --> 00:33:56,930 Und es hat wiederum die ID = primaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Eigentlich, wenn Sie nicht angeben, wenn ich tatsächlich bekam das beheben, 643 00:34:02,250 --> 00:34:07,152 dann peewee wir kümmern automatische Erstellung, dass ID-Feld, 644 00:34:07,152 --> 00:34:09,360 und es wird automatisch machen es zu einem Primärschlüssel, die 645 00:34:09,360 --> 00:34:12,485 Ich denke, dass ist wirklich nett, weil in der Regel, das ist etwas, die Sie haben wollen, 646 00:34:12,485 --> 00:34:16,239 aber Ich mag, um es in die speziell gesagt, nur damit ich erinnere mich, dass es dort. 647 00:34:16,239 --> 00:34:19,480 Aber wenn Sie nicht angeben, dass, das wird es automatisch. 648 00:34:19,480 --> 00:34:22,198 >> Also, ich habe einen Zeitpunkt, eine Datetime und alles 649 00:34:22,198 --> 00:34:24,864 diese verschiedenen Bereichen, wenn Sie Blick auf die peewee Dokumentation, 650 00:34:24,864 --> 00:34:28,920 Es wird eine Liste der verschiedenen geben Arten von Feldern, die Sie verwenden können. 651 00:34:28,920 --> 00:34:34,440 In den meisten Fällen, ist es analog zu dem, was Sie in SQL sehen würde. 652 00:34:34,440 --> 00:34:37,699 So gibt es eine CharField ein VarCharFields, Textfeldern, 653 00:34:37,699 --> 00:34:40,550 die für sehr lange Texte, wie ein Blog-Post 654 00:34:40,550 --> 00:34:44,460 potentiell, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 alle Dinge. 656 00:34:46,100 --> 00:34:51,570 >> Und Sie können in anderen Argumente übergeben um sie, die ich nicht angeben. 657 00:34:51,570 --> 00:34:55,719 Nehmen wir zum Beispiel, Sie wollte nicht ermöglichen zwei Beiträge zu den gleichen Titel haben, 658 00:34:55,719 --> 00:34:59,672 Sie angeben könnten so etwas wie einzigartige = True, 659 00:34:59,672 --> 00:35:02,880 und das ist nur ein zusätzlicher Parameter Das Feld, das, wenn es kompiliert es nach unten 660 00:35:02,880 --> 00:35:06,865 in die SQL, wird es geben daß sie um eindeutig sein. 661 00:35:06,865 --> 00:35:09,740 Sie können auch etwas geben nicht null und all die anderen Dinge 662 00:35:09,740 --> 00:35:11,750 Sie normalerweise tun in SQL. 663 00:35:11,750 --> 00:35:16,020 Also, das ist eine ziemlich einfache Modell, das das Datum hat. 664 00:35:16,020 --> 00:35:19,460 Beachten Sie hier, innerhalb des Datetime, I angegeben, was der Standard ist. 665 00:35:19,460 --> 00:35:22,560 I angegebenen es zu sein datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 wegen der Art und Weise, Diese wird ausgewertet, 667 00:35:24,920 --> 00:35:28,750 es tatsächlich auswertet die DateTime.Now wenn 668 00:35:28,750 --> 00:35:32,110 Es wird in die Datenbank eingefügt. 669 00:35:32,110 --> 00:35:34,760 >> Ich denke, dass, hätte ich zu überprüfen diese, 670 00:35:34,760 --> 00:35:38,222 aber wenn Sie haben so etwas wie dieses, dann es tatsächlich zu bewerten wäre, dass einmal, 671 00:35:38,222 --> 00:35:40,180 und dann wird das Datetime- würde immer die gleiche sein. 672 00:35:40,180 --> 00:35:44,240 Also, wenn Sie etwas zu tun, mit datetimes, Doppelrückschlag 673 00:35:44,240 --> 00:35:47,080 dass es, wenn die Bewertung tatsächlich wird eingesetzt, oder 674 00:35:47,080 --> 00:35:48,780 Sie könnten verwechselt werden. 675 00:35:48,780 --> 00:35:51,221 >> Der Titel ist nur ein CharField, die es 676 00:35:51,221 --> 00:35:53,970 sind Argumente, die Sie übergeben können in genau festlegt, wie lange Sie 677 00:35:53,970 --> 00:35:56,170 es haben wollen, aber hier, es war auch nicht wichtig. 678 00:35:56,170 --> 00:35:58,687 Und Text sein wird der Text der gesamten Post, 679 00:35:58,687 --> 00:36:01,020 und das wird eine sein, Textfield, nur weil Sie wollen, 680 00:36:01,020 --> 00:36:03,370 , damit es ein ziemlich langer String sein. 681 00:36:03,370 --> 00:36:05,970 >> Dann haben wir diese Meta Unterklasse, die nur 682 00:36:05,970 --> 00:36:11,250 gibt an, dass wir wollen, dass die Datenbank wenn dies tatsächlich in geöffnete 683 00:36:11,250 --> 00:36:14,267 die db-Objekt, das wir hier haben ist. 684 00:36:14,267 --> 00:36:16,350 Und letzte, was wir haben, hier ist nur diese Funktion 685 00:36:16,350 --> 00:36:18,120 dass wir zu gehen Verwenden von unserem Haupt App 686 00:36:18,120 --> 00:36:23,970 um die Datenbank für die Verbindung zu initialisieren , und dann, um den Beitrag Tabelle zu erstellen. 687 00:36:23,970 --> 00:36:26,880 >> Nun lassen Sie uns einen Blick auf die wichtigsten app selbst. 688 00:36:26,880 --> 00:36:30,800 Also dieses ist durchaus ein etwas länger als die, 689 00:36:30,800 --> 00:36:34,840 dass wir zuvor gesehen haben, aber hoffentlich nicht allzu schlecht. 690 00:36:34,840 --> 00:36:37,140 Also, lassen Sie mich dies erstrecken sich. 691 00:36:37,140 --> 00:36:38,370 Okay. 692 00:36:38,370 --> 00:36:42,070 >> Also, bemerken und die obere I importiert eine ganze Reihe von anderen Dingen 693 00:36:42,070 --> 00:36:44,129 von Flask, dass wir nicht wirklich gesehen. 694 00:36:44,129 --> 00:36:46,670 Und hoffentlich können wir durchmachen Jede dieser einen nach dem anderen 695 00:36:46,670 --> 00:36:49,420 und sprechen ein wenig mehr über sie, indem beispielsweise sortiert. 696 00:36:49,420 --> 00:36:51,380 So haben wir die Glaskolben, und die render_template, 697 00:36:51,380 --> 00:36:54,370 die wir bisher gesehen haben, Anfrage-Objekt, 698 00:36:54,370 --> 00:37:00,400 was kommen wird, wenn wir uns an, wie die Form, die ich tatsächlich zu zeigen 699 00:37:00,400 --> 00:37:01,170 funktioniert. 700 00:37:01,170 --> 00:37:04,850 Umzuleiten, die Sie umgeleitet werden können vom Erstellen neuer Beitrag zurück 701 00:37:04,850 --> 00:37:11,710 zurück auf die ursprüngliche Homepage, und dann URL, das ist etwas, mit dem Sie es 702 00:37:11,710 --> 00:37:15,550 herauszufinden, wo auf die Website eine bestimmte Seite ist. 703 00:37:15,550 --> 00:37:17,810 >> Also, das nächste was ich tue, ist, dass ich Import 704 00:37:17,810 --> 00:37:21,550 alle Informationen, die aus den Modellen Dateien, die wir bei einem Blick auf. 705 00:37:21,550 --> 00:37:23,140 Und, ja. 706 00:37:23,140 --> 00:37:28,720 >> Also, noch etwas Neues, das kommt auf, wenn Sie zu tun haben, 707 00:37:28,720 --> 00:37:31,850 insbesondere Datenbanken, ist, dass Sie angeben können, 708 00:37:31,850 --> 00:37:35,110 eine Funktion, die aufgerufen wird, bevor jeder Wunsch und Funktion, bekommt 709 00:37:35,110 --> 00:37:39,690 nach jeder Anforderung aufgerufen, mit diesem Funktion Dekorateur app.before Anfrage. 710 00:37:39,690 --> 00:37:42,324 >> Und so wird dies ausgeführt werden sollen überall dort, wo diese Funktion. 711 00:37:42,324 --> 00:37:44,240 Dies muss nicht sein vor der Anfrage genannt, 712 00:37:44,240 --> 00:37:46,281 aber in der Regel das ist etwas, sinnvoll, es nennen. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Was auch immer Funktion können Sie festlegen, Sie wollen dort aufgerufen werden, 715 00:37:51,650 --> 00:37:56,330 so dass ich angegebenen dieses initialize_db Funktion, die wir in den Models mussten zurück 716 00:37:56,330 --> 00:38:02,390 Datei, so dass vor jeder Anfrage, die Sie wollen die Verbindung zur Datenbank. 717 00:38:02,390 --> 00:38:04,560 >> Es gibt zwei verschiedene Möglichkeiten, dies zu tun. 718 00:38:04,560 --> 00:38:10,830 Sie könnenapp zu tun., I glaube, es ist after_request. 719 00:38:10,830 --> 00:38:13,800 Und die Differenz zwischen after_request und teardown_request, 720 00:38:13,800 --> 00:38:17,590 ist, dass after_request wird nur geschehen, wenn der Antrag tatsächlich gültig war. 721 00:38:17,590 --> 00:38:20,440 Und so, nur wenn das Anfrage erfolgreich war, 722 00:38:20,440 --> 00:38:22,490 wenn nichts schief gelaufen ist, aber teardown_request 723 00:38:22,490 --> 00:38:26,300 passiert im Falle einer erfolgreichen Anforderung oder im Falle eines Fehlers. 724 00:38:26,300 --> 00:38:28,252 >> Also, in der Regel, Sie wollen zu bedienen teardown_request, 725 00:38:28,252 --> 00:38:30,460 es sei denn, Sie tun möchten etwas, vor allem verschiedene 726 00:38:30,460 --> 00:38:31,470 im Falle eines Fehlers. 727 00:38:31,470 --> 00:38:35,122 Aber gerade zum Schließen der Datenbank, ob es erfolgreich ist oder wenn es scheitert, 728 00:38:35,122 --> 00:38:37,080 wir tun Sie trennen möchten aus der Datenbank. 729 00:38:37,080 --> 00:38:41,240 Also es heißt, db.close auf der db-Objekt. 730 00:38:41,240 --> 00:38:43,740 >> Beachten Sie, dass der teardown_request erfolgt in einer Ausnahme. 731 00:38:43,740 --> 00:38:46,781 So können Sie überprüfen, ob es tatsächlich ein Fehler, als es die Schließung, 732 00:38:46,781 --> 00:38:49,390 aber hier, hoffentlich gibt sind nicht eine ganze Reihe von Fehlern, 733 00:38:49,390 --> 00:38:52,720 so dass wir einfach irgendwie zu ignorieren, dass. 734 00:38:52,720 --> 00:38:55,990 >> Okay, und der Rest ist es nicht so schlimm. 735 00:38:55,990 --> 00:39:02,240 Also, wenn wir auf die Homepage, wir gemacht dieses home.html Template 736 00:39:02,240 --> 00:39:03,490 dass öffnet sich. 737 00:39:03,490 --> 00:39:06,240 Der Pass ist in der Post gleich, und was dies 738 00:39:06,240 --> 00:39:10,260 tut, ist, daran erinnern, wir haben diesen Beitrag Modell, so wählen wir alle Beiträge, 739 00:39:10,260 --> 00:39:13,890 und dann eine andere Sache, die Sie tun können, können Sie die WHERE-Klausel angeben, 740 00:39:13,890 --> 00:39:16,910 können Sie ein spezifizieren Bestellung durch, und so machen wir 741 00:39:16,910 --> 00:39:18,820 alle Beiträge, die erhalten ausgewählt und dann 742 00:39:18,820 --> 00:39:22,590 wir sie Bestellung durch den post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Und das wird angeben, wenn sie tatsächlich herauskommen, 744 00:39:25,030 --> 00:39:29,250 die jüngste wird sehr erste. 745 00:39:29,250 --> 00:39:31,420 >> Und dann kommen wir an, dass in home.html die Vorlage, 746 00:39:31,420 --> 00:39:34,240 also lassen Sie uns tatsächlich eröffnen dass Template wirklich schnell, 747 00:39:34,240 --> 00:39:36,760 und werfen Sie einen Blick darauf, wie die funktioniert. 748 00:39:36,760 --> 00:39:42,130 Und das ist keine große HTML, aber Hoffentlich können wir auf der Python zu konzentrieren. 749 00:39:42,130 --> 00:39:46,960 >> So gibt es einen Link auf die Neu hinzufügen Post, so dass diese den Weg gibt 750 00:39:46,960 --> 00:39:51,580 innerhalb der Flasche, die wir zu definieren, was hier ist. 751 00:39:51,580 --> 00:39:56,310 Dies ist die neue Postroute, und wir geben Sie, dass Sie sich hier ein. 752 00:39:56,310 --> 00:40:00,450 Und damit ist ein Link, dann gehen zu dieser Strecke innerhalb des Flask-Server. 753 00:40:00,450 --> 00:40:03,820 >> Je mehr interessante Sache ist dies für die Schleife hier. 754 00:40:03,820 --> 00:40:07,685 So legen wir fest, dass dieser Post Parameter, 755 00:40:07,685 --> 00:40:09,560 wurde in den vergangen render_template Funktion, 756 00:40:09,560 --> 00:40:13,550 Für jeden Eintrag in der Post Objekt, das in übergeben wird. 757 00:40:13,550 --> 00:40:16,600 Wir wollen zum Ausdrucken die Post-Titel, in H1, 758 00:40:16,600 --> 00:40:21,930 und dann unten, ausdrucken möchten wir die Post Text innerhalb eines Absatzes. 759 00:40:21,930 --> 00:40:25,710 >> Und hier können wir tatsächlich rufen Sie eine Python-Funktion, 760 00:40:25,710 --> 00:40:35,130 so dass wir strftime aufrufen können, ST-RF-time, und Sie können im Format-String übergeben 761 00:40:35,130 --> 00:40:37,064 dass Sie, um die Daten in ausdrucken möchten. 762 00:40:37,064 --> 00:40:39,980 So ist es ist recht nett, dass man tatsächlich diese Python-Funktion aufrufen 763 00:40:39,980 --> 00:40:41,090 von innen hier. 764 00:40:41,090 --> 00:40:44,370 Sie müssen nicht, um die Formatierung zu tun der Steuerungsseite, denn wirklich, 765 00:40:44,370 --> 00:40:47,770 Formatieren Sie das Datum ist etwas, Sie in der Ansicht umgehen wollen. 766 00:40:47,770 --> 00:40:51,480 >> Und all diese Prozent Dinge, ist nicht super wichtig. 767 00:40:51,480 --> 00:40:55,270 Schlägt man in der Dokumentation für die strftime-Funktion in Python, 768 00:40:55,270 --> 00:40:57,040 es alles gibt Dinge, aber das ist 769 00:40:57,040 --> 00:40:59,190 how, wenn wir waren auf der Suche bei hier der Homepage, 770 00:40:59,190 --> 00:41:04,440 Es formatiert diese mit einem schönen Datum, und es gibt an, AM oder PM, 771 00:41:04,440 --> 00:41:09,410 aber in der Regel, wenn man haben hier nicht über diese, 772 00:41:09,410 --> 00:41:14,024 Sie werden wahrscheinlich einige Müll Datum, das sah nicht sehr gut. 773 00:41:14,024 --> 00:41:15,940 Und dann geben wir die post.text, konnte und ich 774 00:41:15,940 --> 00:41:19,460 habe ein paar setzen Zeilenumbrüche hier, nur 775 00:41:19,460 --> 00:41:21,820 einige Räume zwischen jedem Pfosten gesetzt. 776 00:41:21,820 --> 00:41:26,270 >> Also, ich glaube, das Wichtigste was in diesem Beispiel 777 00:41:26,270 --> 00:41:28,697 ist, dass man diese for-Schleife verwenden. 778 00:41:28,697 --> 00:41:30,780 Und dies ist analog zu Dinge, die Sie in PHP tun können. 779 00:41:30,780 --> 00:41:32,905 Sie können durch Iteration, alles übergeben wird in, 780 00:41:32,905 --> 00:41:36,719 usw., anstatt zu tun Kopieren / Einfügen, Kopieren / Einfügen alle HTML, 781 00:41:36,719 --> 00:41:40,010 Sie müssen es nur einmal schreiben und dann Sie überlaufen alle Beiträge. 782 00:41:40,010 --> 00:41:41,510 >> Und das ist etwas, gemeinsam ist, dass Sie wollen, 783 00:41:41,510 --> 00:41:44,510 zu tun ist, wenn Sie eine Menge von Daten haben, ist, dass für alles, was in Ihren Daten, 784 00:41:44,510 --> 00:41:48,370 Sie eine ähnliche Sache machen wollen. 785 00:41:48,370 --> 00:41:51,690 Und dann, nur nicht vergessen, dass, wenn Sie explizit ausdrucken etwas wollen 786 00:41:51,690 --> 00:41:54,780 in der HTML, verwenden Sie die Doppelstreben hier, 787 00:41:54,780 --> 00:41:57,820 aber dann, wenn Sie angeben möchten einige Informationen über einen Zustand, 788 00:41:57,820 --> 00:42:02,430 oder über eine for-Schleife, die Sie verwenden Sie die Halterung Prozent. 789 00:42:02,430 --> 00:42:08,730 >> Also, geht zurück auf die Python- Code, damit erklärt, 790 00:42:08,730 --> 00:42:12,242 was in der Haupt geschieht Route, wenn wir dorthin gehen, 791 00:42:12,242 --> 00:42:14,450 es gerade zeigt alle Beiträge, aber dann die Frage, 792 00:42:14,450 --> 00:42:17,440 ist, wie können wir tatsächlich bekommen Beiträge in die Datenbank, die 793 00:42:17,440 --> 00:42:18,970 ist ein wenig interessanter. 794 00:42:18,970 --> 00:42:23,960 >> Also, wenn Sie an der New klicken Beitrag Link, den wir hier gesehen haben, 795 00:42:23,960 --> 00:42:26,000 Es leitet Sie auf diesem Formular. 796 00:42:26,000 --> 00:42:29,580 Und das ist nur ein einfacher Aufruf an die render_template Funktion, die dann 797 00:42:29,580 --> 00:42:32,110 geht in den neuen Eintrag in HTML-Formular. 798 00:42:32,110 --> 00:42:36,212 Werfen wir also einen Blick auf, dass. 799 00:42:36,212 --> 00:42:37,420 Also dieses ist ziemlich einfach. 800 00:42:37,420 --> 00:42:45,110 Es hat eine einfache HTML-Formular, das wird ein wenig bekannt vor, 801 00:42:45,110 --> 00:42:47,380 basierend auf den Formen, in CS50 Finance. 802 00:42:47,380 --> 00:42:49,940 Und so haben wir hier angeben, die Aktion. 803 00:42:49,940 --> 00:42:52,435 Und hier, wenn Sie gerade arbeiten mit PHP normalerweise es 804 00:42:52,435 --> 00:42:55,930 wäre etwas wie, create.php, aber hier 805 00:42:55,930 --> 00:42:59,960 wir tatsächlich eine Route festlegen innerhalb des Flask-Server. 806 00:42:59,960 --> 00:43:02,520 Und ja, dieser Weg entspricht auf die Strecke zu erstellen 807 00:43:02,520 --> 00:43:05,680 dass wir hier, die wir werden in die in einem zweiten zu gehen. 808 00:43:05,680 --> 00:43:07,630 >> Und so haben wir festlegen, dass es ist ein Post-Methode, 809 00:43:07,630 --> 00:43:09,820 weil wir senden möchten diese Form Daten, und in der Regel 810 00:43:09,820 --> 00:43:12,945 wenn Sie Daten aus einem Formular sendet, möchten Sie vielleicht einen Beitrag Anfrage verwenden, 811 00:43:12,945 --> 00:43:15,760 nur damit Sie nicht am Ende mit diesem großen, unhandlichen URL. 812 00:43:15,760 --> 00:43:18,970 Aber man könnte auch eine GET-Anforderung verwenden, und geben es in mit variabler Routing, 813 00:43:18,970 --> 00:43:21,170 aber für Formulare, es ist schön an einen Pfosten Anfrage hier. 814 00:43:21,170 --> 00:43:24,620 Und so ist, dann, wie du gerade würde mit HTML und PHP zu tun, 815 00:43:24,620 --> 00:43:28,420 Sie können diese Texteingaben angeben, und Sie können den Namen von ihnen geben, 816 00:43:28,420 --> 00:43:33,490 und das ist der Name, der übergeben bekommen wird in das Anfrage Objekt innerhalb Flask. 817 00:43:33,490 --> 00:43:36,960 >> Und dann haben wir ein Absenden Button mit der Aufschrift Post. 818 00:43:36,960 --> 00:43:40,760 Und hier ist Beitrag der Name des Button, weil es ein Blog-Post, 819 00:43:40,760 --> 00:43:42,700 aber hier ist die Post-Request-Methode. 820 00:43:42,700 --> 00:43:47,060 Das sind also das gleiche Wort aber eigentlich in keinem Zusammenhang. 821 00:43:47,060 --> 00:43:48,460 Ja 822 00:43:48,460 --> 00:43:54,800 >> Gehen wir zurück zu den Python-Code, wenn wir so genannte Methode zu erstellen, 823 00:43:54,800 --> 00:43:57,702 bemerken hier, dass man tatsächlich innerhalb der Route festlegen 824 00:43:57,702 --> 00:44:00,650 die Anforderungsmethoden dass Sie übernehmen möchten, 825 00:44:00,650 --> 00:44:04,770 und so hier, ich angeben, dass ich nur wollen einen Beitrag Verfahren zu akzeptieren. 826 00:44:04,770 --> 00:44:09,800 Also, wenn ich tatsächlich versuchen, die Seite zu besuchen direkt, was mit wird eine GET-Anforderung, 827 00:44:09,800 --> 00:44:11,700 es wird mir sagen, "Methode nicht erlaubt." 828 00:44:11,700 --> 00:44:15,840 >> Und so haben Sie Seiten, Art wie Diese Seite zu erstellen, die ich nur 829 00:44:15,840 --> 00:44:20,192 wirklich Verwendung als eine Möglichkeit für das Formular vorgelegt bekommen, 830 00:44:20,192 --> 00:44:22,900 Sie können angeben, dass Sie dies nicht tun wollen die Menschen in der Lage, es zu gehen 831 00:44:22,900 --> 00:44:25,650 direkt über eine GET-Anfrage, oder wenn Sie nicht wollen, 832 00:44:25,650 --> 00:44:28,580 aus irgendeinem Grund, ein Gesuch, Sie könnten nur angeben, hier bekommen, 833 00:44:28,580 --> 00:44:32,720 aber in diesem Beispiel, wir wollen, dass die Gesuch zu gehen. 834 00:44:32,720 --> 00:44:38,700 >> Also, wenn create_post aufgerufen wird, wenn besuchen wir, dass über das Gesuch, 835 00:44:38,700 --> 00:44:43,600 wenn Sie zu einer bestimmten gehen Strecke, es gibt diese Anfrage-Objekt, 836 00:44:43,600 --> 00:44:46,640 und wir importieren musste Anfragen an die Spitze, 837 00:44:46,640 --> 00:44:49,640 aber es gibt diese Anfrage Objekt, das in übergeben wird, 838 00:44:49,640 --> 00:44:53,210 und Sie die Formulardaten zugreifen können, die automatisch gefüllt bekommen 839 00:44:53,210 --> 00:44:55,070 Wenn Sie eine Anforderung aus einem Formular zu senden. 840 00:44:55,070 --> 00:44:56,990 >> Und dann, was ich denke, ist wirklich cool ist 841 00:44:56,990 --> 00:45:02,840 dass die Form Objekt übergeben bekommen in, ist nur eine Python-Wörterbuch, 842 00:45:02,840 --> 00:45:10,560 enthält, wenn Sie dies hier access-- lassen me nächsten ziehen Sie die HTML, um es einfach 843 00:45:10,560 --> 00:45:17,670 so können Sie das haben als Referenz, ja, so 844 00:45:17,670 --> 00:45:21,060 die Namen, die wir hier angeben für die verschiedenen Felder, so 845 00:45:21,060 --> 00:45:23,900 der Titel und der Text, die wir dann benutzen Sie einfach den über hier 846 00:45:23,900 --> 00:45:27,110 als Indizes in die Formulardaten. 847 00:45:27,110 --> 00:45:28,950 Also das ist super bequem. 848 00:45:28,950 --> 00:45:33,320 >> Also dann nennen wir post.create, die erstellen und automatisch einfügen 849 00:45:33,320 --> 00:45:36,850 diese neue Post-Objekt in der Datenbank. 850 00:45:36,850 --> 00:45:40,690 Und ich denke, diese Funktion zu erstellen Hier ist eine wirklich coole Beispiel dafür, wie 851 00:45:40,690 --> 00:45:44,900 leistungsstarke Kolben wird und die Arbeit mit diesem, weil, wenn Sie wurden, etwas zu tun 852 00:45:44,900 --> 00:45:48,660 in PHP, könnten Sie zu haben, tun eine Menge Validierung, 853 00:45:48,660 --> 00:45:51,730 Sie wären dann stellen Sie eine Datenbankverbindung, 854 00:45:51,730 --> 00:45:55,210 Sie wären dann führen Sie die SQL-Abfrage, 855 00:45:55,210 --> 00:45:59,550 aber hier müssen wir nur dieses schöne post.create, die wir dann einfach 856 00:45:59,550 --> 00:46:01,520 Holen Sie sich die Informationen aus der Request-Objekt, 857 00:46:01,520 --> 00:46:05,370 und übergeben Sie sie in eine neue Post, dass wir schaffen. 858 00:46:05,370 --> 00:46:07,850 >> Und dann, das allerletzte was wir tun wollen, 859 00:46:07,850 --> 00:46:09,630 ist es, die umgeleitet werden Benutzer zurück in die Heimat. 860 00:46:09,630 --> 00:46:13,020 Und so nutzen wir Flask umleiten Funktion. 861 00:46:13,020 --> 00:46:17,770 Und etwas, das wir nicht gesehen hatte, zuvor war diese URL-Funktion. 862 00:46:17,770 --> 00:46:21,970 So ist die URL für die Funktion können Sie tatsächlich den Namen übergeben 863 00:46:21,970 --> 00:46:26,090 einer Funktion in Ihrer Python-Code, anstelle der bestimmten Route 864 00:46:26,090 --> 00:46:26,720 dass es an. 865 00:46:26,720 --> 00:46:32,107 >> So konnte ich genauso gut umgeleitet einem Benutzer, Schrägstrich, 866 00:46:32,107 --> 00:46:37,050 die sie schicken würde wieder nach Hause, aber mit der URL für die Funktion ist nett, 867 00:46:37,050 --> 00:46:39,990 weil, wenn Sie ändern die Ort, an dem die Dinge sind, 868 00:46:39,990 --> 00:46:44,080 also lassen Sie uns sagen, dass ich das ändern Heimat auf / home stattdessen, 869 00:46:44,080 --> 00:46:47,040 Dies würde immer noch dann wieder / home, denn tatsächlich geht und schaut nach oben 870 00:46:47,040 --> 00:46:50,770 der Name der Funktion, und geben Ihnen zurück die URL für das. 871 00:46:50,770 --> 00:46:52,490 >> Also, irgendwie auf die davon aus, dass Sie 872 00:46:52,490 --> 00:46:55,489 eher zu, wo die Dinge ändern sind, als die Namen der Funktionen. 873 00:46:55,489 --> 00:46:58,840 Sie können dies auch wirklich nutzen schöne URL für Funktion. 874 00:46:58,840 --> 00:47:02,470 Und eine Sache, die Sie wissen sollten das ist ein wenig kompliziert, 875 00:47:02,470 --> 00:47:05,750 ist, dass Sie denken, Sie könnten nur rufen umleiten auf der URL, 876 00:47:05,750 --> 00:47:10,600 aber eigentlich alle Routen haben , eine Art von Text und HTML zurückkehren, 877 00:47:10,600 --> 00:47:14,360 so dass Sie tatsächlich haben, Rück die Umleitung Anruf. 878 00:47:14,360 --> 00:47:18,379 Sonst werden Sie etwas zu bekommen ungültige etwa nicht wieder einen String, 879 00:47:18,379 --> 00:47:21,420 Da alle diese zurückkehren müssen HTML Sie wirklich wollen, zu machen. 880 00:47:21,420 --> 00:47:26,980 >> Und so, wenn Sie die Umleitung aufrufen, Es leitet Sie auf der Seite, 881 00:47:26,980 --> 00:47:30,270 aber es tatsächlich HTML zurückgibt müssen Sie diese Umleitung auszuführen. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Gehen Sie zurück auf die Startseite. 884 00:47:37,110 --> 00:47:39,200 Also müssen wir diese zwei verschiedene Ansichten. 885 00:47:39,200 --> 00:47:40,132 Wir haben die Home-Ansicht. 886 00:47:40,132 --> 00:47:41,590 Oder ich denke, ich sollte Vorlagen sagen. 887 00:47:41,590 --> 00:47:44,190 Wir haben diese beiden Vorlagen, die Heimat Vorlage, 888 00:47:44,190 --> 00:47:48,500 zeigt alle unsere Beiträge und dann haben wir diese Anzeige Sache, 889 00:47:48,500 --> 00:47:52,970 und wenn Sie den Beitrag klicken, geht es auf eine neue Route im Glaskolben, 890 00:47:52,970 --> 00:47:55,920 aber das Route nicht unbedingt eine entsprechende Vorlage. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Sie müssen nicht, um zu sehen nichts, aber man kann immer noch 893 00:48:01,560 --> 00:48:04,090 diese Arbeiten gehen hinter den Kulissen. 894 00:48:04,090 --> 00:48:07,450 Und dann haben Sie umgeleitet zurück zur Homepage. 895 00:48:07,450 --> 00:48:12,230 Und auf jeden Fall ist es einfach, um zu arbeiten in irgendeiner schöner CSS in die Vorlage 896 00:48:12,230 --> 00:48:15,580 und stellen Sie so aussehen viel schöner, aber alle von der Hauptsystem 897 00:48:15,580 --> 00:48:18,590 gibt es in der Python. 898 00:48:18,590 --> 00:48:20,020 >> Haben Sie Fragen zu diesem Beispiel? 899 00:48:20,020 --> 00:48:22,760 Ich weiß, es gibt eine Menge von verschiedene Dinge, die es gibt, 900 00:48:22,760 --> 00:48:25,341 eine Menge Dinge, die wir nicht gesehen hatte, vor, aber wie alles. 901 00:48:25,341 --> 00:48:25,840 Ja. 902 00:48:25,840 --> 00:48:28,346 >> ZIELGRUPPE 1: Haben Sie nichts zu tun haben Sonder, um die Daten, die es zu schrubben 903 00:48:28,346 --> 00:48:29,600 kommen in der Form? 904 00:48:29,600 --> 00:48:31,109 Ich bemerkte Sie gerade gesagt "zu schaffen" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Ja, das ist also tatsächlich, das ist ein wirklich guter Punkt. 906 00:48:33,900 --> 00:48:36,350 Die Frage war, sind Sie brauchen, um zu überprüfen und sicherzustellen 907 00:48:36,350 --> 00:48:39,190 daß die Daten gültig sind, und zu tun, jede Art von Wäsche 908 00:48:39,190 --> 00:48:41,840 um sicherzustellen, dass sie gültig ist, weil, wie Sie hier sehen können, 909 00:48:41,840 --> 00:48:42,660 Ich sage nicht, das zu tun. 910 00:48:42,660 --> 00:48:48,140 Also mal sehen, was passiert, wenn ich nach etwas leer. 911 00:48:48,140 --> 00:48:51,190 Also, es wird eigentlich nur machen ein leer Post und füllen Sie die Datetime. 912 00:48:51,190 --> 00:48:55,990 >> So in der Realität würde Sie wahrscheinlich wollen, etwas zu tun, wie, 913 00:48:55,990 --> 00:49:04,749 vielleicht angeben, wenn Titel gleich ist die leere Zeichenkette, dann tun Sie das nicht. 914 00:49:04,749 --> 00:49:07,290 Oder tun es nur, wenn der Titel nicht gleich der leeren String. 915 00:49:07,290 --> 00:49:10,330 So dass es nicht wirklich automatisch kümmern sich um diese Wäsche 916 00:49:10,330 --> 00:49:12,820 für Sie, so dass Sie noch brauchen, um das zu tun. 917 00:49:12,820 --> 00:49:14,330 Ja, gute Frage. 918 00:49:14,330 --> 00:49:18,497 >> ZIELGRUPPE 2: Ist es Peeling für die Fortsetzung Injektion? 919 00:49:18,497 --> 00:49:19,890 Wissen Sie? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Ich hoffe, peewee tut. 921 00:49:22,830 --> 00:49:25,830 Ich denke, es wäre sicherlich ein hübsch sein bad-Bibliothek, wenn sie nicht tun. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Ich weiß es nicht genau. 924 00:49:32,690 --> 00:49:34,820 Müsste ich bei der Suche Abfrage, die es generiert. 925 00:49:34,820 --> 00:49:38,980 Ich denke, dass, wenn ich in eine typisierte Blog-Post, die Art sah 926 00:49:38,980 --> 00:49:46,370 wie eine SQL-Injection-Angriff, so etwas wie dieses, wenn diese 927 00:49:46,370 --> 00:49:49,370 ist wie ein Passwort-Feld oder so etwas, Sie könnte so etwas wie dies zu tun. 928 00:49:49,370 --> 00:49:53,410 >> Ich denke, das wird immer noch bekommen buchstäblich geschrieben, 929 00:49:53,410 --> 00:49:59,200 aber ich denke, peewee tut eine Art von Wäsche des Daten 930 00:49:59,200 --> 00:50:01,680 bevor es tatsächlich führt es aus. 931 00:50:01,680 --> 00:50:04,510 >> ZIELGRUPPE 1: Das Textfeld ist entwickelt, um Klartext zu nehmen, nicht wahr? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Ja, ist es. 933 00:50:05,710 --> 00:50:06,465 Ja. 934 00:50:06,465 --> 00:50:09,590 Ich denke also, dass alle die, so ist dies, richtiges Verhalten, das wird das zu tun, 935 00:50:09,590 --> 00:50:12,170 Aber ich denke, peewee hoffentlich tut 936 00:50:12,170 --> 00:50:13,780 eine Art von Schutz an ihrem Ende. 937 00:50:13,780 --> 00:50:16,090 Und wenn man wollte überprüfen, dass es 938 00:50:16,090 --> 00:50:19,530 es Möglichkeiten, wenn Sie eine Abfrage zu generieren. 939 00:50:19,530 --> 00:50:22,622 so dass Sie nicht zu haben, führen Sie es direkt. 940 00:50:22,622 --> 00:50:24,330 Ich müsste einen nehmen Blick auf Unterlagen, 941 00:50:24,330 --> 00:50:27,930 aber man kann tatsächlich sehen die SQL, die es erzeugt, 942 00:50:27,930 --> 00:50:30,840 und einen Blick auf das, und machen sicher, dass es zu entkommen Dinge. 943 00:50:30,840 --> 00:50:33,700 >> Ein weiterer Grund, warum Sie wollen an der SQL aussehen 944 00:50:33,700 --> 00:50:37,920 dass peewee ausgibt, ist, wenn Dinge scheinen wirklich langsam gehen, 945 00:50:37,920 --> 00:50:41,090 können Sie einen Blick und sehen, was es tatsächlich zu tun, denn es ist manchmal 946 00:50:41,090 --> 00:50:44,670 leicht versehentlich hinzufügen in, wie Sie es schreiben, 947 00:50:44,670 --> 00:50:47,880 können Sie versehentlich habe es wählen Sie zunächst die gesamte Datenbank, 948 00:50:47,880 --> 00:50:50,230 und führen Sie dann eine Art Betrieb auf, dass, wenn Sie es wirklich 949 00:50:50,230 --> 00:50:51,320 bedeutet, um eine Untergruppe auszuwählen. 950 00:50:51,320 --> 00:50:53,560 >> Und so, wenn die Dinge nicht ganz rechts gehen, 951 00:50:53,560 --> 00:50:57,300 es ist gut, einen Blick auf die Anfrage übernehmen Das ist eigentlich immer generiert. 952 00:50:57,300 --> 00:50:57,800 Ja. 953 00:50:57,800 --> 00:51:02,100 >> ZIELGRUPPE 2: Wenn Sie zum ersten Mal gestartet, Sie setzen in der Port als 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Ja. 955 00:51:02,904 --> 00:51:06,070 ZIELGRUPPE 2: Ist der Standard mit peewee, oder ist das etwas, was Sie ändern können? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Ja, so dass die Port ist standardmäßig mit Flachmann. 957 00:51:10,870 --> 00:51:13,061 Wenn Sie es, ohne laufen Spezifizieren nichts, 958 00:51:13,061 --> 00:51:14,310 wird es automatisch tun. 959 00:51:14,310 --> 00:51:16,060 Ich glaube, ich hätte zu überprüfen diese, 960 00:51:16,060 --> 00:51:19,130 Sie können jedoch, dass in der app.run angeben, Ich denke, man kann etwas tun, 961 00:51:19,130 --> 00:51:19,629 port = 8080. 962 00:51:19,629 --> 00:51:22,375 963 00:51:22,375 --> 00:51:23,750 Lassen Sie uns geben, dass ein Versuch, sehr kurz. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Ja, so müssen Sie nur angeben können, port = 8080, und es wird dort ausgeführt, 966 00:51:32,230 --> 00:51:36,130 was ich denke, wenn man wollte, um sie auszuführen auf der IDE, ich habe nicht versucht, diese aus, 967 00:51:36,130 --> 00:51:38,527 aber ich denke, dass, wenn Sie lief es auf Port 8080, 968 00:51:38,527 --> 00:51:40,360 Sie wahrscheinlich in der Lage sein, Zugriff auf den Server, 969 00:51:40,360 --> 00:51:41,870 genau wie Sie für die Website waren. 970 00:51:41,870 --> 00:51:44,390 >> Ja, das ist aber nicht nur einfach zu ändern, wenn Sie 971 00:51:44,390 --> 00:51:48,540 irgendeine Art wie Port-Forwarding Dinge, die Sie tun müssen. 972 00:51:48,540 --> 00:51:50,410 >> Noch Fragen? 973 00:51:50,410 --> 00:51:50,916 Ja? 974 00:51:50,916 --> 00:51:53,416 ZIELGRUPPE 1: Also, ich sah Ihr Modelle, die, wie Sie bereits erwähnt, 975 00:51:53,416 --> 00:51:55,647 müssen Sie die angeben, Datenbank für jedes Objekt. 976 00:51:55,647 --> 00:51:58,105 Haben Sie vielleicht wissen, tut dass es wirklich einfach, wenn Sie 977 00:51:58,105 --> 00:52:03,210 haben viele SQLite-Datenbanken, die Sie um für eine einzelne Web-App verwenden möchten, 978 00:52:03,210 --> 00:52:07,210 dass man nur ein paar angeben der verschiedene, in Ihrem Modell? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Ja, lassen Sie mich zu öffnen, dass sich ganz schnell. 980 00:52:11,620 --> 00:52:17,570 Also, Sie sagen, wenn Sie haben wollen eine Reihe von verschiedenen etwas, vielleicht 981 00:52:17,570 --> 00:52:22,670 mögen und die Studenten, für einige Grund so etwas? 982 00:52:22,670 --> 00:52:26,870 Ja, so denke ich, dass Sie immer noch, jedes Modell 983 00:52:26,870 --> 00:52:30,652 müsste immer noch einfach nur eine Datenbank zugewiesen ist, 984 00:52:30,652 --> 00:52:32,610 aber wenn Sie haben wollte verschiedene Modelle, 985 00:52:32,610 --> 00:52:35,818 haben verschiedene Datenbankobjekte zugeordnet um es, könnte man auf jeden Fall tun. 986 00:52:35,818 --> 00:52:43,070 Also, wenn ich eine neue, etwas wie das, 987 00:52:43,070 --> 00:52:47,000 und jetzt ist dies ein Schüler, sieht seltsam wie ein Blog-Post, 988 00:52:47,000 --> 00:52:49,390 Ich könnte das angeben Datenbank ist gleich hier db_2. 989 00:52:49,390 --> 00:52:51,390 Also, ich denke, das ist das Haupt Weise können Sie das tun. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Cool. 992 00:52:56,200 --> 00:52:58,410 Noch Fragen? 993 00:52:58,410 --> 00:53:02,170 >> Also nur zu Ende zu ein wenig bit, hier sind einige Ressourcen, 994 00:53:02,170 --> 00:53:06,030 und diese Folien werden online gebucht werden so können Sie tatsächlich auf diese Links. 995 00:53:06,030 --> 00:53:08,500 Die besten Quellen sind wirklich die Dokumentation für Flask 996 00:53:08,500 --> 00:53:09,930 und peewee selbst. 997 00:53:09,930 --> 00:53:12,940 Sie sind wirklich gut geschrieben, denke ich. 998 00:53:12,940 --> 00:53:18,180 So wird der Kolben Website hier, und sie einen Schnellstart-Tutorial, dass 999 00:53:18,180 --> 00:53:20,710 wird durch ähnliche Fuß Dinge, auf das, was ich durch ging, 1000 00:53:20,710 --> 00:53:23,560 aber wenn Sie jede Art von Kritik will der Dinge, die ich ging, 1001 00:53:23,560 --> 00:53:26,200 oder Sie dachten, dass ich erklärte, etwas in einer verwirrenden Art und Weise, 1002 00:53:26,200 --> 00:53:28,390 sie werden ähnliche Beispiele dort haben. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee hat Dokumentation und sie einen Schnellstart-Tutorial haben 1004 00:53:31,570 --> 00:53:34,650 dass über die wichtigsten Parameter geht dass Sie möchten, um zu verwenden. 1005 00:53:34,650 --> 00:53:38,900 Also, die Dinge, die ich gesprochen mit die einzigartige und Angabe Standardwerte, 1006 00:53:38,900 --> 00:53:42,710 die verschiedenen Arten von Feldern, die Sie verwenden können, diese würden alle da sein. 1007 00:53:42,710 --> 00:53:44,690 >> Auch, wenn Sie Fragen zu peewee, 1008 00:53:44,690 --> 00:53:47,530 und Sie können sie auf Stackoverflow zu senden, der Kerl, peewee tatsächlich 1009 00:53:47,530 --> 00:53:49,500 geht weiter und antwortet denen manchmal. 1010 00:53:49,500 --> 00:53:53,200 Wenn Sie eine Frage, hoffentlich er wird in der Lage, sie zu beantworten, 1011 00:53:53,200 --> 00:53:54,867 denn er schrieb die ganze Sache. 1012 00:53:54,867 --> 00:53:56,700 Ich denke, das ist alles, was Ich wollte zu decken. 1013 00:53:56,700 --> 00:53:58,930 Dank für das Coming-out. 1014 00:53:58,930 --> 00:54:02,688