1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUSIK SPELA] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Hej, alla. 5 00:00:05,830 --> 00:00:08,020 Tack för att ni kom ut idag. 6 00:00:08,020 --> 00:00:10,660 Detta seminarium är "Python Web Apps med Flask. " 7 00:00:10,660 --> 00:00:14,510 >> Så jag kommer att tala lite om varför 8 00:00:14,510 --> 00:00:17,400 kanske du vill använda kolv att göra webbappar med Python, i motsats 9 00:00:17,400 --> 00:00:21,556 till vissa andra ramar där ute, som Django, som är den mest välkända. 10 00:00:21,556 --> 00:00:24,330 Undertiteln är "och peewee ", som är något 11 00:00:24,330 --> 00:00:27,250 vi kommer att prata om hur att interagera med SQL-databaser. 12 00:00:27,250 --> 00:00:29,610 Det gör det verkligen trevligt. 13 00:00:29,610 --> 00:00:32,390 >> Så, här är bara en snabb genomgång av vad jag vill gå över. 14 00:00:32,390 --> 00:00:35,520 Så först, bara en bild det kommer att vara Snabbstart, 15 00:00:35,520 --> 00:00:38,530 vilket är hur man får allt ställa upp på din dator. 16 00:00:38,530 --> 00:00:41,760 Jag kommer att demonstrera detta på min lokala Mac maskin, 17 00:00:41,760 --> 00:00:45,220 bara för att det är där jag har gjort detta innan, jag är mest bekväm med det, 18 00:00:45,220 --> 00:00:48,510 men det är definitivt möjligt på CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Så, efter det, vill jag införa vad Flask är, 20 00:00:52,050 --> 00:00:55,089 och övertyga dig varför du bör använda det i första hand. 21 00:00:55,089 --> 00:00:56,880 Sedan ska jag ge en snabb exempel på vad du 22 00:00:56,880 --> 00:01:00,550 kan göra i kolv, ett snabbt exempel av vad du kan göra i peewee, 23 00:01:00,550 --> 00:01:05,010 och då kommer jag visa dig en mer fullständig exempel ansökan 24 00:01:05,010 --> 00:01:07,520 att jag satte ihop att vi kan gå igenom tillsammans. 25 00:01:07,520 --> 00:01:10,040 >> Och sedan slutligen, i den sista bilden har jag 26 00:01:10,040 --> 00:01:12,730 några resurser som du ser på nätet för mer information. 27 00:01:12,730 --> 00:01:15,560 Detta är inte en komplett handledning om hur man använder kolv. 28 00:01:15,560 --> 00:01:18,140 Och jag hoppas att lämna lite tid för frågor. 29 00:01:18,140 --> 00:01:21,050 Någon tittar lokalt, bara liknande, skrika ut i mitten 30 00:01:21,050 --> 00:01:22,340 om du har några frågor. 31 00:01:22,340 --> 00:01:27,150 >> Så snabb installation grejer, Om du vill följa, 32 00:01:27,150 --> 00:01:29,240 eller om du vill få detta upp på din egen maskin, 33 00:01:29,240 --> 00:01:32,440 Jag kommer att använda Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flask fungerar med Python 3, men jag gillar 35 00:01:35,860 --> 00:01:38,660 använder Python 2, eftersom det finns vissa Python paket som 36 00:01:38,660 --> 00:01:40,910 fungerar inte med 3 ännu. 37 00:01:40,910 --> 00:01:44,800 Om du pip har installerat, som är en Python pakethanterare, 38 00:01:44,800 --> 00:01:48,190 Jag tror att om din Python är större än eller lika med 2.7.9, 39 00:01:48,190 --> 00:01:52,220 du har det installerat redan, det är super lätt att installera dessa paket. 40 00:01:52,220 --> 00:01:54,990 >> Du kan inte installera pip Kolv, PIP installera peewee, 41 00:01:54,990 --> 00:01:58,600 vanligtvis måste du köra sudo bara så att behörighet träna. 42 00:01:58,600 --> 00:02:01,080 Och om du använder en super gammal version av Python, 43 00:02:01,080 --> 00:02:05,100 Jag rekommenderar att du uppdaterar din Python, eller använda Easyinstall att installera pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Så, nästa fråga är, vad är Flask? 46 00:02:11,120 --> 00:02:13,280 Och jag antar att, först en rimlig fråga undrade jag 47 00:02:13,280 --> 00:02:15,585 under en lång tid är, vad är en webb app? 48 00:02:15,585 --> 00:02:17,960 Eftersom det är ett ord som jag tror kastas runt en hel del 49 00:02:17,960 --> 00:02:19,240 att jag inte riktigt visste. 50 00:02:19,240 --> 00:02:22,340 Och jag tror att det bästa exempel på vad en web app är, 51 00:02:22,340 --> 00:02:26,960 verkligen är CS50 Finance, där det är egentligen inte bara en hemsida, 52 00:02:26,960 --> 00:02:29,320 men det är något som du kunde slags interagera med. 53 00:02:29,320 --> 00:02:31,736 Det finns användarkonton och alla typer av olika saker. 54 00:02:31,736 --> 00:02:35,010 Så, exakt var du ritar Gränsen mellan vad som är en webbplats, 55 00:02:35,010 --> 00:02:38,780 och vad är en webbapplikation, är slags godtycklig, men jag antar att tanken, 56 00:02:38,780 --> 00:02:42,110 Det är något mer än en webbplats och det är en användbar applikation. 57 00:02:42,110 --> 00:02:46,081 >> Så, är kolv ett ramverk för gör webbprogram med hjälp av Python. 58 00:02:46,081 --> 00:02:48,330 Och förhoppningsvis i slutet av detta kommer jag övertyga dig 59 00:02:48,330 --> 00:02:52,210 att du faktiskt kan skriva något som CS50 Finance använder Python, som jag 60 00:02:52,210 --> 00:02:53,950 som en mycket bättre än PHP, personligen. 61 00:02:53,950 --> 00:02:57,320 >> Så, Flask är, de kallar en microframework, genom vilken, 62 00:02:57,320 --> 00:02:59,800 De menar att det är mycket enkel, men töjbar. 63 00:02:59,800 --> 00:03:02,980 Så har det precis vad du behöver, men om du vill ha fler funktioner, 64 00:03:02,980 --> 00:03:04,522 Det är lätt att ta in dem. 65 00:03:04,522 --> 00:03:06,480 Men bara för att det är en microframework, inte 66 00:03:06,480 --> 00:03:08,960 innebär att det är bara för små projekt. 67 00:03:08,960 --> 00:03:12,590 Jag har en länk här som säger att Obama använde Flask 2012 68 00:03:12,590 --> 00:03:14,410 för hans kampanj webbplats, vilket förhoppningsvis, 69 00:03:14,410 --> 00:03:16,937 är något av en påskrift. 70 00:03:16,937 --> 00:03:18,770 Men det som jag verkligen tycker om Flask 71 00:03:18,770 --> 00:03:22,401 är att det inte verkligen göra någon form av beslut för dig. 72 00:03:22,401 --> 00:03:24,150 Bara för att vi är talar om webbprogram, 73 00:03:24,150 --> 00:03:26,940 Jag måste jämföra det med Ruby on Rails och Django, som båda 74 00:03:26,940 --> 00:03:30,450 är stora ramar, men de båda gör antaganden 75 00:03:30,450 --> 00:03:33,600 om hur du vill interagera med databaser, 76 00:03:33,600 --> 00:03:36,900 hur du vill presentera ditt vyer, och de är definitivt 77 00:03:36,900 --> 00:03:38,850 goda aspekter till det. 78 00:03:38,850 --> 00:03:41,490 >> Till exempel, Ruby on Rails har denna aktiva registreringssystem, 79 00:03:41,490 --> 00:03:43,100 som är en riktigt nice sätt att interagera med data, 80 00:03:43,100 --> 00:03:45,960 men om du vill använda Ruby on Rails, du typ av bundna till det. 81 00:03:45,960 --> 00:03:47,835 Men med kolv, som jag ska visa med peewee, 82 00:03:47,835 --> 00:03:49,830 Du kan använda vilken sorts av databas du vill, 83 00:03:49,830 --> 00:03:53,980 och du kan bara dra det i som en förlängning till kolv. 84 00:03:53,980 --> 00:03:56,350 >> Så det är därför jag verkligen som kolv, det är att det 85 00:03:56,350 --> 00:04:01,170 inte göra antaganden för dig baserat på saker du inte behöver egentligen. 86 00:04:01,170 --> 00:04:04,440 >> Så, varför ska du använda Flask? 87 00:04:04,440 --> 00:04:08,230 Fördelarna är det bara har verkligen kärnfunktioner 88 00:04:08,230 --> 00:04:09,420 inbyggd i det som du behöver. 89 00:04:09,420 --> 00:04:11,980 Så behöver du inte oroa dig för förstå en massa saker 90 00:04:11,980 --> 00:04:13,175 att du egentligen inte behöver. 91 00:04:13,175 --> 00:04:15,060 Du behöver inte oroa dig om att stänga av funktioner 92 00:04:15,060 --> 00:04:16,620 att du egentligen inte behöver. 93 00:04:16,620 --> 00:04:21,082 >> Och, som jag nämnde, det är super lätt att lägga in extensions saker 94 00:04:21,082 --> 00:04:21,790 att du inte behöver. 95 00:04:21,790 --> 00:04:24,700 Några av dem har Flask sitt eget stöd för det. 96 00:04:24,700 --> 00:04:28,230 Så det finns något som kallas Flask admin, vilket speglar att admin 97 00:04:28,230 --> 00:04:32,060 panel som Django ger, som ger dig ett trevligt visuellt sätt 98 00:04:32,060 --> 00:04:33,405 att administrera din webbplats. 99 00:04:33,405 --> 00:04:35,280 Men återigen, om du är gör något enkelt, 100 00:04:35,280 --> 00:04:39,550 du behöver antagligen inte en stor admin panel, så jag tror att det är super trevligt. 101 00:04:39,550 --> 00:04:45,940 Och nackdelarna är, att du har mindre makt ur lådan. 102 00:04:45,940 --> 00:04:49,660 Så när du först öppnar upp Flask, och i Python-program, 103 00:04:49,660 --> 00:04:53,150 du bara skriva från Flask import *, eller vad som helst, 104 00:04:53,150 --> 00:04:55,957 du inte exakt få alla de funktioner du kanske vill. 105 00:04:55,957 --> 00:04:58,540 Och så du måste tydligare lista de funktioner du vill ha. 106 00:04:58,540 --> 00:05:01,990 Så det är en nackdel, men jag tror att för att bygga små webben 107 00:05:01,990 --> 00:05:04,782 program som jag kommer att visa du, det är egentligen inte ett problem. 108 00:05:04,782 --> 00:05:07,281 Och vad det sista är ska säga, vilket är ett stavfel, 109 00:05:07,281 --> 00:05:10,240 är att det finns mindre standardiserade konventioner för hur man använder kolv, 110 00:05:10,240 --> 00:05:12,400 bara för att det inte är så många människor som använder det professionellt 111 00:05:12,400 --> 00:05:13,191 jämfört med Django. 112 00:05:13,191 --> 00:05:16,380 Så, om du tittar något liknande, "Hur gör jag x" i Django, 113 00:05:16,380 --> 00:05:18,190 du kommer förmodligen hitta den. 114 00:05:18,190 --> 00:05:20,260 >> Det finns god design mönster som du kan använda, 115 00:05:20,260 --> 00:05:22,660 men med kolv, det sorts gå din egen väg, 116 00:05:22,660 --> 00:05:24,850 bara för att det är en ganska litet bibliotek. 117 00:05:24,850 --> 00:05:27,100 Så de är nackdelar, men jag tror 118 00:05:27,100 --> 00:05:29,370 att det fortfarande är ett bra bibliotek för att använda. 119 00:05:29,370 --> 00:05:31,909 >> Så låt oss bara hoppa rakt in Flask. 120 00:05:31,909 --> 00:05:34,200 Detta är definitivt inte kommer att vara en komplett handledning, 121 00:05:34,200 --> 00:05:37,480 men det är för att ge dig en idé om hur man kan strukturera saker, 122 00:05:37,480 --> 00:05:40,790 och så att du känner dig bekväm att gå av och titta på dokumentationen 123 00:05:40,790 --> 00:05:42,570 och ta reda på mer. 124 00:05:42,570 --> 00:05:48,500 >> Så, låt mig att öppna upp en riktigt enkelt exempel i början, 125 00:05:48,500 --> 00:05:50,737 och visa dig vad det ser ut, och sedan ska vi 126 00:05:50,737 --> 00:05:52,070 bryta ner det lite mer. 127 00:05:52,070 --> 00:05:56,160 >> Så det här, låt mig få det att fungera. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Så har jag nu min program körs. 130 00:06:09,750 --> 00:06:15,910 Jag kommer att öppna upp Safari, och det körs på min lokala värden. 131 00:06:15,910 --> 00:06:19,360 Så jag bara kommer att göra detta större. 132 00:06:19,360 --> 00:06:23,960 Men localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Och så, just nu, gör allt detta är, när du besöker webbplatsen, 134 00:06:27,650 --> 00:06:31,490 det skriver ut "Hej Flask" som inte är super bra, 135 00:06:31,490 --> 00:06:34,630 men jag tycker det är coolt att i denna lilla filen här, 136 00:06:34,630 --> 00:06:37,390 Vi har en webbserver körs som skriver ut något. 137 00:06:37,390 --> 00:06:40,500 Så, låt oss faktiskt ser på koden för en andra, 138 00:06:40,500 --> 00:06:43,080 och bryta ner det lite. 139 00:06:43,080 --> 00:06:45,260 Är storleken bra för alla här? 140 00:06:45,260 --> 00:06:51,560 >> Så förhoppningsvis du är något bekväm med Python. 141 00:06:51,560 --> 00:06:55,820 Jag antar att vi kan titta på Python och läste igenom det. 142 00:06:55,820 --> 00:06:59,290 Om du har några frågor om något, jag kan också gå över det. 143 00:06:59,290 --> 00:07:03,974 >> Så den första raden är från kolv, vi importerar, kolv med ett kapital "F" 144 00:07:03,974 --> 00:07:06,140 som är typ av alla viktiga funktioner som du behöver. 145 00:07:06,140 --> 00:07:08,890 När du skriver en fil och använda kolv, 146 00:07:08,890 --> 00:07:12,120 du kommer att vilja importera den, bara för att det har alla viktiga saker. 147 00:07:12,120 --> 00:07:15,400 Nästa sak vi gör är att vi kalla denna funktion kolv, precis 148 00:07:15,400 --> 00:07:19,270 att skapa en app objekt, och du är alltid kommer att vilja göra det. 149 00:07:19,270 --> 00:07:25,960 >> Och sedan, hoppar ner till botten snabbt, här är denna del, 150 00:07:25,960 --> 00:07:28,760 "if_name _ ==" _ main_ "" som är sorts Python konvention. 151 00:07:28,760 --> 00:07:32,750 Så det här kommer bara att köra om du köra den här filen direkt med Python. 152 00:07:32,750 --> 00:07:36,040 Sedan vi kallar app.run, vilket kommer faktiskt börja appen går. 153 00:07:36,040 --> 00:07:39,570 >> Så, det är huvudstrukturen som du har i alla kolv ansökan, 154 00:07:39,570 --> 00:07:48,550 är du kommer att ha denna app = Kolv (_name_), och sedan app.run. 155 00:07:48,550 --> 00:07:54,940 >> Så, de två saker som jag har här är vad vi kallar rutter. 156 00:07:54,940 --> 00:07:57,150 Så, låt oss tala om routing lite mer. 157 00:07:57,150 --> 00:07:58,430 Jag ska gå tillbaka till bilden. 158 00:07:58,430 --> 00:08:02,540 >> Så den mest grundläggande koncept i Flask är routing. 159 00:08:02,540 --> 00:08:06,750 Och det är tanken att du tilldela funktioner i Python 160 00:08:06,750 --> 00:08:11,280 till särskilda adresser på din hemsida. 161 00:08:11,280 --> 00:08:13,930 Så, när du vill att skapa en ny rutt, 162 00:08:13,930 --> 00:08:16,500 du använder den här @ app.route funktion dekoratör. 163 00:08:16,500 --> 00:08:19,770 Så, om du är obekant med funktions dekoratörer i Python, 164 00:08:19,770 --> 00:08:24,160 Det är detta begrepp som låter dig ta en funktion 165 00:08:24,160 --> 00:08:26,800 och omge det med något annat. 166 00:08:26,800 --> 00:08:30,140 >> Så egentligen, vad detta dekoratör gör, är att det tar funktionen under det, 167 00:08:30,140 --> 00:08:33,409 och det lägger in mer information till det, men vad Flask faktiskt 168 00:08:33,409 --> 00:08:37,480 gör det hända är inte super avgörande, men vad som är viktigt, 169 00:08:37,480 --> 00:08:43,640 är att innan rutten, du sätta detta @ app.route, och sedan 170 00:08:43,640 --> 00:08:46,480 adressen av rutten, så slash är vad vi 171 00:08:46,480 --> 00:08:48,360 såg när vi öppnar bara upp webbsidan. 172 00:08:48,360 --> 00:08:49,580 Så det är hemsidan. 173 00:08:49,580 --> 00:08:51,037 Det är bara snedstreck vägen. 174 00:08:51,037 --> 00:08:52,370 Och då du har den här funktionen. 175 00:08:52,370 --> 00:08:54,453 Namnet på funktionen kan vara vad du vill. 176 00:08:54,453 --> 00:08:56,930 Det behöver inte nödvändigtvis har att göra med rutten. 177 00:08:56,930 --> 00:08:59,440 Och sedan, oavsett funktionen återkomst, 178 00:08:59,440 --> 00:09:01,730 funktionen ska returnera en sträng. 179 00:09:01,730 --> 00:09:03,740 Och den strängen kan innehåller HTML eller något, 180 00:09:03,740 --> 00:09:06,920 och det är faktiskt vad som kommer att få tillbaka till din webbläsare som HTML, 181 00:09:06,920 --> 00:09:08,200 och det kommer att göra det. 182 00:09:08,200 --> 00:09:12,030 >> Så det här är samma kod som var från exemplet 183 00:09:12,030 --> 00:09:16,430 att jag bara sprang, så när vi besöker snedstreck, man kallar en Hello World funktion, som 184 00:09:16,430 --> 00:09:20,470 bara returnerar en sträng, Hej kolv, och som blir tryckt på skärmen. 185 00:09:20,470 --> 00:09:27,290 >> Så det är ett annat exempel, vilket är, när du besöker / hej, 186 00:09:27,290 --> 00:09:30,370 det skriver ut Hej Word, som egentligen borde säga, Hello World, 187 00:09:30,370 --> 00:09:32,010 men låt oss låtsas att var avsiktligt. 188 00:09:32,010 --> 00:09:35,140 Så låt oss dra det verkliga snabbt upp. 189 00:09:35,140 --> 00:09:41,290 >> Så om du går till localhost / hej, Det kommer nu att skriva ut något annat. 190 00:09:41,290 --> 00:09:45,680 Så det är bara en snabb exempel på hur Du kan skapa två olika vägar. 191 00:09:45,680 --> 00:09:50,630 >> Så, så länge detta inte super bra, det finns inte en hel del du kan göra, 192 00:09:50,630 --> 00:09:55,360 kan du bara göra allt detta med med olika HTML-sidor, 193 00:09:55,360 --> 00:09:58,000 och när du besöker en viss sidan det bara laddar sidan. 194 00:09:58,000 --> 00:10:00,864 Så låt oss se lite mer användbara saker du kan göra. 195 00:10:00,864 --> 00:10:03,780 Så, en sak som du kan ha märkt i exemplet som jag drog 196 00:10:03,780 --> 00:10:07,160 upp, är att jag hade app.run (debug = sant). 197 00:10:07,160 --> 00:10:09,580 Och så, vad detta debug argument gör, är 198 00:10:09,580 --> 00:10:14,600 att när du kör din webbserver, när du är i din ansökan, 199 00:10:14,600 --> 00:10:18,100 Om du ändrar en fil, kommer det automatiskt ladda servern. 200 00:10:18,100 --> 00:10:21,160 >> Och så du inte verkligen måste omstart Python, som är super användbart. 201 00:10:21,160 --> 00:10:24,020 Jag kan visa det. 202 00:10:24,020 --> 00:10:26,960 Låt mig dra upp min kod med stavfel i det, 203 00:10:26,960 --> 00:10:30,420 och låtsas att stavfel lades dit avsiktligt för lärosyfte. 204 00:10:30,420 --> 00:10:31,625 Så låt oss lägga till den här igen. 205 00:10:31,625 --> 00:10:33,140 Så nu står Hello World. 206 00:10:33,140 --> 00:10:34,410 Jag kommer att spara det. 207 00:10:34,410 --> 00:10:36,540 Och om vi drar tillbaka upp terminalen, kommer du 208 00:10:36,540 --> 00:10:39,520 säger att det är att starta, eftersom det upptäcktes en förändring, 209 00:10:39,520 --> 00:10:43,620 och så nu när vi ladda om sidan, det kommer att skriva ut rätt sak. 210 00:10:43,620 --> 00:10:45,630 >> Så debug är super bra för det. 211 00:10:45,630 --> 00:10:48,740 Dessutom, om du har några typ av en krasch, så 212 00:10:48,740 --> 00:10:54,370 Låt mig göra detta programkrasch genom att det inte returnera en sträng. 213 00:10:54,370 --> 00:10:57,540 Så, låt oss bara få det retur Inga av någon anledning. 214 00:10:57,540 --> 00:11:00,810 Och sedan när jag besöker denna sida, kommer det bara att krascha, 215 00:11:00,810 --> 00:11:04,465 men servern inte bara kraschar, det faktiskt ger dig en super bra back 216 00:11:04,465 --> 00:11:06,490 spår av allt som gick fel. 217 00:11:06,490 --> 00:11:10,050 Och vad är riktigt nice, är att vid varje steg i detta tillbaka spår, 218 00:11:10,050 --> 00:11:14,260 du kan öppna upp ett interaktivt skal här, och sorts skriva ut vad 219 00:11:14,260 --> 00:11:17,780 variabler som du vill ta en titt på. 220 00:11:17,780 --> 00:11:21,054 >> Och så felsökning är verkligen användbar för att räkna ut 221 00:11:21,054 --> 00:11:23,470 vad som händer med din server, snarare än att bara se 222 00:11:23,470 --> 00:11:28,201 något i PHP som en 500 internt serverfel, som är super värdelös. 223 00:11:28,201 --> 00:11:30,700 En sak att vara medveten om, är att om du sätter din app på nätet 224 00:11:30,700 --> 00:11:34,260 så det är synlig för allmänheten, du aldrig vill lämna felsökningsläge, 225 00:11:34,260 --> 00:11:37,320 eftersom människor kan faktiskt använda den konsol som jag 226 00:11:37,320 --> 00:11:39,150 visade dig att köra godtycklig kod. 227 00:11:39,150 --> 00:11:42,120 >> Så de kan skriva ut som alla hemliga koder du har där, 228 00:11:42,120 --> 00:11:44,755 De kan titta på exakt hur din webbplats fungerar. 229 00:11:44,755 --> 00:11:46,630 Så det är verkligen användbart för att testa, men alltid 230 00:11:46,630 --> 00:11:50,090 se till att ta det innan du publicerar något på nätet. 231 00:11:50,090 --> 00:11:56,640 >> Så när du använder något som PHP, det är denna idé 232 00:11:56,640 --> 00:11:58,920 att du kan passera informationsutbyte mellan webbsidor 233 00:11:58,920 --> 00:12:03,620 genom att den information som faktiskt i webbadressen, vilket är en begäran GET, 234 00:12:03,620 --> 00:12:07,490 men i kolv, kan du faktiskt göra något slags sånt, 235 00:12:07,490 --> 00:12:10,590 genom att ha en rutt som har en variabel som en del av den. 236 00:12:10,590 --> 00:12:14,090 >> Så om du tittar på detta exempel på skärmen här, 237 00:12:14,090 --> 00:12:19,930 vi har en väg som är ('/ hello /'), och så, om du besöker 238 00:12:19,930 --> 00:12:23,790 / hello / något, att något kommer att faktiskt få fylld 239 00:12:23,790 --> 00:12:25,490 in namnet variabeln. 240 00:12:25,490 --> 00:12:27,850 Och lägg märke till att funktionen som kommer med den vägen 241 00:12:27,850 --> 00:12:31,302 måste ta i parametern namn, så att det kommer faktiskt 242 00:12:31,302 --> 00:12:32,510 får passera in i funktion. 243 00:12:32,510 --> 00:12:34,190 >> Och sedan, när du är insidan av den funktionen, 244 00:12:34,190 --> 00:12:36,420 du kan behandla det som en normal Python variabel, 245 00:12:36,420 --> 00:12:39,650 och så då kommer det skriva ut Hej, och det 246 00:12:39,650 --> 00:12:42,000 fyller i namnet med hjälp någon sträng formatering. 247 00:12:42,000 --> 00:12:48,060 >> Så för att lägga till rörliga delar till en routing, du använder vinkeln märkning. 248 00:12:48,060 --> 00:12:51,220 Och eventuellt kan du använda vad som kallas en omvandlare. 249 00:12:51,220 --> 00:12:56,840 Och så, om du sätter denna annotering med kolon, 250 00:12:56,840 --> 00:13:00,015 Du kan ange att det är en int, eller en flottör, eller stig, 251 00:13:00,015 --> 00:13:01,640 och det kommer automatiskt konvertera det. 252 00:13:01,640 --> 00:13:05,130 Du kan också göra konverteringen inom Python-funktionen, 253 00:13:05,130 --> 00:13:09,710 bara genom att använda en gjuten, men ibland om du vill se till att det är en int, 254 00:13:09,710 --> 00:13:12,080 du kan sätta det omräkningsregeln där. 255 00:13:12,080 --> 00:13:15,930 >> Så låt oss dra upp ett exempel av vissa variabla regler. 256 00:13:15,930 --> 00:13:21,480 Så här har det samma grundläggande struktur med från Flask import 257 00:13:21,480 --> 00:13:25,030 Kolv, App = Flask (_name_), och sedan det körs i slutet. 258 00:13:25,030 --> 00:13:28,050 Vi har dessa två olika variabla vägar här. 259 00:13:28,050 --> 00:13:29,900 Och det första en, är det som jag visade 260 00:13:29,900 --> 00:13:34,230 i bilden, nämligen att det tar bara i en sträng namn 261 00:13:34,230 --> 00:13:35,650 och det kommer att skriva ut Hej Name. 262 00:13:35,650 --> 00:13:41,410 >> Och sedan, den andra man använder konverteringen. 263 00:13:41,410 --> 00:13:44,690 Så det här kommer automatiskt konvertera det till en int, och sedan dubbla int, 264 00:13:44,690 --> 00:13:46,150 och skriva ut det. 265 00:13:46,150 --> 00:13:48,220 Och gör vi inte någon form av omvandling inom det 266 00:13:48,220 --> 00:13:49,594 eftersom Flask tar hand om det. 267 00:13:49,594 --> 00:13:53,181 Så låt oss få detta igång. 268 00:13:53,181 --> 00:13:54,930 När du har en kolv program som körs, 269 00:13:54,930 --> 00:13:58,440 Du kan styra-C av det för att stoppa server som kör. 270 00:13:58,440 --> 00:14:02,420 Och då kommer jag köra variablerna. 271 00:14:02,420 --> 00:14:11,740 >> Så låt oss gå till localhost / hello / Esra och Förhoppningsvis kommer detta att säga hej till mig. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Så det tog i mitt namn, i variabeln rutt, och det fyllde den här. 274 00:14:20,310 --> 00:14:23,950 Så jag ska också visa en sammanfattning exempel på en fördubbling. 275 00:14:23,950 --> 00:14:28,600 Så om du går till / dubbel / 3, det kommer att skriva ut 6. 276 00:14:28,600 --> 00:14:31,440 Så detta tog hand om omvandlingen för oss. 277 00:14:31,440 --> 00:14:34,190 >> Så du kan också göra det med flyta, och något speciellt, 278 00:14:34,190 --> 00:14:37,530 om du behöver ange något i stil en väg, som gör det accepterar snedstreck, 279 00:14:37,530 --> 00:14:39,155 men det borde inte brukar vara ett problem. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Hittills har vi fortfarande ha just återvänt 282 00:14:43,820 --> 00:14:46,320 strängar, vilket inte är mycket intressant. 283 00:14:46,320 --> 00:14:48,730 >> Vi kunde faktiskt tillbaka bokstav HTML-strängen. 284 00:14:48,730 --> 00:14:54,322 Så i koden kan vi sätta in något som b-taggen för att göra det djärvt, 285 00:14:54,322 --> 00:14:56,030 men de flesta den tid du egentligen inte vill 286 00:14:56,030 --> 00:14:58,420 vara att skriva HTML-kod i Python-kod. 287 00:14:58,420 --> 00:15:01,940 Det blir riktigt rörigt, och det är inte en bra tid. 288 00:15:01,940 --> 00:15:06,430 >> Flask tillåter oss att separera ut HTML i vad som kallas Mall, 289 00:15:06,430 --> 00:15:09,467 och så om du funderar i termer av MVC-modellen 290 00:15:09,467 --> 00:15:11,550 att du är bekant med, förhoppningsvis, från att arbeta 291 00:15:11,550 --> 00:15:15,520 med CS50 Finance lite, du kan tänka på Python-filer 292 00:15:15,520 --> 00:15:19,430 som mer av Controller, där de interagerar med vad 293 00:15:19,430 --> 00:15:20,970 datamodell du kan ha. 294 00:15:20,970 --> 00:15:24,900 >> Och sedan de ropa till Visningar och vidarebefordrar information till denna uppfattning 295 00:15:24,900 --> 00:15:28,120 att fylla i uppgifter i HTML som den behöver. 296 00:15:28,120 --> 00:15:30,490 Och vad vi kallar dessa Visningar är Mallar i klassen. 297 00:15:30,490 --> 00:15:35,280 >> Så Flask använder annan Python modul som det automatiskt 298 00:15:35,280 --> 00:15:38,620 installeras när du PiP installera Flask heter Jinja, som 299 00:15:38,620 --> 00:15:40,885 låter dig lägga till dessa anteckningar till HTML 300 00:15:40,885 --> 00:15:45,140 som du ser på skärmen, kan det du sätter in saker som villkors, 301 00:15:45,140 --> 00:15:47,230 och loopar i HTML. 302 00:15:47,230 --> 00:15:51,140 >> Så det ser ut lite som hur du kan använda PHP i en HTML-fil, 303 00:15:51,140 --> 00:15:57,380 men detta är bara då kolven server serverar HTML-filen, 304 00:15:57,380 --> 00:16:01,610 det kommer att köras den här mallmotor och analysera igenom det här och fyll saker. 305 00:16:01,610 --> 00:16:06,650 Så kolv har en render_template funktion att du kan se längst ner här. 306 00:16:06,650 --> 00:16:14,300 Och så när du besöker denna sida, det skulle göra detta hello.html Mall, 307 00:16:14,300 --> 00:16:16,407 och sedan fylla i denna HTML-sida. 308 00:16:16,407 --> 00:16:18,990 Så låt oss bara köra denna verkliga snabb, och se hur det ser ut, 309 00:16:18,990 --> 00:16:21,198 och sedan ska jag gå igenom en lite mer i detalj. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Så, är dina mallar går att gå i en mappen Mallar. 312 00:16:30,260 --> 00:16:33,980 Det kommer automatiskt att leta i Mallar mapp för den mallen. 313 00:16:33,980 --> 00:16:35,615 Så låt oss öppna denna. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Så ska jag köra mallhantering exempel. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Så om jag går till / hello / ezra, har denna fruktansvärda, 318 00:17:03,660 --> 00:17:05,930 vidrig tält tagg som jag satte in. 319 00:17:05,930 --> 00:17:08,050 Mycket trevligt, mycket dynamisk. 320 00:17:08,050 --> 00:17:09,349 Jag är ett stort fan. 321 00:17:09,349 --> 00:17:13,900 Men vad händer om Jag går bara till / hej? 322 00:17:13,900 --> 00:17:15,220 Så det bara säger Hello World. 323 00:17:15,220 --> 00:17:17,678 Jag ville inte ge det ett namn och det fyllde automatiskt. 324 00:17:17,678 --> 00:17:22,050 Så låt oss se hur det gjorde det, och hur vi kan bli av med den markeringsramen kanske. 325 00:17:22,050 --> 00:17:26,240 >> Så här är den här sortens ett intressant exempel på, 326 00:17:26,240 --> 00:17:29,101 om du är bekant med hur switch uttalanden arbeta på ett språk. 327 00:17:29,101 --> 00:17:31,350 Säg detta är ungefär som, den sortens ett fall genom, 328 00:17:31,350 --> 00:17:34,266 där du faktiskt fäst två olika vägar till samma funktion. 329 00:17:34,266 --> 00:17:41,190 Så vi fäster / hello rutt och den / hello / namn väg till Hello, 330 00:17:41,190 --> 00:17:45,130 och vi anger using-- Python låter dig ange standardfunktion arguments-- 331 00:17:45,130 --> 00:17:48,300 så om det inte finns något namn, så om vi går bara / hej, 332 00:17:48,300 --> 00:17:50,680 Det kommer automatiskt att filtrera att nämna är lika med None. 333 00:17:50,680 --> 00:17:55,010 >> Alltså, vi göra Mall med name = namn, 334 00:17:55,010 --> 00:17:59,510 så det kommer att passera i parametern name lika med detta namn funktionsparameter, 335 00:17:59,510 --> 00:18:00,730 i mallen. 336 00:18:00,730 --> 00:18:04,040 Det fortfarande inte förklara hur är fattar beslut om att skriva ut Hello World, 337 00:18:04,040 --> 00:18:05,100 eller skriva ut mitt namn. 338 00:18:05,100 --> 00:18:08,050 Så låt oss faktiskt ser i själva mallen, 339 00:18:08,050 --> 00:18:11,610 och se vart det kommer ifrån. 340 00:18:11,610 --> 00:18:18,680 >> Så, i denna mall, vi faktiskt har en del villkorslogik, 341 00:18:18,680 --> 00:18:20,580 som vissa människor skulle argumentera, du faktiskt 342 00:18:20,580 --> 00:18:23,730 bör inte ha en massa villkorad logik inom din mall själv. 343 00:18:23,730 --> 00:18:26,310 Det bör vara mer inom Controller, men för detta exempel 344 00:18:26,310 --> 00:18:27,476 det är något ganska små. 345 00:18:27,476 --> 00:18:31,060 Så här kontrollerar vi, om namn, så om namnet inte är lika med None, 346 00:18:31,060 --> 00:18:33,130 om ett namn är faktiskt passerade, då kommer vi 347 00:18:33,130 --> 00:18:36,210 säger Hej Name med header och tält, 348 00:18:36,210 --> 00:18:41,490 allt detta normalt HTML, annars kommer vi skriva ut Hello, World bara normalt. 349 00:18:41,490 --> 00:18:45,820 Så ett par saker att lägga märke till här om hur du formaterar mall, 350 00:18:45,820 --> 00:18:49,110 är att, alla dessa villkorssatser, 351 00:18:49,110 --> 00:18:54,475 ungefär som hur vi PHP när du vill infoga någon PHP, 352 00:18:54,475 --> 00:18:58,380 du använder mindre än fråga märke, det är typ av analogt här 353 00:18:58,380 --> 00:19:00,140 med {%. 354 00:19:00,140 --> 00:19:02,130 >> Så här har vi vår villkorlig kod. 355 00:19:02,130 --> 00:19:05,920 Och sedan, när du faktiskt vill bokstavligen utvärdera något, och skriva ut 356 00:19:05,920 --> 00:19:08,710 ut till skärmen, du Använd dubbla hängslen. 357 00:19:08,710 --> 00:19:12,310 Så här är de dubbla hängslen, och ange sedan vi namn, 358 00:19:12,310 --> 00:19:15,500 så inom den, kommer det att utvärdera till variabelnamn, vilket 359 00:19:15,500 --> 00:19:18,860 leddes in från render mall funktion, 360 00:19:18,860 --> 00:19:21,484 snarare än bara utskrift ut, om vi fick bli av med dessa, 361 00:19:21,484 --> 00:19:23,150 Det skulle bara skriva ut ordet "namn." 362 00:19:23,150 --> 00:19:26,340 Så, det är något att se upp för. 363 00:19:26,340 --> 00:19:29,792 >> Så en annan sak att meddelande är att när vi 364 00:19:29,792 --> 00:19:31,500 vill använda render_template funktion, 365 00:19:31,500 --> 00:19:34,490 vi faktiskt måste importera uttryckligen från Flask. 366 00:19:34,490 --> 00:19:36,915 Och detta är ett exempel på modulariteten hos kolv, 367 00:19:36,915 --> 00:19:39,290 att du inte behöver importera saker som du inte behöver. 368 00:19:39,290 --> 00:19:41,290 Du kan bara ta in funktioner du faktiskt 369 00:19:41,290 --> 00:19:43,450 behöver, som ibland trevligt, så att du inte 370 00:19:43,450 --> 00:19:46,560 måste ha alla dessa funktioner sitta som du inte använder, 371 00:19:46,560 --> 00:19:49,730 men också, om du glömmer att du behöver importera render_template, 372 00:19:49,730 --> 00:19:52,660 du kommer förmodligen att få en varning som låter dig veta om det. 373 00:19:52,660 --> 00:19:56,700 Så, är det schablon. 374 00:19:56,700 --> 00:20:01,680 >> Så har vi visat hur man göra enkla webbsidor, 375 00:20:01,680 --> 00:20:04,947 och lägga till lite mer logik det, i termer av den variabla dirigering. 376 00:20:04,947 --> 00:20:08,280 Den låter dig göra olika saker baserat på vilken webbadress du går till, och även då, ge 377 00:20:08,280 --> 00:20:11,950 HTML lite mer mening det gäller hur du vill göra saker. 378 00:20:11,950 --> 00:20:14,210 Du behöver inte lägga alla HTML i Python, 379 00:20:14,210 --> 00:20:16,640 men för ganska mycket varje webbapplikation, 380 00:20:16,640 --> 00:20:21,480 du kommer att vilja något slags av datamodellen i samband med det. 381 00:20:21,480 --> 00:20:25,560 >> Och så traditionellt, skulle detta vara något som en SQL-databas. 382 00:20:25,560 --> 00:20:30,280 Och du kan bara interagera direkt med SQL. 383 00:20:30,280 --> 00:20:32,190 Python har, tror jag det heter. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Du kan bara importera SQLite 3 och köra SQL-frågor direkt, 386 00:20:38,454 --> 00:20:40,870 men jag vet inte om dig, men jag verkligen inte gillar, bara, 387 00:20:40,870 --> 00:20:42,750 skriva ut SQL-frågor. 388 00:20:42,750 --> 00:20:45,350 Det tenderar att bli riktigt lång och komplicerad. 389 00:20:45,350 --> 00:20:49,180 >> Och så, något som Jag gillar att använda är vad 390 00:20:49,180 --> 00:20:53,610 känd som en ORM, som är en objektrelationsmappning. 391 00:20:53,610 --> 00:20:56,890 Och poängen med en objektrelationsmappning, 392 00:20:56,890 --> 00:21:00,100 är att det finns två olika sätt du kan tänka på databaser. 393 00:21:00,100 --> 00:21:03,240 >> Så exempel som Professor Malan vanligtvis 394 00:21:03,240 --> 00:21:07,660 använder i klassen, är Excel-tabellen, där du har dessa rader och dessa kolumner, 395 00:21:07,660 --> 00:21:10,210 och det är verkligen användbart för hur den skall företrädas i SQL 396 00:21:10,210 --> 00:21:13,170 och hur du interagerar med det, men ett annat sätt att det faktiskt 397 00:21:13,170 --> 00:21:16,390 nyttigt att tänka på det ibland, är i form av klasser och objekt. 398 00:21:16,390 --> 00:21:20,420 >> Så istället för att tänka i varje tabell som har 399 00:21:20,420 --> 00:21:23,040 den här raden som har vissa information kan du faktiskt 400 00:21:23,040 --> 00:21:26,100 tänka på det som varje bord är en klass, 401 00:21:26,100 --> 00:21:29,810 och sedan varje instans av klass har vissa egenskaper. 402 00:21:29,810 --> 00:21:35,110 Så i det här exemplet, förekomster av klassen är de rader i tabellen, 403 00:21:35,110 --> 00:21:37,490 och sedan varje fastighet skulle vara en kolumn i tabellen. 404 00:21:37,490 --> 00:21:40,840 >> Så, ORM som jag gillar att använda kallas peewee. 405 00:21:40,840 --> 00:21:43,520 Det är verkligen små, ungefär som kolv. 406 00:21:43,520 --> 00:21:46,760 Jag tror att de går bra ihop, men det finns en hel del andra ORMS 407 00:21:46,760 --> 00:21:47,730 som du kan använda. 408 00:21:47,730 --> 00:21:52,180 En mer populär man är känd som SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 och jag kan inte komma ihåg varför jag ursprungligen valde peewee över SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 eller jag skulle berätta varför jag tror att det är den bästa, 411 00:21:58,311 --> 00:22:01,060 men vi kommer bara att använda detta eftersom jag vet hur man använder den. 412 00:22:01,060 --> 00:22:04,760 >> Så, är en fråga, varför ska du bry använder en ORM, 413 00:22:04,760 --> 00:22:07,552 istället för att bara direkt skriver SQL-frågor? 414 00:22:07,552 --> 00:22:09,760 Och jag tror att det bästa fall är att du egentligen inte 415 00:22:09,760 --> 00:22:11,356 måste skriva SQL-frågor. 416 00:22:11,356 --> 00:22:14,480 Det är mycket lättare, eftersom jag ska visa dig, gör saker som val, införande, 417 00:22:14,480 --> 00:22:16,157 radering, särskilt skapa tabeller. 418 00:22:16,157 --> 00:22:17,990 Det är mycket lättare att skriva ett klasstruktur, 419 00:22:17,990 --> 00:22:22,250 än det är att strukturera en Skapa Tabell uttalande, men en sak 420 00:22:22,250 --> 00:22:25,710 att vara medveten om, är att ORM kommer att försöka sitt bästa 421 00:22:25,710 --> 00:22:28,640 att räkna ut vad det mest effektiv SQL-fråga skulle vara, 422 00:22:28,640 --> 00:22:30,110 men ibland blir det fel. 423 00:22:30,110 --> 00:22:32,660 >> Och särskilt om du är arbetar med en stor databas, 424 00:22:32,660 --> 00:22:35,557 Du kan märka att en fråga som bör vara igång snabbt, 425 00:22:35,557 --> 00:22:36,640 faktiskt tar längre tid. 426 00:22:36,640 --> 00:22:40,164 Och om man tittar under huven på hur ORM tolkar det till SQL, 427 00:22:40,164 --> 00:22:42,080 det kan göra något verkligen löjligt, 428 00:22:42,080 --> 00:22:44,371 bara för att det slags gest era avsikter fel. 429 00:22:44,371 --> 00:22:48,080 Och har det funnits tillfällen där Jag har haft att åsidosätta den, och bara 430 00:22:48,080 --> 00:22:52,429 köra mina egna SQL-frågor, bara eftersom det var parsning på ett märkligt sätt. 431 00:22:52,429 --> 00:22:54,220 Så finns det vissa overhead, precis på det sätt 432 00:22:54,220 --> 00:22:58,680 att det sammanställer din uttalanden ner i SQL. 433 00:22:58,680 --> 00:23:06,200 >> Så, låt oss titta super snabbt på ett enkelt exempel på en datamodell 434 00:23:06,200 --> 00:23:07,350 som du kan använda. 435 00:23:07,350 --> 00:23:11,880 Så detta är Python-kod, och så första du vill göra är från 436 00:23:11,880 --> 00:23:12,950 peewee import *. 437 00:23:12,950 --> 00:23:15,850 Så, till skillnad från kolv, där du har alla dessa enskilda moduler, 438 00:23:15,850 --> 00:23:18,125 och du vill importera kolv, och skriva en mall, och några andra 439 00:23:18,125 --> 00:23:20,690 att vi kommer att se senare, från peewee, Du kan bara importera allt, 440 00:23:20,690 --> 00:23:22,290 eftersom det är en ganska litet bibliotek. 441 00:23:22,290 --> 00:23:26,490 >> Så, är det första du vill göra, är faktiskt skapa denna databasobjektet. 442 00:23:26,490 --> 00:23:31,212 Så, har du db = SqliteDatabase, och sedan namnet på din databas. 443 00:23:31,212 --> 00:23:33,170 Och detta kommer faktiskt skapa en databasobjekt 444 00:23:33,170 --> 00:23:36,230 att du kan interagera med, med peewee. 445 00:23:36,230 --> 00:23:40,570 >> Och sedan har vi den faktiska modell som vi vill skapa. 446 00:23:40,570 --> 00:23:42,470 Så tabellen vi vill skapa. 447 00:23:42,470 --> 00:23:47,270 Så inom peewee, har varje klass sin egen tabell i din databas. 448 00:23:47,270 --> 00:23:52,800 Så, alla klasser ärva från basmodellen, 449 00:23:52,800 --> 00:23:55,960 och kapital M-modellen är något som definieras i peewee. 450 00:23:55,960 --> 00:24:02,162 >> Så, alla dina modeller ska ärva som högsta super, 451 00:24:02,162 --> 00:24:04,620 de bör ärva från modell, men vad är riktigt coolt, 452 00:24:04,620 --> 00:24:07,610 är att du faktiskt kan få din modeller ärver från varandra. 453 00:24:07,610 --> 00:24:10,530 Och en stor del av tiden, din datamodeller inte nödvändigtvis 454 00:24:10,530 --> 00:24:13,754 göra en fin arvshierarkin, men tider där de gör, det är verkligen trevligt, 455 00:24:13,754 --> 00:24:15,920 eftersom du har modellen inneboende från varandra. 456 00:24:15,920 --> 00:24:19,710 >> Så definierade vi denna klass "elev", som ärver en modell, 457 00:24:19,710 --> 00:24:21,170 och den har tre egenskaper. 458 00:24:21,170 --> 00:24:24,080 Den har ett ID, som är en PrimaryKeyField, som 459 00:24:24,080 --> 00:24:26,920 är något som tillhandahålls genom peewee, är namnet en Charfield, 460 00:24:26,920 --> 00:24:28,490 och en klass är en IntegerField. 461 00:24:28,490 --> 00:24:32,260 Så detta kan eller inte kan vara hur CS50 faktiskt lagrar alla 462 00:24:32,260 --> 00:24:33,650 elevernas betyg. 463 00:24:33,650 --> 00:24:36,060 Det är inte, men det är hur jag skulle göra det. 464 00:24:36,060 --> 00:24:37,920 >> Och då har det, inom denna klass, och detta 465 00:24:37,920 --> 00:24:41,620 är något du kan göra med Python, kan du få kapslade klasser. 466 00:24:41,620 --> 00:24:43,920 Och detta är något som behövs av peewee. 467 00:24:43,920 --> 00:24:47,250 Så, denna klass Meta, har du att ange att databasen är 468 00:24:47,250 --> 00:24:49,830 lika med föremålet att vi skapade ovan. 469 00:24:49,830 --> 00:24:54,339 Och det säger vad filen är den här tabellen faktiskt kommer att ingå i. 470 00:24:54,339 --> 00:24:57,130 Så detta är något som du har att göra inom alla dina modeller. 471 00:24:57,130 --> 00:24:59,380 Du måste bara ange inom denna Meta klass 472 00:24:59,380 --> 00:25:01,400 att databasen är lika med db. 473 00:25:01,400 --> 00:25:03,940 Så vad jag brukar göra, om jag har ett gäng olika modeller, 474 00:25:03,940 --> 00:25:05,910 är att jag har en bas modell, som jag brukar 475 00:25:05,910 --> 00:25:08,839 bara kallar "basmodellen" som har Meta klassen, 476 00:25:08,839 --> 00:25:10,380 och det sätter databasen är lika med db. 477 00:25:10,380 --> 00:25:13,710 Och sedan alla mina efterföljande modeller kommer att ärva från den basklass. 478 00:25:13,710 --> 00:25:16,760 Och då jag inte behöver oroa om hur Meta klassen. 479 00:25:16,760 --> 00:25:21,490 >> Så när detta faktiskt blir samman ner i en SQL-sats, 480 00:25:21,490 --> 00:25:24,875 Det ser ut så här otäck sak ner här "Skapa tabell studentlegitimation heltal, 481 00:25:24,875 --> 00:25:26,020 " vad som helst. 482 00:25:26,020 --> 00:25:30,002 >> Och jag tror att det är kortare, denna SQL-fråga här, 483 00:25:30,002 --> 00:25:32,960 men om man tittar på den här klassen här du kan se exakt vad som händer. 484 00:25:32,960 --> 00:25:36,116 Du kan se vilka typer av fält Det finns, vad de kallas, 485 00:25:36,116 --> 00:25:38,115 och så, jag tror att titta på denna Python-kod 486 00:25:38,115 --> 00:25:43,340 är mycket mer lättläst än försöker skriva denna SQL-frågan. 487 00:25:43,340 --> 00:25:45,990 >> Så, för att verkligen använda databasen, 488 00:25:45,990 --> 00:25:48,470 Vi måste ansluta till den inom Python. 489 00:25:48,470 --> 00:25:52,770 Så jag brukar skriva en funktion som kallas initialize_db som gör två saker. 490 00:25:52,770 --> 00:25:54,880 Det tar i databasen objekt db och det 491 00:25:54,880 --> 00:25:58,360 ansluter till den, som bara öppnas upp avsnitt till databasen. 492 00:25:58,360 --> 00:26:00,860 Om du bara kör om webbplats på den lokala datorn, 493 00:26:00,860 --> 00:26:04,320 Det är inte en super stor sak att oroa om att ansluta och koppla, 494 00:26:04,320 --> 00:26:06,885 men om du kör det på en webbplats, du 495 00:26:06,885 --> 00:26:10,010 vill vara säker på att, när en användare ansluter till den, när de stänger ute 496 00:26:10,010 --> 00:26:12,270 hemsidan, de kopplar så att du inte har en massa människor som är anslutna 497 00:26:12,270 --> 00:26:14,480 till din databas på en gång. 498 00:26:14,480 --> 00:26:16,370 >> Och sedan, när du ansluta till databasen, 499 00:26:16,370 --> 00:26:20,832 du vill ringa db.create_tables, och en förteckning över de modeller för vad du vill 500 00:26:20,832 --> 00:26:21,540 att skapa tabeller. 501 00:26:21,540 --> 00:26:23,950 Så här, jag vill bara skapar det för denna elev. 502 00:26:23,950 --> 00:26:28,070 Och sedan, vad som är viktigt, är att ange säker = Sant mest tid. 503 00:26:28,070 --> 00:26:30,380 Så vad detta uttalande kommer att göra, är att det 504 00:26:30,380 --> 00:26:33,580 skapar tabeller för elev modell, men endast 505 00:26:33,580 --> 00:26:36,109 om tabellen har inte skapats redan. 506 00:26:36,109 --> 00:26:37,400 Det är vad de säkra anger. 507 00:26:37,400 --> 00:26:39,150 Så det kommer inte att skriva över din befintliga tabellen, 508 00:26:39,150 --> 00:26:41,525 Det kommer bara att skapa en ny tabell om det inte finns där. 509 00:26:41,525 --> 00:26:45,090 Så kan du bara skapa tabellerna en gång med hjälp av SQL. 510 00:26:45,090 --> 00:26:49,410 Och sedan har databasen sammanträde där, och sedan ansluta till varje gång, 511 00:26:49,410 --> 00:26:52,450 men det är oftast trevligt bara lägger i detta create_tables samtal 512 00:26:52,450 --> 00:26:55,550 så att, om du någonsin ta bort databasen när du kör din webb 513 00:26:55,550 --> 00:26:57,960 app igen, kommer det att återskapa den. 514 00:26:57,960 --> 00:27:00,730 >> Så, bara se till att säkra specificeras för att vara sant, 515 00:27:00,730 --> 00:27:03,580 eller hittar du dina uppgifter bara få clobbered varje gång. 516 00:27:03,580 --> 00:27:06,380 Och då kan du bara ringa initialize_db att etablera 517 00:27:06,380 --> 00:27:09,820 en anslutning, och skapa tabeller vid behov. 518 00:27:09,820 --> 00:27:13,150 >> Så, den vanligaste sak att du kommer att vilja göra, 519 00:27:13,150 --> 00:27:15,920 eller en av de vanligaste aktiviteterna, är att faktiskt sätta in saker 520 00:27:15,920 --> 00:27:17,170 i din databas. 521 00:27:17,170 --> 00:27:19,430 Och så, i stället för att att skriva en insats INTO 522 00:27:19,430 --> 00:27:21,990 meddelande med alla de värden som anges, 523 00:27:21,990 --> 00:27:24,650 du faktiskt kan ringa funktionen på studentklassen. 524 00:27:24,650 --> 00:27:28,200 Så, när du skapar en klass som ärver från modellen, 525 00:27:28,200 --> 00:27:30,200 det har denna skapa metod. 526 00:27:30,200 --> 00:27:33,870 >> Så gör du klass name.create, och du anger parametrarna 527 00:27:33,870 --> 00:27:35,260 som du vill passera. 528 00:27:35,260 --> 00:27:39,200 Så, om jag vill lägga till några studenter till vår CS50 klass bok exempel, 529 00:27:39,200 --> 00:27:41,820 Jag ska sätta in David, som har en mycket bra kvalitet, har han en 95. 530 00:27:41,820 --> 00:27:45,100 Och jag själv, vem gör inte så bra i CS50, jag har ett 50. 531 00:27:45,100 --> 00:27:47,600 Och så, den fina vad detta skapar funktionen gör, 532 00:27:47,600 --> 00:27:53,040 är att den returnerar exempel, eller den rad, att det skapas i tabellen, 533 00:27:53,040 --> 00:27:55,750 och så då du lagra den i en variabel, och arbete med det senare. 534 00:27:55,750 --> 00:27:58,830 Du kan ändra runt, vilket Jag ska visa ett exempel på. 535 00:27:58,830 --> 00:28:03,050 >> Lägg märke till att jag inte måste ange ID, 536 00:28:03,050 --> 00:28:09,340 eftersom eftersom det är PrimaryKeyField, kommer den automatiskt 537 00:28:09,340 --> 00:28:10,930 öka det om du inte anger det. 538 00:28:10,930 --> 00:28:12,250 Och i själva verket har du förmodligen bör inte ange det, 539 00:28:12,250 --> 00:28:14,810 eftersom du kanske av misstag clobber någon annans ID. 540 00:28:14,810 --> 00:28:16,830 Och du vill göra säker på att det är unikt. 541 00:28:16,830 --> 00:28:20,662 >> Så, faktiskt, den mest gemensam sak du vill göra, 542 00:28:20,662 --> 00:28:22,620 förmodligen välja ut av databasen när du 543 00:28:22,620 --> 00:28:24,078 har en hel del information i det. 544 00:28:24,078 --> 00:28:27,360 Och så, om du vill få allt, så motsvarar den valda stjärnan 545 00:28:27,360 --> 00:28:30,940 från studenter uttalande, det skulle bara vara student.select. 546 00:28:30,940 --> 00:28:34,380 Och det kommer att ge dig tillbaka en array med alla studenten objekt i det 547 00:28:34,380 --> 00:28:35,770 att du iterera över du vill. 548 00:28:35,770 --> 00:28:37,019 Du kan få saker ur det. 549 00:28:37,019 --> 00:28:39,310 Och för det mesta, du inte bara vill göra välja, 550 00:28:39,310 --> 00:28:40,935 du verkligen vill ange något. 551 00:28:40,935 --> 00:28:44,580 Och så kan du kedja ihop dessa funktionsanrop, 552 00:28:44,580 --> 00:28:48,830 som hur du skulle kedja tillsammans uttalandena i SQL. 553 00:28:48,830 --> 00:28:53,002 Så du kan göra student.select (). Där i detta exempel. 554 00:28:53,002 --> 00:28:54,710 Och sedan kan du fastställa villkoren, 555 00:28:54,710 --> 00:28:57,880 bara använda normal Python Booleans att kontrollera saker. 556 00:28:57,880 --> 00:29:02,110 >> Så i det här fallet, vill du begränsa vad du väljer till 557 00:29:02,110 --> 00:29:06,790 där student.grade är lika med 50, och student.name är lika med Ezra, 558 00:29:06,790 --> 00:29:09,130 så det kommer bara få mig ur det. 559 00:29:09,130 --> 00:29:11,340 Och lägg märke till, en riktigt subtila sak här är 560 00:29:11,340 --> 00:29:15,570 att om du vill ange en och / och eller ett eller / eller, 561 00:29:15,570 --> 00:29:19,840 i Python, skulle du normalt använder, Jag tror att ordet "och" faktiskt, 562 00:29:19,840 --> 00:29:23,351 men här du använder enda et-tecken, som normalt är en bitvis operatör, 563 00:29:23,351 --> 00:29:25,600 men i detta speciella fall, precis som peewee gör det, 564 00:29:25,600 --> 00:29:27,660 du använder enda et-tecken för att ange "och." 565 00:29:27,660 --> 00:29:29,451 Det är något som Jag får blandas upp en hel del, 566 00:29:29,451 --> 00:29:32,530 men det kommer inte upp så mycket i praktiken. 567 00:29:32,530 --> 00:29:36,350 >> Och sedan, när du har alla eleverna ut ur databasen, 568 00:29:36,350 --> 00:29:39,420 när du har gjort du väljer och din slitage eller vad som helst, 569 00:29:39,420 --> 00:29:42,334 du kan använda en foreach loop, precis som vanligt i Python, 570 00:29:42,334 --> 00:29:44,500 med någon form av iterator eller med någon form av matris. 571 00:29:44,500 --> 00:29:46,333 Så du kan göra, för s i student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), och så detta kommer iterera över varje elev i tabellen 573 00:29:52,930 --> 00:29:56,260 vars kvalitet är mindre än 75, som i det här fallet, är fortfarande bara mig. 574 00:29:56,260 --> 00:29:59,218 Och då kan du göra något inom slingan, som skicka mig ett mail 575 00:29:59,218 --> 00:30:01,680 och berätta att faktiskt lämna in mina Problem set. 576 00:30:01,680 --> 00:30:04,550 >> Så, en annan sak du kan gör, är det är verkligen lätt 577 00:30:04,550 --> 00:30:06,460 att uppdatera rader i tabellen. 578 00:30:06,460 --> 00:30:08,720 Så kom ihåg tillbaka hit, din när jag in, 579 00:30:08,720 --> 00:30:11,440 Jag tog det värde som var returneras av student.create, 580 00:30:11,440 --> 00:30:14,920 och jag tilldelat den till namnet heter Ezra. 581 00:30:14,920 --> 00:30:18,995 Och så nu kan du ändra värden inom det fallet 582 00:30:18,995 --> 00:30:20,870 precis som du skulle en normal klass i Python. 583 00:30:20,870 --> 00:30:25,060 >> Så du kan ställa in ezra.grade = 95 och som kommer att uppdatera den lokala kopian, 584 00:30:25,060 --> 00:30:28,380 men om du verkligen vill åtar sig att förändring databas 585 00:30:28,380 --> 00:30:31,410 du måste ringa ezra.save, så att du ringde .save metod 586 00:30:31,410 --> 00:30:32,650 på instansen. 587 00:30:32,650 --> 00:30:38,085 >> Och så nu har jag har ändrats min egen klass i databasen. 588 00:30:38,085 --> 00:30:41,210 Så, låt oss säga att jag fastnar ändra min klass i databasen. 589 00:30:41,210 --> 00:30:44,126 Professor Malan är förmodligen kommer att vilja ta bort mig från klassen, 590 00:30:44,126 --> 00:30:48,630 och så att du kan ringa .delete förekomstmetod bara på den saken. 591 00:30:48,630 --> 00:30:51,674 >> Så, om du ville gå tillbaka in i denna slinga här, 592 00:30:51,674 --> 00:30:53,465 och faktiskt, i stället för att skicka e-post alla 593 00:30:53,465 --> 00:30:56,577 av studenterna vars kvalitet är mindre än 75, ville att du skulle ta bort dem, 594 00:30:56,577 --> 00:30:58,660 inom denna slinga du kan Ring s.delete instans. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Och den allra sista sak du vill göra, är när du upprätta en anslutning, 597 00:31:07,780 --> 00:31:10,350 och du är klar med ditt arbete, du vill ringa db.close, 598 00:31:10,350 --> 00:31:13,190 där db är att databasen invända att vi hade tidigare. 599 00:31:13,190 --> 00:31:18,290 Och du vill vara säker på att allt blir stängs av. 600 00:31:18,290 --> 00:31:18,790 >> Häftigt. 601 00:31:18,790 --> 00:31:22,410 Så nu har jag ett exempel ansökan. 602 00:31:22,410 --> 00:31:26,880 Jag har typ av pre-gjort allt bara så att det inte blir någon levande kodning 603 00:31:26,880 --> 00:31:30,220 misstag, men vi kan gå igenom det och se hur du skulle sätta Flask 604 00:31:30,220 --> 00:31:33,685 och Peewee tillsammans, och göra en enkel app. 605 00:31:33,685 --> 00:31:38,680 Jag kallar det CS50 rant, och det är en slags enkel blogg plattform. 606 00:31:38,680 --> 00:31:41,150 >> Så först ska jag köra det och visa hur det ser ut, 607 00:31:41,150 --> 00:31:42,890 och då kan vi titta mer i koden. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Okej, så låt oss bara köra detta. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, jag ska göra det här lite mindre. 612 00:32:17,250 --> 00:32:20,000 Det är inte mycket vacker, bara för att Jag ville inte göra en massa CSS, 613 00:32:20,000 --> 00:32:23,255 men vad det gör är, det har denna databas av blogginlägg, 614 00:32:23,255 --> 00:32:25,630 och det går igenom alla dem, och det kommer att visa dem 615 00:32:25,630 --> 00:32:28,170 på sidan i den ordning de senaste. 616 00:32:28,170 --> 00:32:30,920 Och så dessa är bara några inlägg att jag hade sparat i databasen. 617 00:32:30,920 --> 00:32:35,680 >> Så om vi vill skapa en ny post, kan vi gå till Lägg till ett nytt inlägg, 618 00:32:35,680 --> 00:32:42,720 och vi kan komma in i titeln på post, så något liknande, CS50 seminarium. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, verkligen njuta av seminariet. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Häftigt. 623 00:32:52,270 --> 00:32:56,060 Då du trycker på stolpen och det kommer omdirigera dig tillbaka till startsidan, 624 00:32:56,060 --> 00:33:00,039 och sedan ser du att det senaste inlägget tillsattes. 625 00:33:00,039 --> 00:33:01,580 Och vi har fortfarande alla de där. 626 00:33:01,580 --> 00:33:08,080 Så nu, låt oss gå igenom alla de koden och se hur detta genomförs. 627 00:33:08,080 --> 00:33:11,995 >> Så jag tror att det första som låter ta en titt på är faktiskt modellerna. 628 00:33:11,995 --> 00:33:14,120 En stor del av tiden, när du skapar något, 629 00:33:14,120 --> 00:33:17,036 du vill tänka först på hur du kommer att representera dina data, 630 00:33:17,036 --> 00:33:22,915 och sedan utforma saker runt det, så att allt är vettigt. 631 00:33:22,915 --> 00:33:25,290 Och det är faktiskt hur jag gjorde det när jag gjorde detta, 632 00:33:25,290 --> 00:33:28,030 Jag satte mig ner och tänkte, vad vill jag i ett inlägg. 633 00:33:28,030 --> 00:33:32,130 >> Så här har vi samma struktur att jag nämna tidigare, 634 00:33:32,130 --> 00:33:33,755 där vi gör db = Sqldatabase (posts.db "). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 I själva verket, förmodligen du inte vill hårt kod i ditt namn databaser. 637 00:33:40,980 --> 00:33:43,730 Det bör nog vara en parameter som lagras någonstans, kanske 638 00:33:43,730 --> 00:33:45,940 i en konfigurationsfil, men i ett litet exempel som detta, 639 00:33:45,940 --> 00:33:48,310 det är okej att hårt kod som i. 640 00:33:48,310 --> 00:33:53,510 >> Så nu har vi detta inlägg klass, som ärver från basmodellen. 641 00:33:53,510 --> 00:33:56,930 Och det har, återigen, den ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Egentligen, om du inte anger, om jag faktiskt blev av med detta, 643 00:34:02,250 --> 00:34:07,152 då Peewee vi tar hand om automatiskt skapa det ID-fältet, 644 00:34:07,152 --> 00:34:09,360 och det kommer automatiskt gör det till en primarykey, som 645 00:34:09,360 --> 00:34:12,485 Jag tycker är riktigt nice, eftersom vanligtvis, det är något du vill ha, 646 00:34:12,485 --> 00:34:16,239 men jag gillar att uttrycka det i synnerhet bara så jag kommer ihåg att det finns där. 647 00:34:16,239 --> 00:34:19,480 Men om du inte anger det, som kommer att vara det automatiskt. 648 00:34:19,480 --> 00:34:22,198 >> Alltså, jag har ett datum som är en DateTimeField, och alla 649 00:34:22,198 --> 00:34:24,864 dessa olika områden, om du titta på den peewee dokumentation, 650 00:34:24,864 --> 00:34:28,920 Det ska ge dig en lista över de olika typer av fält som du kan använda. 651 00:34:28,920 --> 00:34:34,440 För det mesta är det analoga vad du skulle se i SQL. 652 00:34:34,440 --> 00:34:37,699 Så det finns en Charfield, en VarCharFields, textfält, 653 00:34:37,699 --> 00:34:40,550 vilka är särskilt länge texter, som ett blogginlägg 654 00:34:40,550 --> 00:34:44,460 potentiellt DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 alla saker som. 656 00:34:46,100 --> 00:34:51,570 >> Och du kan passera i andra argument till det, som jag inte ange här. 657 00:34:51,570 --> 00:34:55,719 Säg till exempel, som du inte vill tillåta två tjänster för att ha samma titel, 658 00:34:55,719 --> 00:34:59,672 du kan ange något som unikt = Sant, 659 00:34:59,672 --> 00:35:02,880 och det är bara en extra parameter till fältet som när den sammanställer det ner 660 00:35:02,880 --> 00:35:06,865 i SQL, kommer det ange att det måste vara unikt. 661 00:35:06,865 --> 00:35:09,740 Du kan också ange något liknande inte noll och alla andra saker 662 00:35:09,740 --> 00:35:11,750 du normalt gör i SQL. 663 00:35:11,750 --> 00:35:16,020 Så detta är en ganska enkel modell som har datum. 664 00:35:16,020 --> 00:35:19,460 Lägg märke till här, inom DateTimeField, Jag specificerade vad standard är. 665 00:35:19,460 --> 00:35:22,560 Jag specificerade att det är datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 grund av det sätt som Detta blir utvärderas 667 00:35:24,920 --> 00:35:28,750 det faktiskt utvärderar den datetime.now när 668 00:35:28,750 --> 00:35:32,110 det blir införd i databasen. 669 00:35:32,110 --> 00:35:34,760 >> Jag tror att jag skulle ha att dubbelkolla detta, 670 00:35:34,760 --> 00:35:38,222 men om du gjorde något sådant, då det faktiskt skulle utvärdera det en gång, 671 00:35:38,222 --> 00:35:40,180 och sedan Datetime skulle alltid vara densamma. 672 00:35:40,180 --> 00:35:44,240 Så, bara om du gör något med datetimes, dubbelkolla 673 00:35:44,240 --> 00:35:47,080 att det är att utvärdera när faktiskt blir insatt, annars 674 00:35:47,080 --> 00:35:48,780 du skulle kunna förväxlas. 675 00:35:48,780 --> 00:35:51,221 >> Titeln är bara en Charfield, där det 676 00:35:51,221 --> 00:35:53,970 finns fler argument som ni kan passera att specificera exakt hur länge du 677 00:35:53,970 --> 00:35:56,170 vill att det ska vara, men här, det gjorde egentligen ingen roll. 678 00:35:56,170 --> 00:35:58,687 Och Text kommer att bli texten av hela inlägget, 679 00:35:58,687 --> 00:36:01,020 och det kommer att bli en Textfield bara för att du vill ha 680 00:36:01,020 --> 00:36:03,370 att låta det vara en ganska lång sträng. 681 00:36:03,370 --> 00:36:05,970 >> Sedan har vi det här Meta underklass som bara 682 00:36:05,970 --> 00:36:11,250 anger att vi vill att databasen där detta faktiskt öppnas upp i 683 00:36:11,250 --> 00:36:14,267 att vara db objekt som vi har här. 684 00:36:14,267 --> 00:36:16,350 Och sista vi har här är just denna funktion 685 00:36:16,350 --> 00:36:18,120 att vi kommer att använda från våran app 686 00:36:18,120 --> 00:36:23,970 att initiera databasen för att ansluta till den, och sedan för att skapa den Post tabellen. 687 00:36:23,970 --> 00:36:26,880 >> Nu, låt oss titta på huvud app själv. 688 00:36:26,880 --> 00:36:30,800 Så detta är en ganska lite längre än de 689 00:36:30,800 --> 00:36:34,840 att vi har sett förut, men förhoppningsvis inte alltför illa. 690 00:36:34,840 --> 00:36:37,140 Så låt mig sträcka ut detta. 691 00:36:37,140 --> 00:36:38,370 Okej. 692 00:36:38,370 --> 00:36:42,070 >> Så märker och toppen Jag importerade en hel massa andra saker 693 00:36:42,070 --> 00:36:44,129 från Flask att vi inte verkligen sett förut. 694 00:36:44,129 --> 00:36:46,670 Och förhoppningsvis kan vi gå igenom var och en av dessa en efter en 695 00:36:46,670 --> 00:36:49,420 och prata lite mer om dem, sorterade efter exempel. 696 00:36:49,420 --> 00:36:51,380 Så har vi Flask, och render_template, 697 00:36:51,380 --> 00:36:54,370 som vi har sett förut, denna begäran objekt, 698 00:36:54,370 --> 00:37:00,400 som kommer upp när vi tittar på hur den form som jag visade faktiskt 699 00:37:00,400 --> 00:37:01,170 fabrik. 700 00:37:01,170 --> 00:37:04,850 Omdirigera, vilket gör att du kan omdirigera tillbaka från Skapa Nytt inlägg 701 00:37:04,850 --> 00:37:11,710 tillbaka till den ursprungliga hemsida, och sedan URL, vilket är något som låter dig 702 00:37:11,710 --> 00:37:15,550 räkna ut var på webbplats en viss sida är. 703 00:37:15,550 --> 00:37:17,810 >> Alltså, nästa jag gör, är jag import 704 00:37:17,810 --> 00:37:21,550 all information från modeller filer som vi bara tittar på. 705 00:37:21,550 --> 00:37:23,140 Och, ja. 706 00:37:23,140 --> 00:37:28,720 >> Så, något annat nytt som kommer när du arbetar med, 707 00:37:28,720 --> 00:37:31,850 speciellt databaser, är att du kan ange 708 00:37:31,850 --> 00:37:35,110 en funktion som anropas innan varje begäran, och funktion som får 709 00:37:35,110 --> 00:37:39,690 uppkallad efter varje begäran, med hjälp av denna Funktionen dekoratör app.before begäran. 710 00:37:39,690 --> 00:37:42,324 >> Och så detta kommer att få utföras varhelst denna funktion är. 711 00:37:42,324 --> 00:37:44,240 Detta behöver inte vara kallas före begäran, 712 00:37:44,240 --> 00:37:46,281 men oftast det är något klokt att kalla det. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Du kan ange vad funktion du vill få kallas där, 715 00:37:51,650 --> 00:37:56,330 så jag angav detta initialize_db funktion som vi hade tillbaka i modeller 716 00:37:56,330 --> 00:38:02,390 fil, så innan varje begäran du vill ansluta till databasen. 717 00:38:02,390 --> 00:38:04,560 >> Det finns två olika sätt du kan göra detta. 718 00:38:04,560 --> 00:38:10,830 Du kan göraapp., I tror att det är after_request. 719 00:38:10,830 --> 00:38:13,800 Och skillnaden mellan after_request och teardown_request, 720 00:38:13,800 --> 00:38:17,590 är att after_request bara kommer att ske om begäran var faktiskt giltigt. 721 00:38:17,590 --> 00:38:20,440 Och så, endast om begäran lyckades, 722 00:38:20,440 --> 00:38:22,490 Om något gick fel, men teardown_request 723 00:38:22,490 --> 00:38:26,300 händer i fallet med en lyckad begäran, eller i fallet med ett fel. 724 00:38:26,300 --> 00:38:28,252 >> Så, vanligtvis du vill att använda teardown_request, 725 00:38:28,252 --> 00:38:30,460 om du inte vill göra något, särskilt annorlunda 726 00:38:30,460 --> 00:38:31,470 i fallet med ett fel. 727 00:38:31,470 --> 00:38:35,122 Men bara för att stänga databasen, om det lyckas eller om det misslyckas, 728 00:38:35,122 --> 00:38:37,080 Vi vill du koppla från databasen. 729 00:38:37,080 --> 00:38:41,240 Så det heter, db.close på db-objektet. 730 00:38:41,240 --> 00:38:43,740 >> Lägg märke till att teardown_request tar i ett undantag. 731 00:38:43,740 --> 00:38:46,781 Så du kan kontrollera om det fanns faktiskt ett fel när den stänger ner, 732 00:38:46,781 --> 00:38:49,390 men här, förhoppningsvis, det inte en hel del fel, 733 00:38:49,390 --> 00:38:52,720 så vi bara sorts ignorera det. 734 00:38:52,720 --> 00:38:55,990 >> Okej, och resten av det är inte så illa. 735 00:38:55,990 --> 00:39:02,240 Så, när vi går till hemsidan, Vi framförde denna home.html Mall 736 00:39:02,240 --> 00:39:03,490 som kommer att öppna upp. 737 00:39:03,490 --> 00:39:06,240 Passet är i tjänst lika med och vad detta 738 00:39:06,240 --> 00:39:10,260 gör är, kom ihåg att vi har det här inlägget modell, så vi markera alla inlägg, 739 00:39:10,260 --> 00:39:13,890 och sedan en annan sak du kan göra, Du kan ange WHERE, 740 00:39:13,890 --> 00:39:16,910 Du kan ange en beställning av, och så tar vi 741 00:39:16,910 --> 00:39:18,820 alla de tjänster som få utvalda, och sedan 742 00:39:18,820 --> 00:39:22,590 vi beställa dem av post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Och det kommer att specificera när de faktiskt komma ut, 744 00:39:25,030 --> 00:39:29,250 den senaste kommer att vara mycket första en. 745 00:39:29,250 --> 00:39:31,420 >> Och sedan, passerar vi det till den home.html mallen, 746 00:39:31,420 --> 00:39:34,240 så låt oss faktiskt öppna upp som mall verkligen snabb, 747 00:39:34,240 --> 00:39:36,760 och ta en titt på hur det fungerar. 748 00:39:36,760 --> 00:39:42,130 Och det är inte bra HTML, men förhoppningsvis kan vi fokusera på Python. 749 00:39:42,130 --> 00:39:46,960 >> Så det finns en länk till Lägg till ny Post, och så detta anger vägen 750 00:39:46,960 --> 00:39:51,580 inom Flask som vi definiera, vilket är rätt här. 751 00:39:51,580 --> 00:39:56,310 Detta är den nya postvägen, och vi ange att upp här. 752 00:39:56,310 --> 00:40:00,450 Och så det är en länk som då kommer att gå till denna flyglinje inom Flask-servern. 753 00:40:00,450 --> 00:40:03,820 >> Ju mer intressant sak är detta för loop här. 754 00:40:03,820 --> 00:40:07,685 Så vi ange att post parameter som 755 00:40:07,685 --> 00:40:09,560 bringades att passera in i den render_template funktion, 756 00:40:09,560 --> 00:40:13,550 för varje inlägg i Postens objekt som får passeras i. 757 00:40:13,550 --> 00:40:16,600 Vi vill skriva ut anslagets titel, i H1, 758 00:40:16,600 --> 00:40:21,930 och då under vi vill skriva ut inläggets text i ett stycke. 759 00:40:21,930 --> 00:40:25,710 >> Och här kan vi faktiskt ringa en Python-funktion, 760 00:40:25,710 --> 00:40:35,130 så vi kan kalla strftime, ST-RF-tid, och du kan passera i formatsträngen 761 00:40:35,130 --> 00:40:37,064 som du vill skriva ut data i. 762 00:40:37,064 --> 00:40:39,980 Så det är är ganska trevligt att du kan faktiskt kalla denna Python funktion 763 00:40:39,980 --> 00:40:41,090 inifrån här. 764 00:40:41,090 --> 00:40:44,370 Du behöver inte göra formateringen på styrenheten sida, eftersom verkligen, 765 00:40:44,370 --> 00:40:47,770 formatera datum är något som du vill ta itu inom View. 766 00:40:47,770 --> 00:40:51,480 >> Och alla dessa procent saker är inte super viktigt. 767 00:40:51,480 --> 00:40:55,270 Om du tittar upp dokumentationen för strftime funktion i Python, 768 00:40:55,270 --> 00:40:57,040 det anger alla dessa saker, men det är 769 00:40:57,040 --> 00:40:59,190 hur, när vi letade på hemsidan här, 770 00:40:59,190 --> 00:41:04,440 Det formaterar detta med en trevlig datum, och det anger AM eller PM, 771 00:41:04,440 --> 00:41:09,410 men normalt, om vi hade inte detta här, 772 00:41:09,410 --> 00:41:14,024 du kommer förmodligen få lite skräp datum som inte ser mycket bra. 773 00:41:14,024 --> 00:41:15,940 Och sedan vi anger post.text, och jag kunde 774 00:41:15,940 --> 00:41:19,460 har lagt ett par radbrytningar här, bara 775 00:41:19,460 --> 00:41:21,820 att ställa några mellanrum mellan varje inlägg. 776 00:41:21,820 --> 00:41:26,270 >> Så jag tror det viktigaste sak i detta exempel, 777 00:41:26,270 --> 00:41:28,697 är att du kan använda detta för loop. 778 00:41:28,697 --> 00:41:30,780 Och detta är analogt med saker du kan göra i PHP. 779 00:41:30,780 --> 00:41:32,905 Du kan iterera igenom, allt blir gått in, 780 00:41:32,905 --> 00:41:36,719 och så, i stället för att behöva göra kopiera / klistra in, kopiera / klistra in all HTML, 781 00:41:36,719 --> 00:41:40,010 du måste bara skriva det en gång, och sedan Du kan iterera över alla inlägg. 782 00:41:40,010 --> 00:41:41,510 >> Och detta är något vanligt att du vill 783 00:41:41,510 --> 00:41:44,510 att göra, när du har en hel del uppgifter, är att för allt i dina data, 784 00:41:44,510 --> 00:41:48,370 du vill göra en liknande sak. 785 00:41:48,370 --> 00:41:51,690 Och sedan, kom bara ihåg att när du vill skriva ut något explicit 786 00:41:51,690 --> 00:41:54,780 i HTML använder du de dubbla hängslen här, 787 00:41:54,780 --> 00:41:57,820 men sedan när du vill ange lite information om ett tillstånd, 788 00:41:57,820 --> 00:42:02,430 eller om en for-loop, du använd procent fästet. 789 00:42:02,430 --> 00:42:08,730 >> Så, gå tillbaka till Python kod, så att förklarar 790 00:42:08,730 --> 00:42:12,242 vad som händer i huvud rutt, när vi åker dit, 791 00:42:12,242 --> 00:42:14,450 det bara visar alla inlägg, men då frågan 792 00:42:14,450 --> 00:42:17,440 är, hur vi faktiskt få tjänster till databasen, som 793 00:42:17,440 --> 00:42:18,970 är lite mer intressant. 794 00:42:18,970 --> 00:42:23,960 >> Så när du klickar på Ny Post länk, som vi såg här, 795 00:42:23,960 --> 00:42:26,000 det omdirigeringar dig till detta formulär. 796 00:42:26,000 --> 00:42:29,580 Och det är bara en enkel uppmaning till render_template funktion, som sedan 797 00:42:29,580 --> 00:42:32,110 passerar den nya tjänsten i HTML-formulär. 798 00:42:32,110 --> 00:42:36,212 Så låt oss ta en titt på det. 799 00:42:36,212 --> 00:42:37,420 Så det här är ganska enkel. 800 00:42:37,420 --> 00:42:45,110 Det har en enkel HTML-formulär, som ser lite bekant, 801 00:42:45,110 --> 00:42:47,380 baserat på blanketterna i CS50 Finance. 802 00:42:47,380 --> 00:42:49,940 Och så, vi anger här åtgärden. 803 00:42:49,940 --> 00:42:52,435 Och här, om du arbetar med PHP, normalt det 804 00:42:52,435 --> 00:42:55,930 skulle vara något liknande, create.PHP, men här 805 00:42:55,930 --> 00:42:59,960 vi faktiskt ange en rutt inom Flask-servern. 806 00:42:59,960 --> 00:43:02,520 Och så denna linje motsvarar till skapa rutten 807 00:43:02,520 --> 00:43:05,680 som vi har här, som vi kommer att gå in i en sekund. 808 00:43:05,680 --> 00:43:07,630 >> Och så, vi ange att Det är en post metod, 809 00:43:07,630 --> 00:43:09,820 eftersom vi vill skicka denna formulärdata, och oftast 810 00:43:09,820 --> 00:43:12,945 när du skickar data från ett formulär, kanske du vill använda en post begäran, 811 00:43:12,945 --> 00:43:15,760 bara så att du inte hamnar med denna stora, otympliga webbadress. 812 00:43:15,760 --> 00:43:18,970 Men du kan också använda en begäran GET, och låta det gå i med variabel routing, 813 00:43:18,970 --> 00:43:21,170 men för formulär, det är trevligt till en tjänst förfrågan här. 814 00:43:21,170 --> 00:43:24,620 Och så då, precis som du skulle göra med HTML och PHP, 815 00:43:24,620 --> 00:43:28,420 Du kan ange dessa textingångar, och du kan ange namnet på dem, 816 00:43:28,420 --> 00:43:33,490 och det är det namn som kommer att få passerat in begäran objekt inom Flask. 817 00:43:33,490 --> 00:43:36,960 >> Och då har vi en Skicka knappen som säger Post. 818 00:43:36,960 --> 00:43:40,760 Och här är Post namnet på knappen, eftersom det är ett blogginlägg, 819 00:43:40,760 --> 00:43:42,700 men här är post begäran metoden. 820 00:43:42,700 --> 00:43:47,060 Så de är samma ord men faktiskt orelaterade. 821 00:43:47,060 --> 00:43:48,460 Ja 822 00:43:48,460 --> 00:43:54,800 >> Att gå tillbaka till Python-kod, när vi ringde skapa metoden, 823 00:43:54,800 --> 00:43:57,702 märker här att du kan faktiskt anges inom rutten 824 00:43:57,702 --> 00:44:00,650 Om begäran metoder som du vill acceptera, 825 00:44:00,650 --> 00:44:04,770 och så här, jag ange att jag bara vill acceptera en Post metod. 826 00:44:04,770 --> 00:44:09,800 Så, om jag verkligen försöker att besöka sidan direkt, som använder en begäran GET, 827 00:44:09,800 --> 00:44:11,700 Det kommer att berätta "Method inte tillåtet." 828 00:44:11,700 --> 00:44:15,840 >> Och så har du sidor, ungefär som detta skapa sida, vilket jag bara 829 00:44:15,840 --> 00:44:20,192 verkligen använder som ett sätt för formuläret för att få in, 830 00:44:20,192 --> 00:44:22,900 Du kan ange att du inte vill att folk ska kunna åka dit 831 00:44:22,900 --> 00:44:25,650 direkt via en begäran GET, eller om du inte vill, 832 00:44:25,650 --> 00:44:28,580 av någon anledning, en Post begäran, Du kan bara ange FÅ här, 833 00:44:28,580 --> 00:44:32,720 men i detta exempel, vi bara vill Post begäran att gå ut. 834 00:44:32,720 --> 00:44:38,700 >> Så när create_post heter, när Vi besöker den via Post begäran 835 00:44:38,700 --> 00:44:43,600 när du går till en viss rutt, det finns denna begäran objekt, 836 00:44:43,600 --> 00:44:46,640 och vi var tvungna att importera förfrågningar på högst upp, 837 00:44:46,640 --> 00:44:49,640 men det finns denna begäran objekt som får passeras i, 838 00:44:49,640 --> 00:44:53,210 och du kan få tillgång till formulärdata, som automatiskt få fylld 839 00:44:53,210 --> 00:44:55,070 när du skickar en begäran från ett formulär. 840 00:44:55,070 --> 00:44:56,990 >> Och sedan, vad jag tror är riktigt cool, är 841 00:44:56,990 --> 00:45:02,840 att formulärobjekt för att få godkänt i, är bara en Python lexikon som 842 00:45:02,840 --> 00:45:10,560 innehåller, om du access-- så här, låt mig dra upp HTML bredvid den, bara 843 00:45:10,560 --> 00:45:17,670 så att du kan ha det som referens, ja, så 844 00:45:17,670 --> 00:45:21,060 de namn som vi anger här för olika områden, så 845 00:45:21,060 --> 00:45:23,900 titeln och texten, vi sedan bara använda dem hit 846 00:45:23,900 --> 00:45:27,110 som index i formulärdata. 847 00:45:27,110 --> 00:45:28,950 Så det är super bekvämt. 848 00:45:28,950 --> 00:45:33,320 >> Så då vi kallar post.create, som kommer att skapa och automatiskt sätta in 849 00:45:33,320 --> 00:45:36,850 denna nya tjänst föremål i databasen. 850 00:45:36,850 --> 00:45:40,690 Och jag tror att detta skapar funktion här är en riktigt cool exempel på hur 851 00:45:40,690 --> 00:45:44,900 kraftfull Flask är och arbeta med detta, eftersom om du gjorde något 852 00:45:44,900 --> 00:45:48,660 i PHP, kan du behöva göra en hel del validering, 853 00:45:48,660 --> 00:45:51,730 du måste då upprätta en databas anslutning, 854 00:45:51,730 --> 00:45:55,210 du måste då köra SQL-fråga, 855 00:45:55,210 --> 00:45:59,550 men här har vi just denna trevliga post.create, som vi kan då bara 856 00:45:59,550 --> 00:46:01,520 få ut informationen av begäran objektet 857 00:46:01,520 --> 00:46:05,370 och sedan skicka den till en ny posta att vi skapar. 858 00:46:05,370 --> 00:46:07,850 >> Och sedan, den allra sista som vi vill göra, 859 00:46:07,850 --> 00:46:09,630 är att omdirigera användaren tillbaka till hemmet. 860 00:46:09,630 --> 00:46:13,020 Och så använder vi det här Flask omdirigera funktion. 861 00:46:13,020 --> 00:46:17,770 Och något som vi inte hade sett tidigare var denna URL funktion. 862 00:46:17,770 --> 00:46:21,970 Så URL för funktionen kan du passerar in egentligen namnet 863 00:46:21,970 --> 00:46:26,090 en funktion i din Python-kod, snarare än det speciella sättet 864 00:46:26,090 --> 00:46:26,720 att det är på. 865 00:46:26,720 --> 00:46:32,107 >> Så jag kunde ha lika lätt omdirigeras en användare att hugga, 866 00:46:32,107 --> 00:46:37,050 vilket skulle skicka det tillbaka hem, men med hjälp av webbadressen till funktionen är trevligt, 867 00:46:37,050 --> 00:46:39,990 för om du ändrar plats där saker och ting är, 868 00:46:39,990 --> 00:46:44,080 så låt oss säga att jag ändrar hem för att vara / hemma istället, 869 00:46:44,080 --> 00:46:47,040 Detta skulle fortfarande sedan återvända / home, eftersom det faktiskt går och tittar upp 870 00:46:47,040 --> 00:46:50,770 namnet på funktionen, och det kommer att ge dig tillbaka webbadressen för det. 871 00:46:50,770 --> 00:46:52,490 >> Så, typ av på antagandet att du är 872 00:46:52,490 --> 00:46:55,489 mer benägna att förändra där saker är än namnen på funktionerna. 873 00:46:55,489 --> 00:46:58,840 Du kan använda detta verkligen trevligt URL för funktion. 874 00:46:58,840 --> 00:47:02,470 Och en sak att vara medveten om det är lite knepigt, 875 00:47:02,470 --> 00:47:05,750 är att du tror att du kunde bara ringa omdirigera på webbadressen för, 876 00:47:05,750 --> 00:47:10,600 men faktiskt alla rutter har att återvända någon sorts text och HTML, 877 00:47:10,600 --> 00:47:14,360 så du har faktiskt returnera omdirigerings samtalet. 878 00:47:14,360 --> 00:47:18,379 Annars kommer du få något ogiltigt om inte återvänder en sträng, 879 00:47:18,379 --> 00:47:21,420 eftersom alla dessa har att återvända HTML du verkligen vill göra. 880 00:47:21,420 --> 00:47:26,980 >> Och så, när du ringer omdirigeringen det omdirigeringar dig till sidan, 881 00:47:26,980 --> 00:47:30,270 men det faktiskt returnerar HTML du behöver för att utföra det redirect. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Gå tillbaka till startsidan. 884 00:47:37,110 --> 00:47:39,200 Så vi har dessa två olika vyer. 885 00:47:39,200 --> 00:47:40,132 Vi har startvyn. 886 00:47:40,132 --> 00:47:41,590 Eller, jag antar att jag borde säga mallar. 887 00:47:41,590 --> 00:47:44,190 Vi har dessa två mallar, hemma mall som 888 00:47:44,190 --> 00:47:48,500 visar alla våra tjänster, och då har vi den här annonsen sak, 889 00:47:48,500 --> 00:47:52,970 och när du klickar på posten, går det till en ny rutt i Flask, 890 00:47:52,970 --> 00:47:55,920 men den vägen inte nödvändigtvis ha en motsvarande mall. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Du behöver inte se något, men du kan fortfarande 893 00:48:01,560 --> 00:48:04,090 har detta arbete pågår bakom kulisserna. 894 00:48:04,090 --> 00:48:07,450 Och sedan får du omdirigeras tillbaka till startsidan. 895 00:48:07,450 --> 00:48:12,230 Och definitivt, är det lätt att arbeta i vissa trevligare CSS i mallen 896 00:48:12,230 --> 00:48:15,580 och gör detta ser mycket trevligare, men alla huvudlogik 897 00:48:15,580 --> 00:48:18,590 finns det i Python. 898 00:48:18,590 --> 00:48:20,020 >> Eventuella frågor om detta exempel? 899 00:48:20,020 --> 00:48:22,760 Jag vet att det finns en hel del olika saker som händer där, 900 00:48:22,760 --> 00:48:25,341 en massa saker som vi inte hade sett förut, men som allt. 901 00:48:25,341 --> 00:48:25,840 Ja. 902 00:48:25,840 --> 00:48:28,346 >> PUBLIK 1: Har du att göra något speciellt att skrubba de data som är 903 00:48:28,346 --> 00:48:29,600 kommer in från formen? 904 00:48:29,600 --> 00:48:31,109 Jag märkte att du just sa "skapa" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Ja, så det är faktiskt, det är en riktigt bra poäng. 906 00:48:33,900 --> 00:48:36,350 Så frågan var, gör du måste kontrollera och se till 907 00:48:36,350 --> 00:48:39,190 att uppgifterna är giltiga, och gör någon form av skur 908 00:48:39,190 --> 00:48:41,840 att se till att det är giltigt, för som ni kan se här, 909 00:48:41,840 --> 00:48:42,660 Jag gör inte det. 910 00:48:42,660 --> 00:48:48,140 Så låt oss se vad som händer om jag lägger något tomt. 911 00:48:48,140 --> 00:48:51,190 Så kommer det faktiskt bara göra en blank post och fyll i Datetime. 912 00:48:51,190 --> 00:48:55,990 >> Så i verkligheten, skulle du förmodligen vill göra något liknande, 913 00:48:55,990 --> 00:49:04,749 kanske ange om titeln är lika med den tomma strängen, sedan inte gör det. 914 00:49:04,749 --> 00:49:07,290 Eller, bara göra det om titeln är inte är lika med den tomma strängen. 915 00:49:07,290 --> 00:49:10,330 Så det faktiskt inte automatiskt ta hand om det skrubb 916 00:49:10,330 --> 00:49:12,820 för dig, så du måste fortfarande göra det. 917 00:49:12,820 --> 00:49:14,330 Ja, bra fråga. 918 00:49:14,330 --> 00:49:18,497 >> PUBLIK 2: Gör det scrub för fortsättning injektionen? 919 00:49:18,497 --> 00:49:19,890 Vet du? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Förhoppningsvis PeeWee gör det. 921 00:49:22,830 --> 00:49:25,830 Jag tror att det skulle verkligen vara en ganska dålig biblioteket om det inte gör det. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Jag vet inte exakt. 924 00:49:32,690 --> 00:49:34,820 Jag skulle behöva titta på fråga att det genereras. 925 00:49:34,820 --> 00:49:38,980 Jag tror att om jag skrev i en blogginlägg den sortens såg 926 00:49:38,980 --> 00:49:46,370 som en SQL-injektion attack, ungefär så här, om detta 927 00:49:46,370 --> 00:49:49,370 är som ett lösenordsfält eller något, du kan göra något sånt här. 928 00:49:49,370 --> 00:49:53,410 >> Jag tror att det kommer fortfarande får bokstavligen skrivit, 929 00:49:53,410 --> 00:49:59,200 men jag tror att peewee gör någon form av skrubb av data 930 00:49:59,200 --> 00:50:01,680 innan det faktiskt utför det. 931 00:50:01,680 --> 00:50:04,510 >> PUBLIK 1: Att textfält är utformad för att ta oformaterad text, eller hur? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Ja, det är det. 933 00:50:05,710 --> 00:50:06,465 Ja. 934 00:50:06,465 --> 00:50:09,590 Så jag tror att alla, så det här är korrekt beteende, som kommer att göra det, 935 00:50:09,590 --> 00:50:12,170 men jag tror att peewee förhoppningsvis gör 936 00:50:12,170 --> 00:50:13,780 någon form av skydd på deras ände. 937 00:50:13,780 --> 00:50:16,090 Och om du ville dubbelkolla att det 938 00:50:16,090 --> 00:50:19,530 finns sätt när du skapar en fråga. 939 00:50:19,530 --> 00:50:22,622 så att du inte behöver verkställa det direkt. 940 00:50:22,622 --> 00:50:24,330 Jag skulle behöva ta en titta på dokumentation, 941 00:50:24,330 --> 00:50:27,930 men du kan faktiskt se SQL att den genererar, 942 00:50:27,930 --> 00:50:30,840 och ta en titt på det, och göra Se till att det strömmar ut saker. 943 00:50:30,840 --> 00:50:33,700 >> En annan anledning till varför du kanske vill titta på SQL 944 00:50:33,700 --> 00:50:37,920 att peewee matar ut, är om saker verkar gå riktigt långsamt, 945 00:50:37,920 --> 00:50:41,090 du kan ta en titt och se hur det är faktiskt gör, eftersom det är ibland 946 00:50:41,090 --> 00:50:44,670 lätt att av misstag lägga i det sätt du skriver det, 947 00:50:44,670 --> 00:50:47,880 Du kan av misstag ha det markera hela databasen först, 948 00:50:47,880 --> 00:50:50,230 och sedan göra något slags operation på det, när du verkligen 949 00:50:50,230 --> 00:50:51,320 tänkt att välja en delmängd. 950 00:50:51,320 --> 00:50:53,560 >> Och så, om saker och ting inte helt går rätt, 951 00:50:53,560 --> 00:50:57,300 det är bra att ta en titt på begäran det är faktiskt få genereras. 952 00:50:57,300 --> 00:50:57,800 Ja. 953 00:50:57,800 --> 00:51:02,100 >> PUBLIK 2: När du började, du sätter i hamnen som 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Ja. 955 00:51:02,904 --> 00:51:06,070 PUBLIK 2: Är standard med peewee, eller är det något du kan ändra? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Ja, så port är standard med Flask. 957 00:51:10,870 --> 00:51:13,061 Om du kör det utan specificera något, 958 00:51:13,061 --> 00:51:14,310 Det kommer automatiskt att göra det. 959 00:51:14,310 --> 00:51:16,060 Jag tror, ​​jag skulle ha att dubbelkolla detta, 960 00:51:16,060 --> 00:51:19,130 men du kan ange att i app.run, Jag tror att du kan göra något liknande, 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 Låt oss ge det ett försök riktigt snabbt. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Ja, så kan du bara ange port = 8080, och det kommer att köras det där, 966 00:51:32,230 --> 00:51:36,130 som jag tror, ​​om du ville köra det på IDE, har jag inte provat detta, 967 00:51:36,130 --> 00:51:38,527 men jag tror att om du körde det på port 8080, 968 00:51:38,527 --> 00:51:40,360 du förmodligen skulle kunna att få tillgång till servern, 969 00:51:40,360 --> 00:51:41,870 precis som du var för webbplatsen. 970 00:51:41,870 --> 00:51:44,390 >> Ja, men det lätt att ändra på det om du 971 00:51:44,390 --> 00:51:48,540 har någon form av liknande port vidarebefordran saker som du behöver göra. 972 00:51:48,540 --> 00:51:50,410 >> Alla andra frågor? 973 00:51:50,410 --> 00:51:50,916 Ja? 974 00:51:50,916 --> 00:51:53,416 PUBLIK 1: Så såg jag i modeller som, som du nämnde, 975 00:51:53,416 --> 00:51:55,647 du måste ange databas för varje objekt. 976 00:51:55,647 --> 00:51:58,105 Råkar du veta, gör som gör det riktigt enkelt om du 977 00:51:58,105 --> 00:52:03,210 har massor av SQLite databaser som du vill använda för en enda web app, 978 00:52:03,210 --> 00:52:07,210 att du bara kan ange ett gäng av olika listor i din modell? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Ja, låt mig öppna upp det riktigt snabbt. 980 00:52:11,620 --> 00:52:17,570 Så du säger, om du vill ha ett gäng olika något, kanske 981 00:52:17,570 --> 00:52:22,670 gillar och studenterna, för vissa Därför nåt sånt? 982 00:52:22,670 --> 00:52:26,870 Ja, så tror jag att du fortfarande, varje modell 983 00:52:26,870 --> 00:52:30,652 skulle behöva fortfarande ha bara en databas tilldelats, 984 00:52:30,652 --> 00:52:32,610 men om du ville ha olika modeller som 985 00:52:32,610 --> 00:52:35,818 har olika databasobjekt tilldelas till det, kan du definitivt göra det. 986 00:52:35,818 --> 00:52:43,070 Så, om jag skapade en ny, något som det här, 987 00:52:43,070 --> 00:52:47,000 och nu detta är en student som ser konstigt ut som ett blogginlägg, 988 00:52:47,000 --> 00:52:49,390 Jag kunde ange att databasen är lika med db_2 här. 989 00:52:49,390 --> 00:52:51,390 Så jag tror det är huvudsakliga sättet du kan göra det. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Häftigt. 992 00:52:56,200 --> 00:52:58,410 Alla andra frågor? 993 00:52:58,410 --> 00:53:02,170 >> Så bara för att avsluta lite bit, här är några resurser, 994 00:53:02,170 --> 00:53:06,030 och dessa bilderna kommer att publiceras på nätet så att du kan faktiskt få dessa länkar. 995 00:53:06,030 --> 00:53:08,500 De bästa resurserna är verkligen dokumentationen för Flask 996 00:53:08,500 --> 00:53:09,930 och Peewee själva. 997 00:53:09,930 --> 00:53:12,940 De är skrivna riktigt bra, tror jag. 998 00:53:12,940 --> 00:53:18,180 Så är Flask hemsida här, och de har en snabbstart handledning som 999 00:53:18,180 --> 00:53:20,710 kommer att gå igenom liknande saker för vad jag gick igenom, 1000 00:53:20,710 --> 00:53:23,560 men om du vill ha någon form av översyn av de saker som jag gick över, 1001 00:53:23,560 --> 00:53:26,200 eller du trodde att jag förklarade något på ett förvirrande sätt, 1002 00:53:26,200 --> 00:53:28,390 de kommer att ha liknande exempel där. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee har dokumentation, och de har en snabbstart handledning 1004 00:53:31,570 --> 00:53:34,650 som går över de viktigaste parametrarna som du skulle vilja använda. 1005 00:53:34,650 --> 00:53:38,900 Så de saker som jag talade om med de unika, och specificera defaults, 1006 00:53:38,900 --> 00:53:42,710 de olika typer av områden som du kan använda, som alla skulle vara där. 1007 00:53:42,710 --> 00:53:44,690 >> Dessutom, om du har frågor om PeeWee, 1008 00:53:44,690 --> 00:53:47,530 och du lägger dem på Stackoverflow, killen som gjorde peewee faktiskt 1009 00:53:47,530 --> 00:53:49,500 fortsätter och svarar dem ibland. 1010 00:53:49,500 --> 00:53:53,200 Om du har en fråga, förhoppningsvis Han kommer att kunna svara på det, 1011 00:53:53,200 --> 00:53:54,867 eftersom han skrev hela. 1012 00:53:54,867 --> 00:53:56,700 Jag tror att det är allt Jag ville täcka. 1013 00:53:56,700 --> 00:53:58,930 Tack för att ni kom ut. 1014 00:53:58,930 --> 00:54:02,688