1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [Muziek] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Hallo, iedereen. 5 00:00:05,830 --> 00:00:08,020 Bedankt voor het komen vandaag. 6 00:00:08,020 --> 00:00:10,660 Dit seminar is "Python Web Apps met fles. " 7 00:00:10,660 --> 00:00:14,510 >> Dus, ik ga praten een beetje over waarom 8 00:00:14,510 --> 00:00:17,400 je zou willen Flask gebruiken om web apps met Python, in tegenstelling 9 00:00:17,400 --> 00:00:21,556 sommige andere frameworks die er zijn, zoals Django, de bekendste. 10 00:00:21,556 --> 00:00:24,330 De ondertitel is "en peewee, "dat is iets 11 00:00:24,330 --> 00:00:27,250 we gaan praten over hoe om met SQL-databases. 12 00:00:27,250 --> 00:00:29,610 Het maakt het echt leuk. 13 00:00:29,610 --> 00:00:32,390 >> Dus, hier is slechts een kort overzicht van wat ik wil gaan over. 14 00:00:32,390 --> 00:00:35,520 Dus, eerst, slechts één dia dat gaat quickstart zijn, 15 00:00:35,520 --> 00:00:38,530 dat is hoe om alles ingesteld op uw computer. 16 00:00:38,530 --> 00:00:41,760 Ik ga om te demonstreren dit op mijn lokale Mac machine, 17 00:00:41,760 --> 00:00:45,220 gewoon omdat dat is waar ik heb dit gedaan voor, ik ben het meest comfortabel met het, 18 00:00:45,220 --> 00:00:48,510 maar dit is zeker mogelijk op de CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Dus, na dat, ik wil introduceren wat Kolf is, 20 00:00:52,050 --> 00:00:55,089 en u overtuigen waarom je zou moeten gebruiken in de eerste plaats. 21 00:00:55,089 --> 00:00:56,880 Dan zal ik een snelle geven voorbeeld van wat je 22 00:00:56,880 --> 00:01:00,550 kan doen in Kolf, een snel voorbeeld van wat je kunt doen in peewee, 23 00:01:00,550 --> 00:01:05,010 en dan zal ik je een meer tonen volledig voorbeeld applicatie 24 00:01:05,010 --> 00:01:07,520 dat ik samen te stellen dat we kunt door elkaar te lopen. 25 00:01:07,520 --> 00:01:10,040 >> En tenslotte, in de laatste dia, ik heb 26 00:01:10,040 --> 00:01:12,730 aantal middelen die je kijkt bij online voor meer informatie. 27 00:01:12,730 --> 00:01:15,560 Dit is niet een volledige handleiding hoe Kolf gebruiken. 28 00:01:15,560 --> 00:01:18,140 En ik hoop te vertrekken wat tijd voor vragen. 29 00:01:18,140 --> 00:01:21,050 Iedereen kijken lokaal, net zoals, schreeuwen in het midden 30 00:01:21,050 --> 00:01:22,340 als je vragen hebt. 31 00:01:22,340 --> 00:01:27,150 >> Dus snelle installatie stuff, als je wilt om mee te volgen, 32 00:01:27,150 --> 00:01:29,240 of als u wilt om dit te krijgen op uw eigen computer, 33 00:01:29,240 --> 00:01:32,440 Ik ga worden met behulp van Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Kolf werkt met Python 3, maar ik hou 35 00:01:35,860 --> 00:01:38,660 met behulp van Python 2, want er is sommige Python pakketten die 36 00:01:38,660 --> 00:01:40,910 nog niet met 3. 37 00:01:40,910 --> 00:01:44,800 Als u pip hebt geïnstalleerd, die is een Python package manager, 38 00:01:44,800 --> 00:01:48,190 Ik denk dat als je Python is groter dan of gelijk aan 2.7.9, 39 00:01:48,190 --> 00:01:52,220 heb je het al geïnstalleerd, het is super gemakkelijk om deze pakketten te installeren. 40 00:01:52,220 --> 00:01:54,990 >> U kunt dit doen pip installeren Kolf, pip installeren peewee, 41 00:01:54,990 --> 00:01:58,600 Meestal moet je sudo gewoon lopen zodat de rechten uit te werken. 42 00:01:58,600 --> 00:02:01,080 En, als je gebruik maakt van een super oude versie van Python, 43 00:02:01,080 --> 00:02:05,100 Ik raad het bijwerken van uw Python, of met behulp van EasyInstall om pip installeren. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Dus de volgende vraag is, wat is Kolf? 46 00:02:11,120 --> 00:02:13,280 En ik denk dat, voor het eerst een redelijke vraag ik me af 47 00:02:13,280 --> 00:02:15,585 voor een lange tijd is, wat is een web-app? 48 00:02:15,585 --> 00:02:17,960 Want dat is een woord dat ik denk is gegooid veel rond 49 00:02:17,960 --> 00:02:19,240 dat ik niet echt weten. 50 00:02:19,240 --> 00:02:22,340 En ik denk dat de beste voorbeeld van wat een web-app is, 51 00:02:22,340 --> 00:02:26,960 echt CS50 Finance, waar de het is echt niet alleen een website, 52 00:02:26,960 --> 00:02:29,320 maar het is iets dat je kon soort interactie met. 53 00:02:29,320 --> 00:02:31,736 Er zijn gebruikersaccounts en allerlei verschillende dingen. 54 00:02:31,736 --> 00:02:35,010 Dus, waar je precies de aandacht van de lijn tussen wat is een website, 55 00:02:35,010 --> 00:02:38,780 en wat is een web app, is een soort van willekeurig, maar ik denk dat het idee, 56 00:02:38,780 --> 00:02:42,110 het is iets meer dan een website en het is een nuttige toepassing. 57 00:02:42,110 --> 00:02:46,081 >> Dus, Kolf is een kader voor het maken van webapplicaties met behulp van Python. 58 00:02:46,081 --> 00:02:48,330 En hopelijk tegen het einde van deze, zal ik u te overtuigen 59 00:02:48,330 --> 00:02:52,210 dat je eigenlijk iets zou kunnen schrijven zoals CS50 Financiën met Python, die ik 60 00:02:52,210 --> 00:02:53,950 als een stuk beter dan PHP, persoonlijk. 61 00:02:53,950 --> 00:02:57,320 >> Dus, Kolf is, noemen ze een microframework, waarbij, 62 00:02:57,320 --> 00:02:59,800 ze bedoelen het is heel eenvoudig, maar uitbreidbaar. 63 00:02:59,800 --> 00:03:02,980 Dus, het is net wat je nodig hebt, maar als je wilt meer functies, 64 00:03:02,980 --> 00:03:04,522 het is makkelijk om ze in te brengen. 65 00:03:04,522 --> 00:03:06,480 Maar gewoon omdat het een microframework, niet 66 00:03:06,480 --> 00:03:08,960 betekent dat het alleen voor kleine projecten. 67 00:03:08,960 --> 00:03:12,590 Ik heb hier een link die zegt dat Obama gebruikt Fles in 2012 68 00:03:12,590 --> 00:03:14,410 voor zijn campagne website, die hopelijk, 69 00:03:14,410 --> 00:03:16,937 is iets van een goedkeuring. 70 00:03:16,937 --> 00:03:18,770 Maar het ding dat ik heel graag over Zakflesje 71 00:03:18,770 --> 00:03:22,401 dat is, is het niet echt een soort van beslissingen voor je. 72 00:03:22,401 --> 00:03:24,150 Gewoon omdat we praten over web apps, 73 00:03:24,150 --> 00:03:26,940 Ik moet het vergelijken met Ruby on Rails en Django, die beide 74 00:03:26,940 --> 00:03:30,450 zijn geweldig kaders, maar ze allebei te maken veronderstellingen 75 00:03:30,450 --> 00:03:33,600 over hoe je wilt interactie met databases, 76 00:03:33,600 --> 00:03:36,900 hoe je je presenteren uitzicht, en ze zijn zeker 77 00:03:36,900 --> 00:03:38,850 goede aspecten die. 78 00:03:38,850 --> 00:03:41,490 >> Bijvoorbeeld, Ruby on Rails heeft dit actieve record systeem, 79 00:03:41,490 --> 00:03:43,100 dat is een heel mooi manier om te communiceren met data, 80 00:03:43,100 --> 00:03:45,960 maar als je wilt Ruby te gebruiken op Rails, je bent soort van gebonden in die. 81 00:03:45,960 --> 00:03:47,835 Maar met Fles, zo zal ik je laten zien met peewee, 82 00:03:47,835 --> 00:03:49,830 kunt u gebruik maken van welke aard van de database die u wilt, 83 00:03:49,830 --> 00:03:53,980 en je kunt gewoon trek dat in als een uitbreiding in Kolf. 84 00:03:53,980 --> 00:03:56,350 >> Dus dat is waarom ik echt zoals Kolf, het is dat het 85 00:03:56,350 --> 00:04:01,170 geen aannames te maken voor u gebaseerd op de dingen die je niet echt nodig hebt. 86 00:04:01,170 --> 00:04:04,440 >> Dus, waarom zou je Kolf gebruiken? 87 00:04:04,440 --> 00:04:08,230 De voordelen zijn, het is gewoon heeft echt de kern functies 88 00:04:08,230 --> 00:04:09,420 ingebouwd dat je nodig hebt. 89 00:04:09,420 --> 00:04:11,980 Dus, hoeft u zich geen zorgen te maken over begrijpen van een hele hoop dingen 90 00:04:11,980 --> 00:04:13,175 dat je niet echt nodig hebt. 91 00:04:13,175 --> 00:04:15,060 Je hoeft niet te zorgen te maken over het uitschakelen van functies 92 00:04:15,060 --> 00:04:16,620 dat je niet echt nodig hebt. 93 00:04:16,620 --> 00:04:21,082 >> En, zoals ik al zei, het is super eenvoudig toe te voegen in de uitbreidingen van de dingen 94 00:04:21,082 --> 00:04:21,790 dat je nodig hebt. 95 00:04:21,790 --> 00:04:24,700 Sommigen van hen, Kolf heeft hun steun daarvoor. 96 00:04:24,700 --> 00:04:28,230 Dus er is iets genaamd Kolf admin, die dat admin weerspiegelt 97 00:04:28,230 --> 00:04:32,060 paneel dat Django biedt, die geeft je een mooie visuele manier 98 00:04:32,060 --> 00:04:33,405 om uw website te beheren. 99 00:04:33,405 --> 00:04:35,280 Maar nogmaals, als je het maken van iets simpels, 100 00:04:35,280 --> 00:04:39,550 je waarschijnlijk niet een grote admin nodig panel, dus ik denk dat het super leuk. 101 00:04:39,550 --> 00:04:45,940 De nadelen zijn, dat heb je minder kracht uit de doos. 102 00:04:45,940 --> 00:04:49,660 Dus, als je voor het eerst openstellen Kolf, en in uw Python-programma, 103 00:04:49,660 --> 00:04:53,150 je typt gewoon van Kolf import *, of wat dan ook, 104 00:04:53,150 --> 00:04:55,957 je weet niet precies allemaal krijgen de functies die je zou willen. 105 00:04:55,957 --> 00:04:58,540 En dus moet je meer expliciet een lijst van de functies die u wilt. 106 00:04:58,540 --> 00:05:01,990 Dus dat is een nadeel, maar ik denken dat voor het bouwen van kleine web 107 00:05:01,990 --> 00:05:04,782 apps als ik ga laten zien u, dat is niet echt een probleem. 108 00:05:04,782 --> 00:05:07,281 En wat het laatste wat is dan zeggen, dat een typo, 109 00:05:07,281 --> 00:05:10,240 is dat er minder gestandaardiseerd conventies voor hoe Kolf gebruiken, 110 00:05:10,240 --> 00:05:12,400 omdat er niet zoveel mensen die het professioneel gebruik 111 00:05:12,400 --> 00:05:13,191 vergeleken met Django. 112 00:05:13,191 --> 00:05:16,380 Dus, als je iets uitzien, "hoe kan ik x doen" in Django, 113 00:05:16,380 --> 00:05:18,190 u zult waarschijnlijk vinden. 114 00:05:18,190 --> 00:05:20,260 >> Er is een goed ontwerp patronen die u kunt gebruiken, 115 00:05:20,260 --> 00:05:22,660 maar Fles, het soort ga je eigen weg, 116 00:05:22,660 --> 00:05:24,850 gewoon omdat het een vrij kleine bibliotheek. 117 00:05:24,850 --> 00:05:27,100 Dus dat zijn de nadelen, maar ik denk dat 118 00:05:27,100 --> 00:05:29,370 dat is het nog steeds een goede bibliotheek te gebruiken. 119 00:05:29,370 --> 00:05:31,909 >> Dus laten we gewoon springen recht in Kolf. 120 00:05:31,909 --> 00:05:34,200 Dit is zeker niet van plan om een ​​complete handleiding zijn, 121 00:05:34,200 --> 00:05:37,480 maar het is om u een idee te geven hoe om dingen te structureren, 122 00:05:37,480 --> 00:05:40,790 en zo je comfortabel gaan voelen af en kijken naar de documentatie 123 00:05:40,790 --> 00:05:42,570 en het vinden van meer. 124 00:05:42,570 --> 00:05:48,500 >> Dus, laat me het openen van een echt eenvoudig voorbeeld eerst, 125 00:05:48,500 --> 00:05:50,737 en u laten zien wat dat eruit ziet, en dan zullen we 126 00:05:50,737 --> 00:05:52,070 break it down een beetje meer. 127 00:05:52,070 --> 00:05:56,160 >> Dus dit hier, laat me laten draaien. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Dus, ik heb nu mijn toepassing draait. 130 00:06:09,750 --> 00:06:15,910 Ik ga openstellen Safari, en het draait op mijn lokale gastheer. 131 00:06:15,910 --> 00:06:19,360 Dus ik ga gewoon om deze groter te maken. 132 00:06:19,360 --> 00:06:23,960 Maar localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> En dus, nu, dit alles doet is, wanneer u de website bezoekt, 134 00:06:27,650 --> 00:06:31,490 Het drukt "Hallo Fles," dat niet super nuttig, 135 00:06:31,490 --> 00:06:34,630 maar ik vind het cool dat in dit kleine bestand hier 136 00:06:34,630 --> 00:06:37,390 wij hebben een web-server draait dat wordt afgedrukt iets. 137 00:06:37,390 --> 00:06:40,500 Dus, laten we er eigenlijk uit de code voor een tweede, 138 00:06:40,500 --> 00:06:43,080 en af ​​te breken een beetje. 139 00:06:43,080 --> 00:06:45,260 Is de grootte goed voor iedereen hier? 140 00:06:45,260 --> 00:06:51,560 >> Dus, hopelijk, je bent een beetje comfortabel met Python. 141 00:06:51,560 --> 00:06:55,820 Ik ga ervan uit dat we kunnen kijken de Python en lees doorheen. 142 00:06:55,820 --> 00:06:59,290 Als u vragen heeft over iets, kan ik ook gaan over dat. 143 00:06:59,290 --> 00:07:03,974 >> Dus de eerste lijn is, van Kolf, wij importeren, Kolf met een hoofdletter "F" 144 00:07:03,974 --> 00:07:06,140 dat is een soort van de belangrijkste functies die je nodig hebt. 145 00:07:06,140 --> 00:07:08,890 Wanneer je aan het schrijven bent een bestand en gebruiken Flask, 146 00:07:08,890 --> 00:07:12,120 je gaat te willen importeren dat, gewoon omdat dat alle belangrijke dingen. 147 00:07:12,120 --> 00:07:15,400 Het volgende wat we doen, is dat we noemen deze functie Kolf, net 148 00:07:15,400 --> 00:07:19,270 een app object te maken, en je bent altijd zal dat willen doen. 149 00:07:19,270 --> 00:07:25,960 >> En dan, springen naar het bodem snel, dit deel is hier, 150 00:07:25,960 --> 00:07:28,760 'if_name == _ "_ main_' 'die soort van een Python conventie. 151 00:07:28,760 --> 00:07:32,750 Dus dit zal alleen uitvoeren als u run dit bestand direct met behulp van Python. 152 00:07:32,750 --> 00:07:36,040 Dan noemen we app.run, die zal daadwerkelijk beginnen met de app te gaan. 153 00:07:36,040 --> 00:07:39,570 >> Dus, dat is de belangrijkste structuur die je moet in elk Kolf applicatie 154 00:07:39,570 --> 00:07:48,550 is dat je dit hebt app = Kolf (_name_), en vervolgens app.run. 155 00:07:48,550 --> 00:07:54,940 >> Dus, de twee dingen die ik heb hier, zijn wat wij noemen routes. 156 00:07:54,940 --> 00:07:57,150 Dus, laten we praten over routing een beetje meer. 157 00:07:57,150 --> 00:07:58,430 Ik kom terug naar de dia gaan. 158 00:07:58,430 --> 00:08:02,540 >> Dus de meest fundamentele concept in de kolf wordt routing. 159 00:08:02,540 --> 00:08:06,750 En het is het idee dat je toewijzen functies in Python 160 00:08:06,750 --> 00:08:11,280 bijzondere adressen op uw webpagina. 161 00:08:11,280 --> 00:08:13,930 Dus, wanneer u maar wilt om een ​​nieuwe route te creëren, 162 00:08:13,930 --> 00:08:16,500 u deze @ app.route gebruiken functie decorateur. 163 00:08:16,500 --> 00:08:19,770 Dus, als je niet bekend bent met functie decorateurs in Python, 164 00:08:19,770 --> 00:08:24,160 Het is dit concept dat Hiermee kunt u een functie te nemen 165 00:08:24,160 --> 00:08:26,800 en omring het met iets anders. 166 00:08:26,800 --> 00:08:30,140 >> Dus echt, wat dit decorateur doet, is dat het de functie daaronder, 167 00:08:30,140 --> 00:08:33,409 en voegt informatie om het, maar wat eigenlijk Kolf 168 00:08:33,409 --> 00:08:37,480 maakt dat gebeurt is niet super van cruciaal belang, maar wat belangrijk is, 169 00:08:37,480 --> 00:08:43,640 is dat voordat de route u zet dit @ app.route, en vervolgens 170 00:08:43,640 --> 00:08:46,480 het adres van de route zodat de schuine streep is wat we 171 00:08:46,480 --> 00:08:48,360 zagen toen we open net op de webpagina. 172 00:08:48,360 --> 00:08:49,580 Dus dat is de homepage. 173 00:08:49,580 --> 00:08:51,037 Het is gewoon de slash route. 174 00:08:51,037 --> 00:08:52,370 En dan heb je deze functie. 175 00:08:52,370 --> 00:08:54,453 De naam van de functie kan zijn wat je wilt. 176 00:08:54,453 --> 00:08:56,930 Het hoeft niet noodzakelijk te maken met de route. 177 00:08:56,930 --> 00:08:59,440 En dan, ongeacht de functie terugkeer, 178 00:08:59,440 --> 00:09:01,730 de functie moet een string terug. 179 00:09:01,730 --> 00:09:03,740 En die string kan bevat HTML of wat dan ook, 180 00:09:03,740 --> 00:09:06,920 en dat is eigenlijk wat krijgt terug naar uw webbrowser als HTML, 181 00:09:06,920 --> 00:09:08,200 en het zal maken dat. 182 00:09:08,200 --> 00:09:12,030 >> Dus dit is dezelfde code Dat was in het voorbeeld 183 00:09:12,030 --> 00:09:16,430 dat ik net liep, dus toen we een bezoek slash, het een Hello World functie, noemt die 184 00:09:16,430 --> 00:09:20,470 maar geeft een string, Hello Kolf, en dat wordt afgedrukt op het scherm. 185 00:09:20,470 --> 00:09:27,290 >> Dus er is een ander voorbeeld, dat is, als u een bezoek / hello, 186 00:09:27,290 --> 00:09:30,370 Het drukt Hallo Woord, dat zou eigenlijk zeggen, Hello World, 187 00:09:30,370 --> 00:09:32,010 maar laten we doen alsof dat was de bedoeling. 188 00:09:32,010 --> 00:09:35,140 Dus laten we trekken dat tot echt snel. 189 00:09:35,140 --> 00:09:41,290 >> Dus als je naar localhost / hello, zal nu iets anders te drukken. 190 00:09:41,290 --> 00:09:45,680 Dus dat is gewoon een snelle voorbeeld van hoe kunt u twee verschillende routes te creëren. 191 00:09:45,680 --> 00:09:50,630 >> Dus, tot nu toe dit is niet super handig, Er is niet veel wat je kunt doen, 192 00:09:50,630 --> 00:09:55,360 je kon gewoon alles doen met met verschillende HTML pagina, 193 00:09:55,360 --> 00:09:58,000 en wanneer u een bezoek aan een bepaalde pagina het gewoon laadt de pagina. 194 00:09:58,000 --> 00:10:00,864 Dus laten we eens kijken wat meer nuttige dingen die je kunt doen. 195 00:10:00,864 --> 00:10:03,780 Dus, een ding dat je zou kunnen hebben zag in het voorbeeld dat ik trok 196 00:10:03,780 --> 00:10:07,160 up, is dat ik had app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 En ja, wat dit debug argument doet, is 198 00:10:09,580 --> 00:10:14,600 dat wanneer u uw web server te draaien, wanneer u in uw toepassing, 199 00:10:14,600 --> 00:10:18,100 Als u een bestand wijzigt, zal het de server automatisch herladen. 200 00:10:18,100 --> 00:10:21,160 >> En dus heb je eigenlijk niet hoeft te restart Python, dat is super handig. 201 00:10:21,160 --> 00:10:24,020 Ik kan zien dat. 202 00:10:24,020 --> 00:10:26,960 Laat me trek mijn code de typo erin, 203 00:10:26,960 --> 00:10:30,420 en doen alsof dat typo werd daar gezet opzet voor instructieve doeleinden. 204 00:10:30,420 --> 00:10:31,625 Dus laten we voegen deze opnieuw in. 205 00:10:31,625 --> 00:10:33,140 Dus nu het zegt Hello World. 206 00:10:33,140 --> 00:10:34,410 Ik zal het op te slaan. 207 00:10:34,410 --> 00:10:36,540 En als we pull back up de terminal, zult u 208 00:10:36,540 --> 00:10:39,520 zeggen dat het herstarten, omdat het gedetecteerde verandering, 209 00:10:39,520 --> 00:10:43,620 en zo nu wanneer we de pagina verversen, zal het printen van de juiste ding. 210 00:10:43,620 --> 00:10:45,630 >> Dus debug is super handig voor. 211 00:10:45,630 --> 00:10:48,740 Ook als u hebt soort van een crash, dus 212 00:10:48,740 --> 00:10:54,370 laat me deze applicatie crash door het hebben van het niet een string terug. 213 00:10:54,370 --> 00:10:57,540 Dus, laten we het hebben Geen terug om wat voor reden. 214 00:10:57,540 --> 00:11:00,810 En toen ik dit bezoek pagina, zal het alleen maar crashen, 215 00:11:00,810 --> 00:11:04,465 maar de server niet alleen crash, maar eigenlijk geeft je een super handig terug 216 00:11:04,465 --> 00:11:06,490 spoor van alles wat er mis ging. 217 00:11:06,490 --> 00:11:10,050 En wat is echt leuk, is dat elke stap in deze back trace, 218 00:11:10,050 --> 00:11:14,260 je zou kunnen openen een interactief shell hier, en een soort van afdrukken wat 219 00:11:14,260 --> 00:11:17,780 variabelen die je wilt een kijkje nemen. 220 00:11:17,780 --> 00:11:21,054 >> En dus debuggen is echt handig voor het uitzoeken 221 00:11:21,054 --> 00:11:23,470 wat er gebeurt met uw server, in plaats van alleen te zien 222 00:11:23,470 --> 00:11:28,201 iets in PHP als een 500 interne server error, dat is super nutteloos. 223 00:11:28,201 --> 00:11:30,700 Eén ding bewust te zijn van, is dat als je je app online 224 00:11:30,700 --> 00:11:34,260 dus het is zichtbaar voor het publiek, je nooit willen debug mode op te verlaten, 225 00:11:34,260 --> 00:11:37,320 omdat mensen kan eigenlijk gebruiken console die ik 226 00:11:37,320 --> 00:11:39,150 toonde u om willekeurige code uit te voeren. 227 00:11:39,150 --> 00:11:42,120 >> Zodat ze kunnen printen als elke geheime codes heb je daar, 228 00:11:42,120 --> 00:11:44,755 ze kunnen kijken op exact hoe uw website werkt. 229 00:11:44,755 --> 00:11:46,630 Dus het is echt handig voor het testen, maar altijd 230 00:11:46,630 --> 00:11:50,090 zorg ervoor om het eruit te halen voordat je iets online te publiceren. 231 00:11:50,090 --> 00:11:56,640 >> Dus als je met behulp van iets zoals PHP, is er dit idee 232 00:11:56,640 --> 00:11:58,920 dat u kunt doorgeven informatie tussen webpagina's 233 00:11:58,920 --> 00:12:03,620 door de invoering van de informatie daadwerkelijk in de URL, een GET verzoek 234 00:12:03,620 --> 00:12:07,490 maar in de fles, kan je eigenlijk iets wat een beetje zoals dat te doen, 235 00:12:07,490 --> 00:12:10,590 door het hebben van een route heeft een variabele als deel daarvan. 236 00:12:10,590 --> 00:12:14,090 >> Dus als je kijkt naar deze Bijvoorbeeld op het scherm hier 237 00:12:14,090 --> 00:12:19,930 we hebben een route die ('/ hallo /'), en zo, als u een bezoek 238 00:12:19,930 --> 00:12:23,790 / hallo / iets, dat er iets gaat eigenlijk gevuld 239 00:12:23,790 --> 00:12:25,490 in de naam variabele. 240 00:12:25,490 --> 00:12:27,850 En merk op dat de functie die wordt geleverd met die route 241 00:12:27,850 --> 00:12:31,302 moet nemen in de parameter te noemen, zodat het ook daadwerkelijk 242 00:12:31,302 --> 00:12:32,510 krijgen doorgegeven in de functie. 243 00:12:32,510 --> 00:12:34,190 >> En dan, als je eenmaal bent binnenzijde van die functie, 244 00:12:34,190 --> 00:12:36,420 u kunt behandelen dat als een normale Python variabele 245 00:12:36,420 --> 00:12:39,650 en zo dan, het zal uitprinten Hallo, en het 246 00:12:39,650 --> 00:12:42,000 zal in de naam in te vullen met behulp van een stukje tekst opmaak. 247 00:12:42,000 --> 00:12:48,060 >> Dus om variabele onderdelen toe te voegen aan een routing, u de hoek beugel markering gebruiken. 248 00:12:48,060 --> 00:12:51,220 En optioneel, kunt u gebruik maken wat heet een converter. 249 00:12:51,220 --> 00:12:56,840 En dus, als je dit te zetten annotatie het colon, 250 00:12:56,840 --> 00:13:00,015 kunt u opgeven dat het een int of een float, of pad, 251 00:13:00,015 --> 00:13:01,640 en het zal automatisch om te zetten dat. 252 00:13:01,640 --> 00:13:05,130 U kunt ook de conversie binnen de Python-functie, 253 00:13:05,130 --> 00:13:09,710 alleen door het gebruik van een cast, maar soms als wilt u ervoor zorgen dat het een int, 254 00:13:09,710 --> 00:13:12,080 kun je dat zetten conversieregel daar. 255 00:13:12,080 --> 00:13:15,930 >> Dus laten we trekken een voorbeeld van enkele variabele regels. 256 00:13:15,930 --> 00:13:21,480 Dus hier, deze heeft dezelfde structuur met de import van Fles 257 00:13:21,480 --> 00:13:25,030 Fles, de app = kolf (_name_), en dan is het lopen op het einde. 258 00:13:25,030 --> 00:13:28,050 We hebben deze twee verschillende variabele routes hier. 259 00:13:28,050 --> 00:13:29,900 En de eerste, is degene die ik liet zien 260 00:13:29,900 --> 00:13:34,230 in de slede, namelijk dat het duurt slechts in een string naam 261 00:13:34,230 --> 00:13:35,650 en het zal uitprinten Hallo, Naam. 262 00:13:35,650 --> 00:13:41,410 >> En dan, de tweede gebruikt men de conversie. 263 00:13:41,410 --> 00:13:44,690 Dus dit zal automatisch omzetten naar een int, en dan het dubbele van de int, 264 00:13:44,690 --> 00:13:46,150 en print dat uit. 265 00:13:46,150 --> 00:13:48,220 En, we hebben geen soort doen conversie daarbinnen 266 00:13:48,220 --> 00:13:49,594 omdat Kolf zorgt dat. 267 00:13:49,594 --> 00:13:53,181 Dus laten we dit lopen. 268 00:13:53,181 --> 00:13:54,930 Wanneer u een Fles toepassing actief is, 269 00:13:54,930 --> 00:13:58,440 U kunt bepalen-C uit het om de server draaiende te stoppen. 270 00:13:58,440 --> 00:14:02,420 En dan zal ik de variabelen uit te voeren. 271 00:14:02,420 --> 00:14:11,740 >> Dus laten we naar localhost / hallo / ezra en Hopelijk zal dit zeg hallo tegen me. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Dus het duurde in mijn naam in de variabele route, en het vulde het hier. 274 00:14:20,310 --> 00:14:23,950 Dus ik zal ook laten zien een snelle voorbeeld van de verdubbeling. 275 00:14:23,950 --> 00:14:28,600 Dus als je naar / double / 3, het zal uit 6 drukken. 276 00:14:28,600 --> 00:14:31,440 Dus nam deze zorg de conversie voor ons. 277 00:14:31,440 --> 00:14:34,190 >> Dus je kunt het ook doen met vlotter, en iets speciaals, 278 00:14:34,190 --> 00:14:37,530 als je nodig hebt om iets te specificeren een pad, waarmee het te accepteren slashes, 279 00:14:37,530 --> 00:14:39,155 maar dat hoeft meestal niet een probleem zijn. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Tot nu toe hebben we, nog steeds net terug 282 00:14:43,820 --> 00:14:46,320 strings, wat niet erg interessant. 283 00:14:46,320 --> 00:14:48,730 >> We zouden eigenlijk terug letterlijke HTML string. 284 00:14:48,730 --> 00:14:54,322 Dus in de code kunnen we iets invoegen zoals de b-label om het vet te maken, 285 00:14:54,322 --> 00:14:56,030 maar de meeste van de tijd die u eigenlijk niet willen 286 00:14:56,030 --> 00:14:58,420 te schrijven van HTML-code in de Python-code. 287 00:14:58,420 --> 00:15:01,940 Het echt rommelig, en het is niet een goede tijd. 288 00:15:01,940 --> 00:15:06,430 >> Kolf staat ons te scheiden van het HTML in wat er de Template genoemd, 289 00:15:06,430 --> 00:15:09,467 en dus als je denkt in termen van de MVC model 290 00:15:09,467 --> 00:15:11,550 dat u bekend bent met, hopelijk, van het werken 291 00:15:11,550 --> 00:15:15,520 met CS50 Finance een beetje, U kunt denken aan de Python-bestanden 292 00:15:15,520 --> 00:15:19,430 als meer van de controller, waarbij ze zijn interactie met wat 293 00:15:19,430 --> 00:15:20,970 datamodel u zou kunnen hebben. 294 00:15:20,970 --> 00:15:24,900 >> En dan worden ze roepen om Bekeken en het doorgeven van informatie aan die View 295 00:15:24,900 --> 00:15:28,120 de gegevens in te vullen in HTML die het nodig heeft. 296 00:15:28,120 --> 00:15:30,490 En wat wij noemen die Bekeken zijn Templates in de klas. 297 00:15:30,490 --> 00:15:35,280 >> Dus Kolf gebruikt een andere Python module die het zal automatisch 298 00:15:35,280 --> 00:15:38,620 installeren wanneer u pip installeren Kolf genaamd Jinja, die 299 00:15:38,620 --> 00:15:40,885 laat u deze toevoegen annotaties bij het HTML 300 00:15:40,885 --> 00:15:45,140 die je ziet op het scherm, waarmee u in zaken als voorwaardelijke, 301 00:15:45,140 --> 00:15:47,230 en lussen in de HTML. 302 00:15:47,230 --> 00:15:51,140 >> Dus het ziet er een beetje zoals hoe je zou kunnen gebruiken van PHP in een HTML-bestand, 303 00:15:51,140 --> 00:15:57,380 maar dit is net als de Fles server serveert het HTML-bestand, 304 00:15:57,380 --> 00:16:01,610 het zal dit templating engine draaien en ontleden door middel van deze en vul dingen. 305 00:16:01,610 --> 00:16:06,650 Dus Kolf heeft een render_template functie dat u hier op de bodem kunt zien. 306 00:16:06,650 --> 00:16:14,300 En dus als je deze pagina bezoekt, zou dit hello.html Template maken, 307 00:16:14,300 --> 00:16:16,407 en vervolgens in deze HTML pagina te vullen. 308 00:16:16,407 --> 00:16:18,990 Dus laten we gewoon lopen deze echte snel, en zien hoe het eruit ziet, 309 00:16:18,990 --> 00:16:21,198 en dan ga ik door een beetje meer in detail. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Dus, je sjablonen gaan te gaan in een map Sjablonen. 312 00:16:30,260 --> 00:16:33,980 Het zal automatisch binnen het kijken De map templates voor die sjabloon. 313 00:16:33,980 --> 00:16:35,615 Dus laten we open deze omhoog. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Dus, ik zal de Templating voorbeeld draaien. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Dus als ik naar / hallo / ezra, het heeft deze afschuwelijke, 318 00:17:03,660 --> 00:17:05,930 onaangenaam marquee tag die ik in. 319 00:17:05,930 --> 00:17:08,050 Zeer mooi, zeer dynamisch. 320 00:17:08,050 --> 00:17:09,349 Ik ben een grote fan. 321 00:17:09,349 --> 00:17:13,900 Maar wat gebeurt er als Ik ga gewoon naar, / hallo? 322 00:17:13,900 --> 00:17:15,220 Dus zegt het enkel Hello World. 323 00:17:15,220 --> 00:17:17,678 Ik had het niet door een naam, en Het vulde het automatisch. 324 00:17:17,678 --> 00:17:22,050 Dus laten we zien hoe het dat deed, en hoe we kunnen misschien ontdoen van die tent te krijgen. 325 00:17:22,050 --> 00:17:26,240 >> Dus hier, dit is een soort van een interessant voorbeeld van, 326 00:17:26,240 --> 00:17:29,101 als je bekend bent met de manier waarop zijn schakelaar statements werken in een taal. 327 00:17:29,101 --> 00:17:31,350 Zeggen dat dit soort als, dat soort van een val door, 328 00:17:31,350 --> 00:17:34,266 waar u eigenlijk gehecht twee verschillende routes naar dezelfde functie. 329 00:17:34,266 --> 00:17:41,190 Dus hebben we de / hello route bevestigen en de / hallo / naam van de route naar Hello, 330 00:17:41,190 --> 00:17:45,130 en we specificeren using-- Python kunt u specificeren standaardfunctie arguments-- 331 00:17:45,130 --> 00:17:48,300 dus als er geen naam, zodat als we naar net / hello, 332 00:17:48,300 --> 00:17:50,680 het zal automatisch filteren naam gelijk is aan n. 333 00:17:50,680 --> 00:17:55,010 >> Zo dan, maken we het Sjabloon met name = naam, 334 00:17:55,010 --> 00:17:59,510 dus het zal pas in de parameter naam gelijk aan deze naam functie parameter, 335 00:17:59,510 --> 00:18:00,730 in de Template. 336 00:18:00,730 --> 00:18:04,040 Dat betekent nog steeds niet uitleggen hoe is de beslissing om Hello World te drukken, 337 00:18:04,040 --> 00:18:05,100 of afdrukken mijn naam. 338 00:18:05,100 --> 00:18:08,050 Dus laten we er eigenlijk uit in de Template zelf, 339 00:18:08,050 --> 00:18:11,610 en zien waar dat vandaan komt. 340 00:18:11,610 --> 00:18:18,680 >> Dus, in deze Template, we eigenlijk sommige conditionele logica, 341 00:18:18,680 --> 00:18:20,580 die sommige mensen zouden argumenteren, je eigenlijk 342 00:18:20,580 --> 00:18:23,730 zou niet veel van voorwaardelijke logica binnen uw Template zelf. 343 00:18:23,730 --> 00:18:26,310 Het moet meer zijn binnen de Controller, maar voor dit voorbeeld 344 00:18:26,310 --> 00:18:27,476 het is iets wat vrij klein. 345 00:18:27,476 --> 00:18:31,060 Dus hier, we controleren, als de naam, dus Als de naam niet gelijk is aan Geen, 346 00:18:31,060 --> 00:18:33,130 Als een naam is eigenlijk doorgegeven in, dan zullen we 347 00:18:33,130 --> 00:18:36,210 zeggen hello, naam met de header en de tent, 348 00:18:36,210 --> 00:18:41,490 dit alles normaal HTML, anders zullen we printen Hello, World gewoon normaal. 349 00:18:41,490 --> 00:18:45,820 Dus een paar dingen te merken over hoe je de template te formatteren, 350 00:18:45,820 --> 00:18:49,110 is dat al deze voorwaardelijke verklaringen, 351 00:18:49,110 --> 00:18:54,475 een beetje als hoe we PHP toen je wilt wat PHP te voegen, 352 00:18:54,475 --> 00:18:58,380 je de minder-dan gebruiken vraag merk, het is een soort van analoge hier 353 00:18:58,380 --> 00:19:00,140 met de {%. 354 00:19:00,140 --> 00:19:02,130 >> Dus hier hebben we onze voorwaardelijke code. 355 00:19:02,130 --> 00:19:05,920 En dan, als je eigenlijk wilt letterlijk iets te evalueren, en afdrukken 356 00:19:05,920 --> 00:19:08,710 het uit op het scherm, u gebruik maken van de dubbele beugels. 357 00:19:08,710 --> 00:19:12,310 Dus hier zijn de dubbele bretels, en dan opgeven we, 358 00:19:12,310 --> 00:19:15,500 zodat daarbinnen zal evalueren de variabele, waarbij 359 00:19:15,500 --> 00:19:18,860 werd in de rendertemplate functie, 360 00:19:18,860 --> 00:19:21,484 in plaats van alleen afdrukken out, als we verlost van deze, 361 00:19:21,484 --> 00:19:23,150 het zou gewoon uitprinten het woord "naam." 362 00:19:23,150 --> 00:19:26,340 Zo, dat is iets om op te letten. 363 00:19:26,340 --> 00:19:29,792 >> Zo een ander ding om kennisgeving is dat, wanneer we 364 00:19:29,792 --> 00:19:31,500 willen het gebruiken render_template functie, 365 00:19:31,500 --> 00:19:34,490 we eigenlijk moeten importeren uitdrukkelijk van Kolf. 366 00:19:34,490 --> 00:19:36,915 Dit is een voorbeeld van de modulariteit van Kolf, 367 00:19:36,915 --> 00:19:39,290 dat je niet hoeft te importeren dingen die je niet nodig hebt. 368 00:19:39,290 --> 00:19:41,290 Je kunt gewoon te brengen in de functies die u eigenlijk 369 00:19:41,290 --> 00:19:43,450 nodig hebben, wat soms leuk, dus je niet 370 00:19:43,450 --> 00:19:46,560 moeten al deze functies zitten rond die je niet gebruikt, 371 00:19:46,560 --> 00:19:49,730 maar ook, als je dat je vergeet moeten render_template importeren 372 00:19:49,730 --> 00:19:52,660 zult u waarschijnlijk een waarschuwing dat zal u laten weten. 373 00:19:52,660 --> 00:19:56,700 Zo, dat is templates. 374 00:19:56,700 --> 00:20:01,680 >> Dus, hebben we laten zien hoe maken eenvoudige webpagina's, 375 00:20:01,680 --> 00:20:04,947 en voeg een beetje meer logica het, wat betreft de variabele routing. 376 00:20:04,947 --> 00:20:08,280 Het laat je verschillende dingen gebaseerd op wat URL u dan naar, en ook geven 377 00:20:08,280 --> 00:20:11,950 de HTML een beetje meer zin in termen van hoe je dingen wilt maken. 378 00:20:11,950 --> 00:20:14,210 Je hoeft niet alles te zetten HTML in uw Python, 379 00:20:14,210 --> 00:20:16,640 maar voor vrijwel elke webapplicatie, 380 00:20:16,640 --> 00:20:21,480 je gaat om een ​​soort wilt van datamodel gekoppeld. 381 00:20:21,480 --> 00:20:25,560 >> En zo traditioneel, zou dit iets als een SQL-database. 382 00:20:25,560 --> 00:20:30,280 En je kunt gewoon communiceren rechtstreeks met SQL. 383 00:20:30,280 --> 00:20:32,190 Python heeft, denk ik dat het heet. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Je kunt gewoon importeren SQLite 3 en uitvoeren van SQL-queries direct, 386 00:20:38,454 --> 00:20:40,870 maar ik weet niet over u, maar ik echt niet graag, enkel, 387 00:20:40,870 --> 00:20:42,750 het schrijven van SQL queries. 388 00:20:42,750 --> 00:20:45,350 Het heeft de neiging om echt lang en gecompliceerd. 389 00:20:45,350 --> 00:20:49,180 >> En dus, iets dat Ik graag gebruik is wat 390 00:20:49,180 --> 00:20:53,610 bekend als een ORM, dat een object-relational mapping. 391 00:20:53,610 --> 00:20:56,890 En het punt van een object-relational mapping, 392 00:20:56,890 --> 00:21:00,100 is dat er twee verschillende manieren waarop je kunt bedenken over databases. 393 00:21:00,100 --> 00:21:03,240 >> Zodat het voorbeeld dat Professor Malan meestal 394 00:21:03,240 --> 00:21:07,660 gebruikt in de klas, is de Excel-tabel, waarin u deze rijen en deze kolommen, 395 00:21:07,660 --> 00:21:10,210 en dat is echt handig voor hoe het wordt weergegeven in SQL 396 00:21:10,210 --> 00:21:13,170 en hoe je interactie met het, maar een andere manier dat het eigenlijk 397 00:21:13,170 --> 00:21:16,390 handig om soms denken, is in termen van klassen en objecten. 398 00:21:16,390 --> 00:21:20,420 >> Dus in plaats van te denken elke tabel als hebbende 399 00:21:20,420 --> 00:21:23,040 deze rij dat bepaalde heeft informatie, kun je eigenlijk 400 00:21:23,040 --> 00:21:26,100 denk aan het als elke tafel is een klasse, 401 00:21:26,100 --> 00:21:29,810 en dan elke instantie van de klasse heeft bepaalde eigenschappen. 402 00:21:29,810 --> 00:21:35,110 Dus, in dit voorbeeld, de gevallen van de klasse zijn de rijen in de tabel, 403 00:21:35,110 --> 00:21:37,490 en dan elke woning zou is een kolom in de tabel. 404 00:21:37,490 --> 00:21:40,840 >> Dus de ORM dat ik graag te gebruiken wordt peewee genoemd. 405 00:21:40,840 --> 00:21:43,520 Het is erg klein, een beetje als Kolf. 406 00:21:43,520 --> 00:21:46,760 Ik denk dat ze gaan goed samen, maar er zijn een heleboel andere ORM 407 00:21:46,760 --> 00:21:47,730 die u kunt gebruiken. 408 00:21:47,730 --> 00:21:52,180 Een meer populaire is bekend als SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 en ik kan niet waarom ik oorspronkelijk herinner koos peewee dan SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 of ik zou je waarom ik zeg denk dat het het beste is, 411 00:21:58,311 --> 00:22:01,060 maar we gaan gewoon om dit te gebruiken één omdat ik weet hoe het te gebruiken. 412 00:22:01,060 --> 00:22:04,760 >> Dus, een vraag is, waarom moet je moeite met behulp van een ORM, 413 00:22:04,760 --> 00:22:07,552 in plaats van alleen direct het schrijven van SQL-query's? 414 00:22:07,552 --> 00:22:09,760 En ik denk dat het beste geval, is dat je eigenlijk niet 415 00:22:09,760 --> 00:22:11,356 hebben om SQL queries te schrijven. 416 00:22:11,356 --> 00:22:14,480 Het is veel gemakkelijker, want ik zal je laten zien, om dingen te doen, zoals selectie, insertie 417 00:22:14,480 --> 00:22:16,157 deletie, vooral maken van tabellen. 418 00:22:16,157 --> 00:22:17,990 Het is veel makkelijker om schrijf een klasse structuur, 419 00:22:17,990 --> 00:22:22,250 dan het is om een ​​structuur creëren Tafel verklaring, maar een ding 420 00:22:22,250 --> 00:22:25,710 te weten, dat de ORM zal proberen haar best 421 00:22:25,710 --> 00:22:28,640 om erachter te komen wat de meest efficiënte SQL-query zou zijn, 422 00:22:28,640 --> 00:22:30,110 maar soms krijgt het verkeerd. 423 00:22:30,110 --> 00:22:32,660 >> En vooral als je het werken met een grote database 424 00:22:32,660 --> 00:22:35,557 U kunt merken dat een query die moeten snel worden uitgevoerd, 425 00:22:35,557 --> 00:22:36,640 is eigenlijk meer nemen. 426 00:22:36,640 --> 00:22:40,164 En als je kijkt onder de motorkap hoe de ORM interpreteert dat in SQL, 427 00:22:40,164 --> 00:22:42,080 het zou iets moeten doen echt belachelijk, 428 00:22:42,080 --> 00:22:44,371 alleen omdat het soort gebaarde uw bedoelingen verkeerd. 429 00:22:44,371 --> 00:22:48,080 En er momenten waar zijn geweest Ik heb gehad om het te negeren, en gewoon 430 00:22:48,080 --> 00:22:52,429 uitvoeren van mijn eigen SQL queries, net want het was het ontleden in een vreemde manier. 431 00:22:52,429 --> 00:22:54,220 Er is dus enige overhead, net op de weg 432 00:22:54,220 --> 00:22:58,680 dat stelt uw statements beneden in SQL. 433 00:22:58,680 --> 00:23:06,200 >> Dus, laten we eens kijken super snel op een eenvoudig voorbeeld van een gegevensmodel 434 00:23:06,200 --> 00:23:07,350 dat je zou kunnen gebruiken. 435 00:23:07,350 --> 00:23:11,880 Dus, dit is Python-code, en dus de eerste wat je wilt doen is uit 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Dus, in tegenstelling tot Kolf, waar je al deze afzonderlijke modules, 438 00:23:15,850 --> 00:23:18,125 en u wilt Kolf importeren en schrijf een sjabloon, en enkele anderen 439 00:23:18,125 --> 00:23:20,690 dat we later zullen zien, van peewee, u kunt gewoon alles importeren, 440 00:23:20,690 --> 00:23:22,290 want het is een vrij kleine bibliotheek. 441 00:23:22,290 --> 00:23:26,490 >> Dus, het eerste wat je wilt doen, is eigenlijk maken deze database-object. 442 00:23:26,490 --> 00:23:31,212 Dus, heb je db = SqliteDatabase, en dan de naam van uw database. 443 00:23:31,212 --> 00:23:33,170 En dit ook daadwerkelijk het creëren van een database-object 444 00:23:33,170 --> 00:23:36,230 dat je kunt communiceren met, met peewee. 445 00:23:36,230 --> 00:23:40,570 >> En dan hebben we de eigenlijke model dat we willen creëren. 446 00:23:40,570 --> 00:23:42,470 Dus de tafel we willen creëren. 447 00:23:42,470 --> 00:23:47,270 Dus, binnen peewee, elke klas heeft haar eigen tafel in uw database. 448 00:23:47,270 --> 00:23:52,800 Dus, alle klassen erven van het basismodel, 449 00:23:52,800 --> 00:23:55,960 en de hoofdstad M model iets dat gedefinieerd in peewee. 450 00:23:55,960 --> 00:24:02,162 >> Dus, al uw modellen moeten erven als hun hoogste superklasse, 451 00:24:02,162 --> 00:24:04,620 zij moeten erven van de model, maar wat is echt cool, 452 00:24:04,620 --> 00:24:07,610 is dat je daadwerkelijk kunt uw modellen erven van elkaar. 453 00:24:07,610 --> 00:24:10,530 En een groot deel van de tijd, uw datamodellen niet noodzakelijkerwijs 454 00:24:10,530 --> 00:24:13,754 maak een mooie erfenis hiërarchie, maar tijden waarin ze dat doen, het is echt leuk, 455 00:24:13,754 --> 00:24:15,920 omdat je het model inherent van elkaar. 456 00:24:15,920 --> 00:24:19,710 >> Dus, we deze klasse gedefinieerd 'student', die een model erft, 457 00:24:19,710 --> 00:24:21,170 en het heeft drie eigenschappen. 458 00:24:21,170 --> 00:24:24,080 Het heeft een ID, dat is een PrimaryKeyField, die 459 00:24:24,080 --> 00:24:26,920 is iets dat voorzien door peewee, de naam is een Charfield, 460 00:24:26,920 --> 00:24:28,490 en een cijfer is een IntegerField. 461 00:24:28,490 --> 00:24:32,260 Dus kan of niet kan hoe CS50 eigenlijk slaat alle 462 00:24:32,260 --> 00:24:33,650 kwaliteiten van de studenten. 463 00:24:33,650 --> 00:24:36,060 Is het niet, maar dit is hoe ik het zou doen. 464 00:24:36,060 --> 00:24:37,920 >> En dan heeft binnen deze klasse, en dit 465 00:24:37,920 --> 00:24:41,620 is iets wat je kunt doen met Python, kunt u geneste klassen. 466 00:24:41,620 --> 00:24:43,920 En dit is iets dat is vereist door peewee. 467 00:24:43,920 --> 00:24:47,250 Dus, deze klasse Meta, je hebt om aan te geven dat de database 468 00:24:47,250 --> 00:24:49,830 gelijk aan het object dat we hierboven gemaakt. 469 00:24:49,830 --> 00:24:54,339 En dat zegt wat bestand is deze tabel daadwerkelijk zal worden opgenomen in. 470 00:24:54,339 --> 00:24:57,130 Dus dit is iets dat je hebt te doen op al uw modellen. 471 00:24:57,130 --> 00:24:59,380 Je hoeft alleen maar aan te geven binnen deze Meta klasse 472 00:24:59,380 --> 00:25:01,400 die database is gelijk aan db. 473 00:25:01,400 --> 00:25:03,940 Dus wat ik meestal doe, als ik een aantal verschillende modellen, 474 00:25:03,940 --> 00:25:05,910 is dat ik een base model, dat ik meestal 475 00:25:05,910 --> 00:25:08,839 gewoon bellen "basismodel" dat heeft de Meta klasse, 476 00:25:08,839 --> 00:25:10,380 en het zet de gegevensbank gelijk db. 477 00:25:10,380 --> 00:25:13,710 En dan al mijn latere modellen zullen erven van die basisklasse. 478 00:25:13,710 --> 00:25:16,760 En dan heb ik geen zorgen te maken over het instellen van de Meta klasse. 479 00:25:16,760 --> 00:25:21,490 >> Dus, als dit ook daadwerkelijk krijgt gecompileerd naar beneden in een SQL-instructie, 480 00:25:21,490 --> 00:25:24,875 het lijkt erop dat deze smerige ding neer hier, "Creëer tafel student ID integer, 481 00:25:24,875 --> 00:25:26,020 " boeiend. 482 00:25:26,020 --> 00:25:30,002 >> En, ik denk dat het is korter, Deze SQL-query hier, 483 00:25:30,002 --> 00:25:32,960 maar als je kijkt naar deze klasse hier kunt u precies zien wat er gaande is. 484 00:25:32,960 --> 00:25:36,116 U kunt wat voor soort velden te zien er zijn, wat ze zijn genoemd, 485 00:25:36,116 --> 00:25:38,115 en zo, denk ik dat kijken naar deze Python-code 486 00:25:38,115 --> 00:25:43,340 is veel beter leesbaar dan proberen om deze SQL-query te schrijven. 487 00:25:43,340 --> 00:25:45,990 >> Dus, om daadwerkelijk Gebruik de database 488 00:25:45,990 --> 00:25:48,470 we hebben om verbinding te maken met het binnen Python. 489 00:25:48,470 --> 00:25:52,770 Dus, ik schrijf meestal een functie genaamd initialize_db dat twee dingen doet. 490 00:25:52,770 --> 00:25:54,880 Het neemt in de database db object en het 491 00:25:54,880 --> 00:25:58,360 verbinding maakt, die net opent omhoogtreksectie de database. 492 00:25:58,360 --> 00:26:00,860 Als je gewoon loopt al website op uw lokale computer, 493 00:26:00,860 --> 00:26:04,320 het is niet een super big deal te maken over het aansluiten en loskoppelen, 494 00:26:04,320 --> 00:26:06,885 maar als u werkt het op een website, 495 00:26:06,885 --> 00:26:10,010 wilt u ervoor zorgen dat, wanneer een gebruiker verbindt met het, wanneer ze sluiten uit 496 00:26:10,010 --> 00:26:12,270 de website, zij verbreken zodat u niet een heleboel mensen aangesloten hebben 497 00:26:12,270 --> 00:26:14,480 om uw database in een keer. 498 00:26:14,480 --> 00:26:16,370 >> En dan, als je verbinding met de database, 499 00:26:16,370 --> 00:26:20,832 u wilt bellen db.create_tables, en een lijst van de modellen voor wat je wilt 500 00:26:20,832 --> 00:26:21,540 om tabellen te maken. 501 00:26:21,540 --> 00:26:23,950 Dus hier, ik wil gewoon maken het voor deze leerling. 502 00:26:23,950 --> 00:26:28,070 En dan, wat belangrijk is, is om specificeren veilig = True meeste tijd. 503 00:26:28,070 --> 00:26:30,380 Dus wat deze uitspraak doet, is dat het 504 00:26:30,380 --> 00:26:33,580 tafels creëert voor student model, maar alleen 505 00:26:33,580 --> 00:26:36,109 als dat tafel heeft niet zijn al gemaakt. 506 00:26:36,109 --> 00:26:37,400 Dat is wat de veilige specificeert. 507 00:26:37,400 --> 00:26:39,150 Dus het zal niet overschrijven uw bestaande tafel, 508 00:26:39,150 --> 00:26:41,525 het zal alleen maar leiden tot een nieuwe tafel als er niet één daar. 509 00:26:41,525 --> 00:26:45,090 Dus, kun je gewoon maken tabellen keer met SQL. 510 00:26:45,090 --> 00:26:49,410 En dan die database zitten daar, en vervolgens aan te sluiten op elke keer, 511 00:26:49,410 --> 00:26:52,450 maar het is meestal gewoon leuk om zet in dit create_tables oproep, 512 00:26:52,450 --> 00:26:55,550 zodat, als je ooit verwijderen van uw database als u uw web-run 513 00:26:55,550 --> 00:26:57,960 app weer, zal het opnieuw. 514 00:26:57,960 --> 00:27:00,730 >> Dus, gewoon ervoor zorgen dat veilig gespecificeerd waar te zijn, 515 00:27:00,730 --> 00:27:03,580 of u zult uw gegevens gewoon vinden krijgen pan gehakt elke keer. 516 00:27:03,580 --> 00:27:06,380 En dan kun je gewoon bellen initialize_db vaststellen 517 00:27:06,380 --> 00:27:09,820 een verbinding, en maak tafels als nodig. 518 00:27:09,820 --> 00:27:13,150 >> Dus, de meest voorkomende ding dat u wilt doen, 519 00:27:13,150 --> 00:27:15,920 of één van de meest voorkomende dingen, is om daadwerkelijk in te voegen dingen 520 00:27:15,920 --> 00:27:17,170 in uw database. 521 00:27:17,170 --> 00:27:19,430 Dus, in plaats van een insert schrijven INTO 522 00:27:19,430 --> 00:27:21,990 verklaring met alle de opgegeven waarden, 523 00:27:21,990 --> 00:27:24,650 je kunt eigenlijk bellen functie op de leerling de klas. 524 00:27:24,650 --> 00:27:28,200 Dus, als je een klasse te maken die erft van model, 525 00:27:28,200 --> 00:27:30,200 het heeft dit te maken methode. 526 00:27:30,200 --> 00:27:33,870 >> Dus, je klasse name.create doen, en u de parameters opgeven 527 00:27:33,870 --> 00:27:35,260 die u wilt passeren. 528 00:27:35,260 --> 00:27:39,200 Dus, als ik wil een aantal studenten toe te voegen onze CS50 klas boek voorbeeld, 529 00:27:39,200 --> 00:27:41,820 Ik zal in David te zetten, die een zeer goed cijfer, heeft hij een 95. 530 00:27:41,820 --> 00:27:45,100 En ikzelf, die het niet doet zo goed in CS50, ik heb een 50. 531 00:27:45,100 --> 00:27:47,600 En ja, het leuke wat dit te creëren functie doet, 532 00:27:47,600 --> 00:27:53,040 is dat het terugkeert het subsysteem, of rij, die het heeft aangemaakt in de tabel, 533 00:27:53,040 --> 00:27:55,750 en zo dan dat in een winkel je variabele, en later werken. 534 00:27:55,750 --> 00:27:58,830 U kunt rond veranderen, wat Ik zal een voorbeeld laten zien. 535 00:27:58,830 --> 00:28:03,050 >> Merk op dat ik niet hebben om de ID te geven, 536 00:28:03,050 --> 00:28:09,340 omdat aangezien het de PrimaryKeyField, zal het automatisch 537 00:28:09,340 --> 00:28:10,930 verhogen als je niet opgeeft het. 538 00:28:10,930 --> 00:28:12,250 En, in feite, heeft u waarschijnlijk moet niet opgeven het, 539 00:28:12,250 --> 00:28:14,810 omdat je misschien per ongeluk afranselen andermans ID. 540 00:28:14,810 --> 00:28:16,830 En u wilt maken ervoor dat het uniek is. 541 00:28:16,830 --> 00:28:20,662 >> Dus, in feite, de voorkomende wat je wilt doen, 542 00:28:20,662 --> 00:28:22,620 is waarschijnlijk kiezen uit van de database als je eenmaal 543 00:28:22,620 --> 00:28:24,078 hebben veel informatie in. 544 00:28:24,078 --> 00:28:27,360 En dus, als je alles wilt krijgen, dus het equivalent van de selecte ster 545 00:28:27,360 --> 00:28:30,940 van studenten verklaring, is het zou gewoon student.select. 546 00:28:30,940 --> 00:28:34,380 En dat geeft je weer een array met alle student objecten erin 547 00:28:34,380 --> 00:28:35,770 dat u herhalen over je heen wilt. 548 00:28:35,770 --> 00:28:37,019 Je kunt dingen uit te halen. 549 00:28:37,019 --> 00:28:39,310 En de meeste van de tijd, je willen niet alleen selecteert u om te doen, 550 00:28:39,310 --> 00:28:40,935 je echt iets wilt opgeven. 551 00:28:40,935 --> 00:28:44,580 En ja, kunt u keten Samen vormen deze functie oproepen, 552 00:28:44,580 --> 00:28:48,830 zoals hoe je zou keten samen de verklaringen in SQL. 553 00:28:48,830 --> 00:28:53,002 Dus je kunt student.select doen ()., Waar in dit voorbeeld. 554 00:28:53,002 --> 00:28:54,710 En dan kunt u geef de voorwaarden, 555 00:28:54,710 --> 00:28:57,880 alleen met behulp van een normale Python Booleans om dingen te controleren. 556 00:28:57,880 --> 00:29:02,110 >> Dus, in dit geval, je wilt beperken wat je selecteren om, 557 00:29:02,110 --> 00:29:06,790 waarbij student.grade is gelijk aan 50, en student.name is gelijk aan Ezra, 558 00:29:06,790 --> 00:29:09,130 dus dat zal gewoon me uit. 559 00:29:09,130 --> 00:29:11,340 En merk, een echt subtiele hier is 560 00:29:11,340 --> 00:29:15,570 dat, als je wilt opgeven een en / of een of en / of, 561 00:29:15,570 --> 00:29:19,840 in Python, zou u normaal gebruikt, Ik denk dat het woord "en" in feite, 562 00:29:19,840 --> 00:29:23,351 maar hier het enige teken te gebruiken, dat normaal een bitsgewijze operator, 563 00:29:23,351 --> 00:29:25,600 maar in dit bijzondere geval, alleen de manier waarop peewee doet, 564 00:29:25,600 --> 00:29:27,660 de enige gebruiken ampersand aan te geven "en." 565 00:29:27,660 --> 00:29:29,451 Dat is iets dat Ik word omhoog gemengd veel, 566 00:29:29,451 --> 00:29:32,530 maar het is niet komen die veel in de praktijk. 567 00:29:32,530 --> 00:29:36,350 >> En dan, als je eenmaal hebt al De studenten uit de databank, 568 00:29:36,350 --> 00:29:39,420 als je eenmaal hebt gedaan kun select bent en uw kleding of wat dan ook, 569 00:29:39,420 --> 00:29:42,334 kunt u een foreach lus, net als normaal in Python, 570 00:29:42,334 --> 00:29:44,500 met een soort van iterator of met een soort van matrix. 571 00:29:44,500 --> 00:29:46,333 Dus je kunt doen, want s in student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), en dus zal dit itereren over elke student in de tabel 573 00:29:52,930 --> 00:29:56,260 waarvan de kwaliteit is minder dan 75, die in dit geval, is nog steeds aan mij. 574 00:29:56,260 --> 00:29:59,218 En dan kon je iets doet binnen dat lus, net stuur me een e-mail 575 00:29:59,218 --> 00:30:01,680 en vertel me om daadwerkelijk draaien in mijn probleem Sets. 576 00:30:01,680 --> 00:30:04,550 >> Dus, een ander ding dat je kunt te doen, is het is echt gemakkelijk 577 00:30:04,550 --> 00:30:06,460 rijen in de tabel bij te werken. 578 00:30:06,460 --> 00:30:08,720 Dus vergeet niet hier terug, je wanneer ik gestoken, 579 00:30:08,720 --> 00:30:11,440 Ik nam de waarde die was geretourneerd door student.create, 580 00:30:11,440 --> 00:30:14,920 en ik toegewezen aan de naam genoemd Ezra. 581 00:30:14,920 --> 00:30:18,995 En nu, kunt u het veranderen waarden binnen dat geval 582 00:30:18,995 --> 00:30:20,870 net zoals je zou een normale klasse in Python. 583 00:30:20,870 --> 00:30:25,060 >> Dus u kunt instellen ezra.grade = 95 en dat de lokale kopie werken, 584 00:30:25,060 --> 00:30:28,380 maar als je echt wilt verplichten die verandering aan de database, 585 00:30:28,380 --> 00:30:31,410 je moet ezra.save bellen, zodat u de .save methode genaamd 586 00:30:31,410 --> 00:30:32,650 voor het subsysteem. 587 00:30:32,650 --> 00:30:38,085 >> En nu, heb ik met succes veranderd Mijn eigen klas in de database. 588 00:30:38,085 --> 00:30:41,210 Dus, laten we dan zeggen dat ik gepakt het veranderen van mijn klas in de database. 589 00:30:41,210 --> 00:30:44,126 Professor Malan is waarschijnlijk te willen me uit de klas te verwijderen, 590 00:30:44,126 --> 00:30:48,630 en zo kunt u de .delete bellen Zo methode gewoon op dat ding. 591 00:30:48,630 --> 00:30:51,674 >> Dus, als je wilde gaan terug in deze lus hier 592 00:30:51,674 --> 00:30:53,465 en eigenlijk plaats van het verzenden van e-mails alle 593 00:30:53,465 --> 00:30:56,577 van de studenten wier graad minder dan 75, je wilde om ze te verwijderen, 594 00:30:56,577 --> 00:30:58,660 binnen deze lus je kon noemen s.delete bijvoorbeeld. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 En het laatste wat je wilt doen, is wanneer je een verbinding tot stand, 597 00:31:07,780 --> 00:31:10,350 en je klaar bent met je werk, u wilt bellen db.close, 598 00:31:10,350 --> 00:31:13,190 waar de db is dat de database tegenwerpen dat we eerder hadden. 599 00:31:13,190 --> 00:31:18,290 En wilt u ervoor zorgen dat alles wordt gesloten uit. 600 00:31:18,290 --> 00:31:18,790 >> Koel. 601 00:31:18,790 --> 00:31:22,410 Dus nu heb ik een voorbeeld applicatie. 602 00:31:22,410 --> 00:31:26,880 Ik heb een soort van pre-maakte alles gewoon zodat er geen live-codering zal zijn 603 00:31:26,880 --> 00:31:30,220 fouten, maar we kunnen wandelen door het en zie hoe je Kolf zou zetten 604 00:31:30,220 --> 00:31:33,685 en peewee samen, en maak een eenvoudige app. 605 00:31:33,685 --> 00:31:38,680 Ik noem het CS50 rant, en het is soort van een eenvoudige blog platform. 606 00:31:38,680 --> 00:31:41,150 >> Dus, eerst, zal ik het uit te voeren en laten zien hoe het eruit ziet, 607 00:31:41,150 --> 00:31:42,890 en dan kunnen we verder kijken in de code. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Oke, dus laten we dit uit te voeren. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, ik zal dit te maken een beetje kleiner. 612 00:32:17,250 --> 00:32:20,000 Het is niet erg mooi, alleen maar omdat Ik heb niet veel van CSS te maken, 613 00:32:20,000 --> 00:32:23,255 maar wat het doet is, heeft Deze databank van blog posts, 614 00:32:23,255 --> 00:32:25,630 en het gaat door alle ze en zal ze weer te geven 615 00:32:25,630 --> 00:32:28,170 op de pagina in de volgorde van de meest recente. 616 00:32:28,170 --> 00:32:30,920 En dus dit zijn slechts enkele berichten dat ik in de database had gered. 617 00:32:30,920 --> 00:32:35,680 >> Dus als we willen een nieuw te creëren post, kunnen we naar Nieuw bericht, 618 00:32:35,680 --> 00:32:42,720 en we kunnen de titel van de enter post, zo iets als, CS50 seminar. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, echt genieten van het seminar. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Koel. 623 00:32:52,270 --> 00:32:56,060 Druk vervolgens op je post, en het zal redirect u terug naar de home page, 624 00:32:56,060 --> 00:33:00,039 en dan zult u zien dat Naar het laatste bericht werd toegevoegd. 625 00:33:00,039 --> 00:33:01,580 En we hebben nog steeds alle sprekers er. 626 00:33:01,580 --> 00:33:08,080 Dus nu, laten we stap voor stap door alle code en zien hoe dit wordt uitgevoerd. 627 00:33:08,080 --> 00:33:11,995 >> Dus, ik denk dat het eerste ding dat laten we neem een ​​kijkje op, is eigenlijk de modellen. 628 00:33:11,995 --> 00:33:14,120 Een groot deel van de tijd, toen je bent het ontwerpen van iets, 629 00:33:14,120 --> 00:33:17,036 u als eerste over hoe te denken je gaat om uw gegevens te vertegenwoordigen, 630 00:33:17,036 --> 00:33:22,915 en vervolgens het ontwerp dingen rond dat, zodat alles is logisch. 631 00:33:22,915 --> 00:33:25,290 En dat is eigenlijk hoe ik deed het toen ik het maken van deze, 632 00:33:25,290 --> 00:33:28,030 Ik ging zitten en dacht, wat wil ik in een post. 633 00:33:28,030 --> 00:33:32,130 >> Dus, hier, we hebben dezelfde structuur dat ik eerder vermelden, 634 00:33:32,130 --> 00:33:33,755 waar we doen db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 In werkelijkheid, waarschijnlijk u niet wilt hard code in de databases van uw naam. 637 00:33:40,980 --> 00:33:43,730 Dat moet waarschijnlijk een parameter dat is ergens opgeslagen, misschien 638 00:33:43,730 --> 00:33:45,940 in een configuratiebestand, maar in een klein voorbeeld als dit, 639 00:33:45,940 --> 00:33:48,310 het is goed om hard code in. 640 00:33:48,310 --> 00:33:53,510 >> Dus nu hebben we dit bericht klasse, die erft van het basismodel. 641 00:33:53,510 --> 00:33:56,930 En het heeft opnieuw de ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Eigenlijk, als je niet opgeeft, als ik eigenlijk verlost van deze, 643 00:34:02,250 --> 00:34:07,152 dan peewee we zullen verzorgen automatisch creëren van die ID-veld, 644 00:34:07,152 --> 00:34:09,360 en het zal automatisch maak er een PrimaryKey, die 645 00:34:09,360 --> 00:34:12,485 Ik denk dat is echt leuk, want meestal, dat is iets wat je wilt hebben, 646 00:34:12,485 --> 00:34:16,239 maar ik wil hem in het bijzonder te zetten, zodat ik herinner me dat het er in zit. 647 00:34:16,239 --> 00:34:19,480 Maar als je niet opgeeft dat, dat zal er automatisch. 648 00:34:19,480 --> 00:34:22,198 >> Dus dan heb ik een datum die een DateTimeField en alle 649 00:34:22,198 --> 00:34:24,864 deze verschillende gebieden, als je kijk naar de peewee documentatie, 650 00:34:24,864 --> 00:34:28,920 het zal geven u een overzicht van de verschillende soorten velden die u kunt gebruiken. 651 00:34:28,920 --> 00:34:34,440 Voor het grootste deel is het analoog om wat je in SQL zou zien. 652 00:34:34,440 --> 00:34:37,699 Dus er is een Charfield, een VarCharFields, TextFields, 653 00:34:37,699 --> 00:34:40,550 die te lang teksten, zoals een blogpost 654 00:34:40,550 --> 00:34:44,460 potentieel, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 al dat soort dingen. 656 00:34:46,100 --> 00:34:51,570 >> En u kunt doorgeven in andere argumenten om het, die ik niet opgeven. 657 00:34:51,570 --> 00:34:55,719 Zeg, bijvoorbeeld, je niet wilt staan ​​twee palen naar dezelfde titel, 658 00:34:55,719 --> 00:34:59,672 je kon opgeven iets als uniek = True, 659 00:34:59,672 --> 00:35:02,880 en dat is gewoon een extra parameter het veld dat wanneer het stelt het naar beneden 660 00:35:02,880 --> 00:35:06,865 in de SQL, zal het specificeren dat het moet uniek. 661 00:35:06,865 --> 00:35:09,740 U kunt ook iets als opgeven niet van nul en alle andere dingen 662 00:35:09,740 --> 00:35:11,750 je normaal doet in SQL. 663 00:35:11,750 --> 00:35:16,020 Dus, dit is een vrij eenvoudig model dat de datum heeft. 664 00:35:16,020 --> 00:35:19,460 Let hier, binnen de DateTimeField, Ik gespecificeerd wat de standaard is. 665 00:35:19,460 --> 00:35:22,560 Ik vermeld het te zijn datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 vanwege de manier waarop Dit wordt geëvalueerd, 667 00:35:24,920 --> 00:35:28,750 het eigenlijk evalueert de DateTime.Now wanneer 668 00:35:28,750 --> 00:35:32,110 het wordt ingevoegd in de database. 669 00:35:32,110 --> 00:35:34,760 >> Ik denk dat, zou ik om dubbel te controleren dit, 670 00:35:34,760 --> 00:35:38,222 maar als je zoiets als dit deed, dan zou eigenlijk evalueren die eenmaal, 671 00:35:38,222 --> 00:35:40,180 en dan is de DateTime zou altijd hetzelfde zijn. 672 00:35:40,180 --> 00:35:44,240 Dus, als je iets doet met een tijd-tags, dubbele controle 673 00:35:44,240 --> 00:35:47,080 dat het evalueren wanneer eigenlijk wordt geplaatst, of anders 674 00:35:47,080 --> 00:35:48,780 je zou kunnen worden verward. 675 00:35:48,780 --> 00:35:51,221 >> De titel is slechts een Charfield, waarvan er 676 00:35:51,221 --> 00:35:53,970 zijn meer argumenten je kan passeren precies aangeven hoe lang u 677 00:35:53,970 --> 00:35:56,170 maar wilt, maar hier, het zag er niet echt toe. 678 00:35:56,170 --> 00:35:58,687 En tekst gaat worden de tekst van de gehele post, 679 00:35:58,687 --> 00:36:01,020 en dat gaat om een ​​te zijn TextField gewoon omdat je wilt 680 00:36:01,020 --> 00:36:03,370 in staat te stellen een vrij lange string. 681 00:36:03,370 --> 00:36:05,970 >> Dan hebben we dit Meta subklasse die net 682 00:36:05,970 --> 00:36:11,250 geeft aan dat we willen dat de database indien dit wel tot in geopend 683 00:36:11,250 --> 00:36:14,267 aan de db object dat we hier zijn. 684 00:36:14,267 --> 00:36:16,350 En het laatste wat we hebben hier is alleen deze functie 685 00:36:16,350 --> 00:36:18,120 dat we gaan gebruik maken van onze app 686 00:36:18,120 --> 00:36:23,970 met de database om verbinding te initialiseren , en dan de Post tabel. 687 00:36:23,970 --> 00:36:26,880 >> Laten we nu eens kijken naar de belangrijkste app zelf. 688 00:36:26,880 --> 00:36:30,800 Dus dit is een heel beetje langer dan de 689 00:36:30,800 --> 00:36:34,840 dat we eerder hebben gezien, maar hopelijk niet al te slecht. 690 00:36:34,840 --> 00:36:37,140 Dus, laat me uit te breiden dit uit. 691 00:36:37,140 --> 00:36:38,370 Oke. 692 00:36:38,370 --> 00:36:42,070 >> Dus, merken en de top ik geïmporteerd een hele hoop andere dingen 693 00:36:42,070 --> 00:36:44,129 Kolf van dat we niet echt eerder gezien. 694 00:36:44,129 --> 00:36:46,670 En hopelijk kunnen we gaan door elk van deze een voor een 695 00:36:46,670 --> 00:36:49,420 en praat een beetje meer over ze, gesorteerd op bijvoorbeeld. 696 00:36:49,420 --> 00:36:51,380 Dus hebben we de Fles, en render_template, 697 00:36:51,380 --> 00:36:54,370 die we eerder hebben gezien, dit verzoek object, 698 00:36:54,370 --> 00:37:00,400 die zal komen wanneer we kijken naar hoe de vorm die ik eigenlijk liet zien 699 00:37:00,400 --> 00:37:01,170 werken. 700 00:37:01,170 --> 00:37:04,850 Redirect, waarmee u omleiden terug uit de Create Nieuwe Post 701 00:37:04,850 --> 00:37:11,710 terug naar de oorspronkelijke homepage, en vervolgens URL, dat is iets waarmee je 702 00:37:11,710 --> 00:37:15,550 erachter te komen waar op de website van een bepaalde pagina is. 703 00:37:15,550 --> 00:37:17,810 >> Zo dan, de volgende wat ik doe, is dat ik import 704 00:37:17,810 --> 00:37:21,550 alle informatie van de modellen bestanden die we naar op zoek waren. 705 00:37:21,550 --> 00:37:23,140 En, ja. 706 00:37:23,140 --> 00:37:28,720 >> Dus, iets nieuws dat komt wanneer je te maken hebt met, 707 00:37:28,720 --> 00:37:31,850 met name databases, is dat je kunt opgeven 708 00:37:31,850 --> 00:37:35,110 een functie die wordt aangeroepen voordat elk verzoek, en de functie die krijgt 709 00:37:35,110 --> 00:37:39,690 genoemd naar elk verzoek, via deze functie decorateur app.before aanvraag. 710 00:37:39,690 --> 00:37:42,324 >> En zo zal dit word uitgevoerd waar deze functie is. 711 00:37:42,324 --> 00:37:44,240 Dit hoeft niet te worden aangeroepen voordat verzoek 712 00:37:44,240 --> 00:37:46,281 maar meestal dat is iets verstandig te noemen. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 U kunt ongeacht functie opgeven je wilt er gecalled, 715 00:37:51,650 --> 00:37:56,330 dus ik aangegeven deze initialize_db functie dat we terug in de modellen 716 00:37:56,330 --> 00:38:02,390 bestand, zodat voor elk verzoek, u verbinding wilt maken met de database. 717 00:38:02,390 --> 00:38:04,560 >> Er zijn twee verschillende manieren waarop u kunt dit doen. 718 00:38:04,560 --> 00:38:10,830 U kuntapp doen., I geloven dat het after_request. 719 00:38:10,830 --> 00:38:13,800 En het verschil tussen after_request en teardown_request, 720 00:38:13,800 --> 00:38:17,590 is dat after_request alleen zal gebeuren indien het verzoek daadwerkelijk geldig was. 721 00:38:17,590 --> 00:38:20,440 Dus, indien de verzoek was succesvol, 722 00:38:20,440 --> 00:38:22,490 als er niets mis ging, maar teardown_request 723 00:38:22,490 --> 00:38:26,300 gebeurt in het geval van een succesvolle verzoek, of in het geval van een fout. 724 00:38:26,300 --> 00:38:28,252 >> Dus, meestal, je wilt teardown_request te gebruiken, 725 00:38:28,252 --> 00:38:30,460 tenzij je wilt doen wat vooral anders 726 00:38:30,460 --> 00:38:31,470 in het geval van een fout. 727 00:38:31,470 --> 00:38:35,122 Maar voor het sluiten van de database of het nu lukt of als het niet lukt, 728 00:38:35,122 --> 00:38:37,080 wij wilt u verbreken uit de database. 729 00:38:37,080 --> 00:38:41,240 Dus het heet, db.close op de db object. 730 00:38:41,240 --> 00:38:43,740 >> Merk op dat de teardown_request neemt in een uitzondering. 731 00:38:43,740 --> 00:38:46,781 Zodat u kunt controleren of er daadwerkelijk een fout toen het sluiten, 732 00:38:46,781 --> 00:38:49,390 maar hier, hopelijk, er zijn niet heel veel fouten, 733 00:38:49,390 --> 00:38:52,720 dus we zijn gewoon soort van negeren dat. 734 00:38:52,720 --> 00:38:55,990 >> Oke, en de rest van het is niet al te slecht. 735 00:38:55,990 --> 00:39:02,240 Dus, als we naar de home page, we verleende deze home.html Template 736 00:39:02,240 --> 00:39:03,490 dat zal openen. 737 00:39:03,490 --> 00:39:06,240 De pas is in post gelijk, en wat dit 738 00:39:06,240 --> 00:39:10,260 doet is, herinneren we dit bericht model, dus selecteren we alle berichten, 739 00:39:10,260 --> 00:39:13,890 en dan nog een ding dat je kunt doen, kunt u de WHERE opgeven, 740 00:39:13,890 --> 00:39:16,910 kunt u een opgeven bestellen door, en dus nemen we 741 00:39:16,910 --> 00:39:18,820 alle berichten die krijgen geselecteerd, en vervolgens 742 00:39:18,820 --> 00:39:22,590 we om hen bij de post.date.descending. 743 00:39:22,590 --> 00:39:25,030 En dat zal opgeven, wanneer ze daadwerkelijk naar buiten komen, 744 00:39:25,030 --> 00:39:29,250 de meest recente zal allereerste zijn. 745 00:39:29,250 --> 00:39:31,420 >> En dan komen we dat in de home.html sjabloon, 746 00:39:31,420 --> 00:39:34,240 dus laten we eigenlijk open dat Template erg snel, 747 00:39:34,240 --> 00:39:36,760 en neem een ​​kijkje op hoe dat werkt. 748 00:39:36,760 --> 00:39:42,130 En dit is niet groot HTML, maar hopelijk kunnen we ons richten op de Python. 749 00:39:42,130 --> 00:39:46,960 >> Dus er is een link naar de nieuwe toevoegen Post, en dus dit geeft de route 750 00:39:46,960 --> 00:39:51,580 binnen de kolf dat we definiëren, die is hier. 751 00:39:51,580 --> 00:39:56,310 Dit is de nieuwe post route, en we aangeven dat hier. 752 00:39:56,310 --> 00:40:00,450 En dus dat is een link die dan zal gaan die route binnen de kolf server. 753 00:40:00,450 --> 00:40:03,820 >> De meer interessante is dit voor lus hier. 754 00:40:03,820 --> 00:40:07,685 Dus specificeren wij dat dit bericht parameter die 755 00:40:07,685 --> 00:40:09,560 werd overgegaan in de render_template functie, 756 00:40:09,560 --> 00:40:13,550 voor elke record in de post van object dat wordt doorgegeven. 757 00:40:13,550 --> 00:40:16,600 We willen printen de post titel, in H1, 758 00:40:16,600 --> 00:40:21,930 en dan hieronder, willen we uit te printen de post tekst in een paragraaf. 759 00:40:21,930 --> 00:40:25,710 >> En hier kunnen we eigenlijk bel een Python-functie, 760 00:40:25,710 --> 00:40:35,130 dus we kunnen strftime noemen, ST-RF-tijd, en je kunt pas in de format string 761 00:40:35,130 --> 00:40:37,064 dat u wilt de gegevens in te drukken. 762 00:40:37,064 --> 00:40:39,980 Dus het is erg leuk dat je kunt Dit Python functie daadwerkelijk op te roepen 763 00:40:39,980 --> 00:40:41,090 vanuit here. 764 00:40:41,090 --> 00:40:44,370 Je hoeft niet om de opmaak te doen op de controller zijde, want echt, 765 00:40:44,370 --> 00:40:47,770 formatteren van de datum is iets dat je wilt om te gaan binnen de View. 766 00:40:47,770 --> 00:40:51,480 >> En al deze procent dingen is niet super belangrijk. 767 00:40:51,480 --> 00:40:55,270 Als je omhoog kijkt de documentatie voor de strftime functie in Python, 768 00:40:55,270 --> 00:40:57,040 specificeert deze dingen, maar dat de 769 00:40:57,040 --> 00:40:59,190 hoe, wanneer we zochten hier in de home page, 770 00:40:59,190 --> 00:41:04,440 Het formatteert dit met een aardige datum, en het geeft AM of PM, 771 00:41:04,440 --> 00:41:09,410 maar normaal, als we dit niet hier, 772 00:41:09,410 --> 00:41:14,024 je zult waarschijnlijk een aantal vuilnis krijgen date dat niet erg goed uitzag. 773 00:41:14,024 --> 00:41:15,940 En dan geven wij de post.text, en ik kon 774 00:41:15,940 --> 00:41:19,460 een paar hebben gezet lijn breekt hier, net 775 00:41:19,460 --> 00:41:21,820 om enkele spaties tussen elk bericht te zetten. 776 00:41:21,820 --> 00:41:26,270 >> Dus, ik denk dat het belangrijkste wat in dit voorbeeld 777 00:41:26,270 --> 00:41:28,697 is dat u deze kunt gebruiken voor lus. 778 00:41:28,697 --> 00:41:30,780 Dit is analoog aan dingen die je kunt doen in PHP. 779 00:41:30,780 --> 00:41:32,905 U kunt door herhalen, alles wordt doorgegeven, 780 00:41:32,905 --> 00:41:36,719 en zo, in plaats van te doen copy / paste, kopiëren / plakken alle HTML, 781 00:41:36,719 --> 00:41:40,010 hoef je alleen maar te schrijven een keer, en dan U kunt itereren over alle van de berichten. 782 00:41:40,010 --> 00:41:41,510 >> En dit is iets gemeen dat u wilt 783 00:41:41,510 --> 00:41:44,510 te doen, als je een veel gegevens, is dat voor alles in uw gegevens, 784 00:41:44,510 --> 00:41:48,370 wilt u iets dergelijks te doen. 785 00:41:48,370 --> 00:41:51,690 En dan, alleen niet vergeten, dat wanneer u willen expliciet uit te drukken iets 786 00:41:51,690 --> 00:41:54,780 in de HTML-code, die u gebruikt dubbele beugels hier 787 00:41:54,780 --> 00:41:57,820 maar dan als je wilt opgeven wat informatie over een aandoening, 788 00:41:57,820 --> 00:42:02,430 of over een lus, u Gebruik het percentage beugel. 789 00:42:02,430 --> 00:42:08,730 >> Dus, terug te gaan naar de Python code, dus dat verklaart 790 00:42:08,730 --> 00:42:12,242 wat er gebeurt in de belangrijkste route, toen wij er gaan, 791 00:42:12,242 --> 00:42:14,450 het toont gewoon alle berichten, maar dan is de vraag 792 00:42:14,450 --> 00:42:17,440 is, hoe kunnen we eigenlijk berichten in de database, die 793 00:42:17,440 --> 00:42:18,970 is een beetje interessanter. 794 00:42:18,970 --> 00:42:23,960 >> Dus, als u klikt op de New Bericht link, die we hier zagen, 795 00:42:23,960 --> 00:42:26,000 het automatisch u dit formulier. 796 00:42:26,000 --> 00:42:29,580 En dat is nog maar een eenvoudige oproep aan de render_template functie, die vervolgens 797 00:42:29,580 --> 00:42:32,110 gaat in het nieuwe record in HTML-formulier. 798 00:42:32,110 --> 00:42:36,212 Dus laten we eens kijken naar dat. 799 00:42:36,212 --> 00:42:37,420 Dus dit is vrij eenvoudig. 800 00:42:37,420 --> 00:42:45,110 Het heeft een eenvoudige HTML formulier dat ziet er een beetje bekend, 801 00:42:45,110 --> 00:42:47,380 gebaseerd op de formulieren in CS50 Finance. 802 00:42:47,380 --> 00:42:49,940 En ja, we hier opgeeft, de actie. 803 00:42:49,940 --> 00:42:52,435 En hier, als je werkt met PHP, normaal gesproken, 804 00:42:52,435 --> 00:42:55,930 zou iets zijn als, create.PHP, maar hier 805 00:42:55,930 --> 00:42:59,960 we eigenlijk geeft u een route binnen de kolf server. 806 00:42:59,960 --> 00:43:02,520 En dus, deze route overeenkomt het creëren route 807 00:43:02,520 --> 00:43:05,680 dat we hier hebben, wat we zullen in een tweede in te gaan. 808 00:43:05,680 --> 00:43:07,630 >> En dus geven wij dat Het is een methode post, 809 00:43:07,630 --> 00:43:09,820 want we willen sturen deze vorm van gegevens, en meestal 810 00:43:09,820 --> 00:43:12,945 wanneer u gegevens wilt verzenden van een formulier, wilt u misschien een post verzoek te gebruiken, 811 00:43:12,945 --> 00:43:15,760 zodat je niet eindigen met deze grote, logge URL. 812 00:43:15,760 --> 00:43:18,970 Maar je kan ook een GET-verzoek te gebruiken, en geef het met variabele routing, 813 00:43:18,970 --> 00:43:21,170 maar voor formulieren, het is leuk op een post verzoek hier. 814 00:43:21,170 --> 00:43:24,620 En zo dan, net als jij zou doen met HTML en PHP, 815 00:43:24,620 --> 00:43:28,420 U kunt deze tekst ingangen opgeven, en u kunt de naam van hen te geven, 816 00:43:28,420 --> 00:43:33,490 en dat is de naam die krijgen zal voorbij in de aanvraag object in Kolf. 817 00:43:33,490 --> 00:43:36,960 >> En dan hebben we een Submit knop die bericht zegt. 818 00:43:36,960 --> 00:43:40,760 En hier Voeg de naam van de knop, want het is een blog post, 819 00:43:40,760 --> 00:43:42,700 maar hier, post is het verzoek methode. 820 00:43:42,700 --> 00:43:47,060 Dus dat zijn hetzelfde woord maar eigenlijk los van elkaar. 821 00:43:47,060 --> 00:43:48,460 Ja 822 00:43:48,460 --> 00:43:54,800 >> Terug te gaan naar de Python-code, toen we belden het creëren methode, 823 00:43:54,800 --> 00:43:57,702 merkt hier dat u kunt eigenlijk opgeven binnen de route 824 00:43:57,702 --> 00:44:00,650 verzoek methodes dat u wilt accepteren, 825 00:44:00,650 --> 00:44:04,770 en zo hier, ik aangeven dat ik willen alleen een bericht methode te accepteren. 826 00:44:04,770 --> 00:44:09,800 Dus, als ik eigenlijk probeer de pagina direct, die gebruikt een GET verzoek 827 00:44:09,800 --> 00:44:11,700 het zal me vertellen "Methode niet toegestaan." 828 00:44:11,700 --> 00:44:15,840 >> En dus heb je pagina's, een soort als deze pagina creëren, waarin ik ben alleen 829 00:44:15,840 --> 00:44:20,192 echt het gebruiken als een manier voor de vorm te krijgen voorgelegd, 830 00:44:20,192 --> 00:44:22,900 kunt u aangeven dat u niet willen mensen om er naartoe te gaan staat 831 00:44:22,900 --> 00:44:25,650 direct via een GET-verzoek, of als je niet wilt, 832 00:44:25,650 --> 00:44:28,580 om wat voor reden, een Post verzoek je kon gewoon opgeeft GET hier 833 00:44:28,580 --> 00:44:32,720 maar in dit voorbeeld, we net wil dat de aanvragen om uit te gaan. 834 00:44:32,720 --> 00:44:38,700 >> Dus, wanneer create_post wordt genoemd als bezoeken we dat via de aanvragen, 835 00:44:38,700 --> 00:44:43,600 wanneer je naar een bepaalde route, is er dit verzoek object, 836 00:44:43,600 --> 00:44:46,640 en we hadden om te importeren verzoeken aan de top, 837 00:44:46,640 --> 00:44:49,640 maar er is dit verzoek object dat wordt doorgegeven, 838 00:44:49,640 --> 00:44:53,210 en u kunt het formulier toegang tot de gegevens, die zal automatisch gevuld 839 00:44:53,210 --> 00:44:55,070 wanneer u een verzoek van een formulier te verzenden. 840 00:44:55,070 --> 00:44:56,990 >> En dan, wat ik denk is echt cool, is 841 00:44:56,990 --> 00:45:02,840 dat het formulier object krijgen doorgegeven in, is slechts een Python woordenboek dat 842 00:45:02,840 --> 00:45:10,560 bevat, als je dus even access--, laat ik trek de HTML ernaast, net 843 00:45:10,560 --> 00:45:17,670 dus je kunt die moeten als referentie, ja, zo 844 00:45:17,670 --> 00:45:21,060 de namen die we hier opgeven voor de verschillende gebieden, dus 845 00:45:21,060 --> 00:45:23,900 de titel en de tekst, wij gebruik dan alleen die hier 846 00:45:23,900 --> 00:45:27,110 als indices in de vorm van gegevens. 847 00:45:27,110 --> 00:45:28,950 Dus dat is super handig. 848 00:45:28,950 --> 00:45:33,320 >> Dus dan post.create noemen we dat zal maken en automatisch invoegen 849 00:45:33,320 --> 00:45:36,850 Deze nieuwe post object in de database. 850 00:45:36,850 --> 00:45:40,690 En ik denk dat dit te maken functie hier is een echt cool voorbeeld van hoe 851 00:45:40,690 --> 00:45:44,900 krachtige Fles is en het werken met dit, want als je iets aan het doen waren 852 00:45:44,900 --> 00:45:48,660 in PHP, moet u mogelijk doe heel veel van de validatie, 853 00:45:48,660 --> 00:45:51,730 u zou hebben om vervolgens een database verbinding, 854 00:45:51,730 --> 00:45:55,210 u zou hebben om vervolgens de SQL-query uit te voeren, 855 00:45:55,210 --> 00:45:59,550 maar hier hebben we alleen deze aardige post.create, die we kunnen dan gewoon 856 00:45:59,550 --> 00:46:01,520 krijgen de informatie uit van het verzoek object, 857 00:46:01,520 --> 00:46:05,370 en geef het dan in een nieuwe Post dat we creëren. 858 00:46:05,370 --> 00:46:07,850 >> En dan, de allerlaatste wat we willen doen, 859 00:46:07,850 --> 00:46:09,630 is om het omleiden gebruiker terug naar het huis. 860 00:46:09,630 --> 00:46:13,020 En dus hebben we dit gebruiken Kolf redirect functie. 861 00:46:13,020 --> 00:46:17,770 En iets dat we hadden niet gezien eerder was deze URL functie. 862 00:46:17,770 --> 00:46:21,970 Dus de URL voor functie kunt passeert u in feite de naam 863 00:46:21,970 --> 00:46:26,090 van een functie in uw Python-code, in plaats van de specifieke route 864 00:46:26,090 --> 00:46:26,720 dat het bij. 865 00:46:26,720 --> 00:46:32,107 >> Dus ik kon net zo goed hebben omgeleid een gebruiker slash, 866 00:46:32,107 --> 00:46:37,050 die zou naar huis te sturen, maar met behulp van de URL voor de functie is leuk, 867 00:46:37,050 --> 00:46:39,990 want als je het veranderen locatie waar dingen zijn, 868 00:46:39,990 --> 00:46:44,080 dus laten we zeggen dat ik de thuis te zijn op / home in plaats daarvan, 869 00:46:44,080 --> 00:46:47,040 Dit zou nog steeds dan terug / home, want eigenlijk gaat en kijkt omhoog 870 00:46:47,040 --> 00:46:50,770 de naam van de functie, en geeft u de URL terug voor. 871 00:46:50,770 --> 00:46:52,490 >> Dus, een soort van op het veronderstelling dat je bent 872 00:46:52,490 --> 00:46:55,489 meer kans om waar dingen veranderen zijn dan de namen van de functies. 873 00:46:55,489 --> 00:46:58,840 Je kunt dit goed gebruiken mooie URL voor de functie. 874 00:46:58,840 --> 00:47:02,470 En één ding bewust te zijn van dat is een beetje lastig, 875 00:47:02,470 --> 00:47:05,750 is dat je denkt dat je kon gewoon omleiden op de URL, 876 00:47:05,750 --> 00:47:10,600 maar eigenlijk alle van de routes hebben een soort van tekst en HTML terug te keren, 877 00:47:10,600 --> 00:47:14,360 zodat je eigenlijk moet de redirect terugbellen. 878 00:47:14,360 --> 00:47:18,379 Anders zul je iets te krijgen ongeldige over het niet terugsturen van een string 879 00:47:18,379 --> 00:47:21,420 Omdat al deze moeten terugkeren de HTML je eigenlijk wilt maken. 880 00:47:21,420 --> 00:47:26,980 >> En ja, wanneer u de omleiding te bellen, het automatisch naar de pagina, 881 00:47:26,980 --> 00:47:30,270 maar in feite geeft de HTML je nodig hebt om dat omleiding uit te voeren. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Ga terug naar de homepage. 884 00:47:37,110 --> 00:47:39,200 Dus we hebben deze twee verschillende standpunten. 885 00:47:39,200 --> 00:47:40,132 We hebben het huis uitzicht. 886 00:47:40,132 --> 00:47:41,590 Of, ik denk dat ik moet zeggen templates. 887 00:47:41,590 --> 00:47:44,190 We hebben deze twee templates, het huis template die 888 00:47:44,190 --> 00:47:48,500 toont al onze berichten en dan hebben we deze advertentie ding, 889 00:47:48,500 --> 00:47:52,970 en wanneer u het bericht klikt, gaat het een nieuwe route in de kolf 890 00:47:52,970 --> 00:47:55,920 maar die route niet noodzakelijkerwijs een overeenkomstige matrijs. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Je hoeft niet te zien iets, maar je kan nog steeds 893 00:48:01,560 --> 00:48:04,090 hebben dit werk te gaan achter de schermen. 894 00:48:04,090 --> 00:48:07,450 En dan krijg je doorgestuurd terug naar de homepage. 895 00:48:07,450 --> 00:48:12,230 En zeker, het is gemakkelijk om te werken in sommige mooiere CSS in de template 896 00:48:12,230 --> 00:48:15,580 en deze zien er een stuk mooier, maar alle van de belangrijkste logica 897 00:48:15,580 --> 00:48:18,590 er in de Python. 898 00:48:18,590 --> 00:48:20,020 >> Vragen over dat voorbeeld? 899 00:48:20,020 --> 00:48:22,760 Ik weet dat er een heleboel verschillende dingen aan de hand daar, 900 00:48:22,760 --> 00:48:25,341 een heleboel dingen die we niet hadden gezien eerder, maar als iets. 901 00:48:25,341 --> 00:48:25,840 Ja. 902 00:48:25,840 --> 00:48:28,346 >> PUBLIEK 1: Heeft u niets te doen speciaal voor de gegevens die schrobben 903 00:48:28,346 --> 00:48:29,600 vanaf de vorm? 904 00:48:29,600 --> 00:48:31,109 Ik zag je net zei "te creëren," 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Ja, dus dat is eigenlijk, dat is een heel goed punt. 906 00:48:33,900 --> 00:48:36,350 Dus de vraag is, heb je moeten controleren en ervoor te zorgen 907 00:48:36,350 --> 00:48:39,190 dat de gegevens geldig, en doen een soort van schrobben 908 00:48:39,190 --> 00:48:41,840 om ervoor te zorgen dat het geldig is, want zoals u hier kunt zien, 909 00:48:41,840 --> 00:48:42,660 Ik ben niet om dat te doen. 910 00:48:42,660 --> 00:48:48,140 Dus laten we zien wat er gebeurt als ik iets posten leeg. 911 00:48:48,140 --> 00:48:51,190 Dus, zal het eigenlijk gewoon een lege post en in de DateTime vullen. 912 00:48:51,190 --> 00:48:55,990 >> Dus in werkelijkheid, zou je waarschijnlijk willen iets doen, zoals, 913 00:48:55,990 --> 00:49:04,749 misschien opgeven als titel is gelijk aan de lege string, dan is dit niet te doen. 914 00:49:04,749 --> 00:49:07,290 Of, alleen doen als de titel niet gelijk lege string. 915 00:49:07,290 --> 00:49:10,330 Dus het maakt eigenlijk niet automatisch zorgen dat schrobben 916 00:49:10,330 --> 00:49:12,820 voor u, zodat u nog nodig hebt om dat te doen. 917 00:49:12,820 --> 00:49:14,330 Ja, goede vraag. 918 00:49:14,330 --> 00:49:18,497 >> PUBLIEK 2: Is het scrub voor sequel injectie? 919 00:49:18,497 --> 00:49:19,890 Weet jij? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Hopelijk peewee doet dat. 921 00:49:22,830 --> 00:49:25,830 Ik denk dat het zeker een mooie slecht bibliotheek als het niet doen. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Ik weet het niet precies. 924 00:49:32,690 --> 00:49:34,820 Ik zou moeten kijken naar de opzoeking dat gegenereerd. 925 00:49:34,820 --> 00:49:38,980 Ik denk dat, als ik getypt in een blogpost dat soort keek 926 00:49:38,980 --> 00:49:46,370 als een SQL-injectie aanval, zoiets als dit, als dit 927 00:49:46,370 --> 00:49:49,370 is als een wachtwoord veld of iets, u misschien iets als dit te doen. 928 00:49:49,370 --> 00:49:53,410 >> Ik denk dat dat nog steeds krijgen letterlijk geplaatst, 929 00:49:53,410 --> 00:49:59,200 maar ik denk dat peewee doet een soort schrobben van de data 930 00:49:59,200 --> 00:50:01,680 voordat het daadwerkelijk uitvoert. 931 00:50:01,680 --> 00:50:04,510 >> PUBLIEK 1: Dat tekstveld ontworpen om platte tekst te nemen, toch? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Ja, het is. 933 00:50:05,710 --> 00:50:06,465 Ja. 934 00:50:06,465 --> 00:50:09,590 Dus ik denk dat alle, dus dit is correct gedrag, dat zal doen, 935 00:50:09,590 --> 00:50:12,170 maar ik denk dat peewee hopelijk doet 936 00:50:12,170 --> 00:50:13,780 een soort van bescherming op hun einde. 937 00:50:13,780 --> 00:50:16,090 En als je wilde dubbel te controleren dat er 938 00:50:16,090 --> 00:50:19,530 zijn manieren waarop u een query genereren. 939 00:50:19,530 --> 00:50:22,622 zodat je niet hoeft te direct uitvoeren. 940 00:50:22,622 --> 00:50:24,330 Ik moet een te nemen kijk naar documentatie 941 00:50:24,330 --> 00:50:27,930 maar je kunt eigenlijk zien de SQL dat genereert, 942 00:50:27,930 --> 00:50:30,840 en neem een ​​kijkje op dat, en maak zorgen dat het ontsnapt dingen. 943 00:50:30,840 --> 00:50:33,700 >> Een andere reden waarom je zou willen kijken naar de SQL 944 00:50:33,700 --> 00:50:37,920 dat peewee wordt uitvoeren, is als dingen lijken om echt te langzaam gaat, 945 00:50:37,920 --> 00:50:41,090 kunt u een kijkje nemen en zien wat het is werkelijk te doen, want het is soms 946 00:50:41,090 --> 00:50:44,670 makkelijk om per ongeluk toe te voegen in, de manier waarop je schrijven, 947 00:50:44,670 --> 00:50:47,880 je kunt het ongeluk hebben selecteert u de hele database eerste, 948 00:50:47,880 --> 00:50:50,230 en doe dan een soort operatie op dat, als je echt 949 00:50:50,230 --> 00:50:51,320 bedoeld om een ​​subset te selecteren. 950 00:50:51,320 --> 00:50:53,560 >> En dus, als dingen niet helemaal naar rechts, 951 00:50:53,560 --> 00:50:57,300 het is goed om een ​​blik op de aanvraag te nemen Dat is eigenlijk het krijgen gegenereerd. 952 00:50:57,300 --> 00:50:57,800 Ja. 953 00:50:57,800 --> 00:51:02,100 >> PUBLIEK 2: Als u voor het eerst begon, je in de poort als 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Ja. 955 00:51:02,904 --> 00:51:06,070 PUBLIEK 2: Is de standaard met peewee, of is dat iets wat je kunt veranderen? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Ja, zodat de poort is standaard met fles. 957 00:51:10,870 --> 00:51:13,061 Als u het uit te voeren zonder iets specificeren, 958 00:51:13,061 --> 00:51:14,310 zal het automatisch doen. 959 00:51:14,310 --> 00:51:16,060 Ik geloof, dat ik zou moeten om dubbel te controleren dit, 960 00:51:16,060 --> 00:51:19,130 maar u kunt opgeven dat in de app.run, Ik denk dat je iets te doen, 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 Laten we dat eens proberen echt snel. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Ja, dus je kunt gewoon opgeven port = 8080, en het zal het daar draaien, 966 00:51:32,230 --> 00:51:36,130 waarvan ik denk dat, als je wilde om het uit te voeren op de IDE, heb ik dit niet geprobeerd, 967 00:51:36,130 --> 00:51:38,527 maar ik denk dat als je liep het op poort 8080, 968 00:51:38,527 --> 00:51:40,360 je waarschijnlijk zou kunnen toegang tot de server, 969 00:51:40,360 --> 00:51:41,870 net alsof je voor de website. 970 00:51:41,870 --> 00:51:44,390 >> Ja, maar het is makkelijk om dat te veranderen als je 971 00:51:44,390 --> 00:51:48,540 hebben een soort van, zoals port-forwarding dingen die je moet doen. 972 00:51:48,540 --> 00:51:50,410 >> Een andere vragen? 973 00:51:50,410 --> 00:51:50,916 Ja? 974 00:51:50,916 --> 00:51:53,416 PUBLIEK 1: Dus, zag ik in uw modellen die, zoals u al zei, 975 00:51:53,416 --> 00:51:55,647 je moet het specificeren gegevensbestand voor elk object. 976 00:51:55,647 --> 00:51:58,105 Heeft u toevallig weet, doet dat maakt het heel eenvoudig als je 977 00:51:58,105 --> 00:52:03,210 hebben veel SQLite databases die u wilt gebruiken voor een enkele web app, 978 00:52:03,210 --> 00:52:07,210 dat je gewoon kunt opgeven een bos van verschillende degenen in uw model? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Ja, laat me open die up echt snel. 980 00:52:11,620 --> 00:52:17,570 Dus, je zegt, als je wilt hebben een heleboel verschillende iets, misschien 981 00:52:17,570 --> 00:52:22,670 wilt en de studenten, voor sommige reden, zoiets? 982 00:52:22,670 --> 00:52:26,870 Ja, dus ik denk dat je nog, elk model 983 00:52:26,870 --> 00:52:30,652 zou hebben om nog net één gegevensbestand toegewezen, 984 00:52:30,652 --> 00:52:32,610 maar als je wilde hebben verschillende modellen die 985 00:52:32,610 --> 00:52:35,818 hebben verschillende database-objecten toegewezen om het, kon je zeker doen. 986 00:52:35,818 --> 00:52:43,070 Dus, als ik een nieuwe, iets zoals dit, 987 00:52:43,070 --> 00:52:47,000 en nu dit is een student die lijkt vreemd als een blog post, 988 00:52:47,000 --> 00:52:49,390 Ik kon aangeven dat de databank gelijk hier db_2. 989 00:52:49,390 --> 00:52:51,390 Dus, ik denk dat het de belangrijkste manier kun je dat doen. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Koel. 992 00:52:56,200 --> 00:52:58,410 Een andere vragen? 993 00:52:58,410 --> 00:53:02,170 >> Dus gewoon tot het einde van een beetje bit, hier zijn enkele bronnen, 994 00:53:02,170 --> 00:53:06,030 en deze dia's zal online worden geplaatst dus je kunt eigenlijk naar deze links. 995 00:53:06,030 --> 00:53:08,500 De beste middelen zijn echt de documentatie voor Fles 996 00:53:08,500 --> 00:53:09,930 en peewee zichzelf. 997 00:53:09,930 --> 00:53:12,940 Ze zijn echt goed geschreven, denk ik. 998 00:53:12,940 --> 00:53:18,180 Dus de Flask website is hier, en ze hebben een quickstart tutorial die 999 00:53:18,180 --> 00:53:20,710 loopt door soortgelijke dingen waar ik liep door, 1000 00:53:20,710 --> 00:53:23,560 maar als je wilt een soort van beoordeling van de dingen die ik ging, 1001 00:53:23,560 --> 00:53:26,200 of je dacht dat ik uitgelegd iets in een verwarrende manier, 1002 00:53:26,200 --> 00:53:28,390 ze zullen gelijkaardige voorbeelden daar. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee heeft documentatie en ze hebben een quickstart handleiding 1004 00:53:31,570 --> 00:53:34,650 dat gaat over de belangrijkste parameters die je zou willen gebruiken. 1005 00:53:34,650 --> 00:53:38,900 Dus, de dingen die ik sprak over met de unieke, en specificeren van defaults, 1006 00:53:38,900 --> 00:53:42,710 verschillende soorten velden u kunt gebruiken, deze zouden er al zijn. 1007 00:53:42,710 --> 00:53:44,690 >> Ook als u vragen over peewee, 1008 00:53:44,690 --> 00:53:47,530 en je ze post op StackOverflow, de man die peewee eigenlijk maakte 1009 00:53:47,530 --> 00:53:49,500 gaat over en antwoorden die soms. 1010 00:53:49,500 --> 00:53:53,200 Als je een vraag hebt, hopelijk hij zal in staat zijn om het te beantwoorden, 1011 00:53:53,200 --> 00:53:54,867 want hij schreef de hele zaak. 1012 00:53:54,867 --> 00:53:56,700 Ik denk dat dat alles Ik wilde dekken. 1013 00:53:56,700 --> 00:53:58,930 Bedankt voor het komen uit. 1014 00:53:58,930 --> 00:54:02,688