1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUZIKO Ludante] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 Ezra ZIGMOND: Saluton, ĉiuj. 5 00:00:05,830 --> 00:00:08,020 Dankon pro eliranta hodiaŭ. 6 00:00:08,020 --> 00:00:10,660 Tiu seminario estas "Pitono Retejo Apps kun Flask. " 7 00:00:10,660 --> 00:00:14,510 >> Do, mi tuj parolos iomete pri kial 8 00:00:14,510 --> 00:00:17,400 vi eble deziras uzi Flask fari retejo apps kun Python, kontraste 9 00:00:17,400 --> 00:00:21,556 al iuj aliaj kadroj tie ekstere, kiel Django, kiu estas la plej konata. 10 00:00:21,556 --> 00:00:24,330 La subtitolo estas "kaj Peewee ", kiu estas io 11 00:00:24,330 --> 00:00:27,250 ni tuj parolos pri kiom interrilati kun SQL datumbazoj. 12 00:00:27,250 --> 00:00:29,610 Ĝi faras ĝin vere bela. 13 00:00:29,610 --> 00:00:32,390 >> Do, jen nur rapida resumo kion mi volas transiri. 14 00:00:32,390 --> 00:00:35,520 Do, unue, nur unu glito ke tuj estos Quickstart, 15 00:00:35,520 --> 00:00:38,530 kiu estas kiel akiri ĉio starigita sur via komputilo. 16 00:00:38,530 --> 00:00:41,760 Mi tuj estos pruvante tio sur mia loka maŝino Mac, 17 00:00:41,760 --> 00:00:45,220 nur ĉar tio estas kie mi faris tiun antaŭe, mi estas plej komforta kun ĝi, 18 00:00:45,220 --> 00:00:48,510 sed tiu estas definitive ebla sur la CD50 IDE. 19 00:00:48,510 --> 00:00:52,050 >> Do, post tiu, mi volas enkonduki kion Flask estas, 20 00:00:52,050 --> 00:00:55,089 kaj konvinki vin kial vi devus uzas ĝin en la unua loko. 21 00:00:55,089 --> 00:00:56,880 Tiam, mi doni rapidan ekzemplo de kion vi 22 00:00:56,880 --> 00:01:00,550 povas fari en Flask, rapida ekzemplo de kio vi povas fari en Peewee, 23 00:01:00,550 --> 00:01:05,010 kaj tiam mi klarigos al vi pli kompleta ekzemplo apliko 24 00:01:05,010 --> 00:01:07,520 ke mi kunmetis ke ni promenadas tra kune. 25 00:01:07,520 --> 00:01:10,040 >> Kaj poste fine, en la lasta slide, mi havas 26 00:01:10,040 --> 00:01:12,730 iuj rimedoj kiujn vi rigardas ĉe enreta por pli informo. 27 00:01:12,730 --> 00:01:15,560 Tio ne estas kompleta tutorial de kiel uzi Flask. 28 00:01:15,560 --> 00:01:18,140 Kaj mi esperas foriri tempo por demandoj. 29 00:01:18,140 --> 00:01:21,050 Iu ajn rigardanta loke, nur kiel, krii en la mezo 30 00:01:21,050 --> 00:01:22,340 se vi havas demandojn. 31 00:01:22,340 --> 00:01:27,150 >> Do rapida instalado stuff, se vi volas sekvi kune, 32 00:01:27,150 --> 00:01:29,240 aŭ se vi volas akiri ĉi sur via propra maŝino, 33 00:01:29,240 --> 00:01:32,440 Mi tuj estos uzante Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Flask faras laboron kun Python 3, sed mi ŝatas 35 00:01:35,860 --> 00:01:38,660 uzante Python 2, ĉar estas iuj Python pakoj kiuj 36 00:01:38,660 --> 00:01:40,910 ne funkcias kun 3 ankoraŭ. 37 00:01:40,910 --> 00:01:44,800 Se vi Pip instalita, kiu estas Python pako direktisto, 38 00:01:44,800 --> 00:01:48,190 Mi pensas, se via Python estas pli granda ol aŭ egala al 2.7.9, 39 00:01:48,190 --> 00:01:52,220 vi havas ĝin instalita jam, ĝi estas super facile instali tiuj pakoj. 40 00:01:52,220 --> 00:01:54,990 >> Vi povas fari Pip instali Flask, Pip instali Peewee, 41 00:01:54,990 --> 00:01:58,600 kutime vi devas kuri ŝvitas nur tiel ke la permesoj funkciis. 42 00:01:58,600 --> 00:02:01,080 Kaj, se vi uzas súper malnovan version de Pitono, 43 00:02:01,080 --> 00:02:05,100 Mi rekomendas ĝisdatigi via Python, aŭ uzante EasyInstall instali Pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Do, la sekva demando estas, kio estas Flask? 46 00:02:11,120 --> 00:02:13,280 Kaj mi supozas, unue al racia demando mi miris 47 00:02:13,280 --> 00:02:15,585 Dum longa tempo estas, kion estas ttt app? 48 00:02:15,585 --> 00:02:17,960 Ĉar tio estas vorto kiu mi pensi estas ĵetitaj ĉirkaŭe multe 49 00:02:17,960 --> 00:02:19,240 ke mi ne vere scias. 50 00:02:19,240 --> 00:02:22,340 Kaj mi kredas ke la plej bona ekzemplo de kio ttt app estas, 51 00:02:22,340 --> 00:02:26,960 vere estas CS50 Financoj, kie ĝi ne estas vere nur retejo, 52 00:02:26,960 --> 00:02:29,320 sed estas iu kiu vi povus ia interagas kun. 53 00:02:29,320 --> 00:02:31,736 Estas uzanto kontojn kaj ĉiaj malsamaj aferoj. 54 00:02:31,736 --> 00:02:35,010 Do, kie ekzakte vi desegnas la linio inter kio estas retejo, 55 00:02:35,010 --> 00:02:38,780 kaj kio estas retejo app, estas ia arbitra, sed mi supozas ke la ideo, 56 00:02:38,780 --> 00:02:42,110 ĝi estas io pli ol retejo kaj ĝi estas utila apliko. 57 00:02:42,110 --> 00:02:46,081 >> Do, Flask estas enkadrigi farante retejo apps uzante Python. 58 00:02:46,081 --> 00:02:48,330 Kaj espereble, fine tio, mi konvinkos vin 59 00:02:48,330 --> 00:02:52,210 ke vi povis skribi ion kiel CS50 Financoj uzante Python, kiun mi 60 00:02:52,210 --> 00:02:53,950 kiel multe pli bona ol PHP, persone. 61 00:02:53,950 --> 00:02:57,320 >> Do, Flask estas, ili nomas microframework, por kiu, 62 00:02:57,320 --> 00:02:59,800 Ili signifas ke estas tre Simpla, sed etendebla. 63 00:02:59,800 --> 00:03:02,980 Do, ĝi havas nur kion vi devas, sed se vi volas pli akcidentoj, 64 00:03:02,980 --> 00:03:04,522 estas facile venigi ilin en. 65 00:03:04,522 --> 00:03:06,480 Sed ĝuste ĉar ĝi estas microframework, ne 66 00:03:06,480 --> 00:03:08,960 signifas ke ĝi estas nur por malgrandaj projektoj. 67 00:03:08,960 --> 00:03:12,590 Mi havas ligilon ĉi tie kiu diras ke Obama uzita Flask en 2012 68 00:03:12,590 --> 00:03:14,410 por lia kampanjo retejo, kiu espereble, 69 00:03:14,410 --> 00:03:16,937 Estas io aŭ reklamo. 70 00:03:16,937 --> 00:03:18,770 Sed la afero, kiun mi vere ŝatas pri Flask 71 00:03:18,770 --> 00:03:22,401 estas ke, ĝi ne vere fari omnaspeca decidojn por vi. 72 00:03:22,401 --> 00:03:24,150 Nur ĉar ni estas parolas retejo apps, 73 00:03:24,150 --> 00:03:26,940 Mi devas kompari ĝin al Ruby on Reloj kaj Django, kiuj ambaŭ 74 00:03:26,940 --> 00:03:30,450 estas grandaj kadroj, sed ili ambaŭ faras supozojn 75 00:03:30,450 --> 00:03:33,600 pri kiel vi volas interagi kun datumbazoj, 76 00:03:33,600 --> 00:03:36,900 kiel vi volas prezenti vian opinioj, kaj ili estas sendube 77 00:03:36,900 --> 00:03:38,850 bonajn aspektojn al tio. 78 00:03:38,850 --> 00:03:41,490 >> Ekzemple, Ruby on Rails havas ĉi aktivaj rekordo sistemo, 79 00:03:41,490 --> 00:03:43,100 kiu estas vere bela maniero interagi kun datumoj, 80 00:03:43,100 --> 00:03:45,960 sed se vi volas uzi Ruby on Reloj, vi ia ligis en tiun. 81 00:03:45,960 --> 00:03:47,835 Sed kun Flask, kiel Mi timige montri vin kun Peewee, 82 00:03:47,835 --> 00:03:49,830 vi povas uzi ajn speco de datumbazo vi volas, 83 00:03:49,830 --> 00:03:53,980 kaj vi povas simple tiri ke en kiel etendaĵo en Flask. 84 00:03:53,980 --> 00:03:56,350 >> Tial do mi vere kiel Flask, estas ke ĝi 85 00:03:56,350 --> 00:04:01,170 ne faras supozojn por vi bazita sur aferoj vi ne bezonas vere. 86 00:04:01,170 --> 00:04:04,440 >> Do, kial vi uzas Flask? 87 00:04:04,440 --> 00:04:08,230 La avantaĝoj estas, ĝi nur havas vere la kerno karakterizaĵoj 88 00:04:08,230 --> 00:04:09,420 konstruita en ĝi, ke vi bezonas. 89 00:04:09,420 --> 00:04:11,980 Do, vi ne devas maltrankviligi kompreni tutan faskon da aferoj 90 00:04:11,980 --> 00:04:13,175 ke vi ne vere bezonas. 91 00:04:13,175 --> 00:04:15,060 Vi ne devas devi maltrankvili pri elŝalti trajtoj 92 00:04:15,060 --> 00:04:16,620 ke vi ne vere bezonas. 93 00:04:16,620 --> 00:04:21,082 >> Kaj, kiel mi menciis, ĝi estas super facile aldoni en etendoj de aferoj 94 00:04:21,082 --> 00:04:21,790 ke vi bezonas. 95 00:04:21,790 --> 00:04:24,700 Kelkaj el ili, Flask havas ilia propra subteno por ĝi. 96 00:04:24,700 --> 00:04:28,230 Do ekzistas io nomata Flask administristo, kiu respegulas tiun interfacon 97 00:04:28,230 --> 00:04:32,060 panelo kiu Django provizas, kiu donas al vi belan vida maniero 98 00:04:32,060 --> 00:04:33,405 administri via retejo. 99 00:04:33,405 --> 00:04:35,280 Sed denove, se vi estas farante ion simplan, 100 00:04:35,280 --> 00:04:39,550 vi probable ne bezonas grandan admin panelo, do mi kredas ke estas super bela. 101 00:04:39,550 --> 00:04:45,940 Kaj la malavantaĝoj estas, ke vi havas malpli povon el la skatolo. 102 00:04:45,940 --> 00:04:49,660 Do, kiam vi unue malfermi Flask, kaj en via Python programo, 103 00:04:49,660 --> 00:04:53,150 vi simple tajpu el Flask import *, aŭ kio ajn, 104 00:04:53,150 --> 00:04:55,957 vi ne ĝuste akiri ĉiujn de trajtojn vi povus volas. 105 00:04:55,957 --> 00:04:58,540 Kaj do vi devas pli eksplicite listigi la trajtoj vi volas. 106 00:04:58,540 --> 00:05:01,990 Do jen unu malavantaĝon, sed mi opinias ke por konstrui malgrandan ttt 107 00:05:01,990 --> 00:05:04,782 apps kiel mi tuj montros vi, tio ne estas vere problemo. 108 00:05:04,782 --> 00:05:07,281 Kaj kio la lasta objekto estas supozis diri, kio estas tajperaro, 109 00:05:07,281 --> 00:05:10,240 estas ke estas malpli normigitaj konvenciojn por kiel uzi Flask, 110 00:05:10,240 --> 00:05:12,400 nur ĉar ne estas tiom da personoj kiuj uzas ĝin profesie 111 00:05:12,400 --> 00:05:13,191 kompare al Django. 112 00:05:13,191 --> 00:05:16,380 Do, se vi rigardas ion kiel, "kiel mi faru x" en Django, 113 00:05:16,380 --> 00:05:18,190 vi probable trovos. 114 00:05:18,190 --> 00:05:20,260 >> Ekzistas bona dezajno ŝablonoj vi povas uzi, 115 00:05:20,260 --> 00:05:22,660 sed kun Flask, estas ia iri vian propran vojon, 116 00:05:22,660 --> 00:05:24,850 nur ĉar ĝi estas bela malgranda biblioteko. 117 00:05:24,850 --> 00:05:27,100 Do tiuj estas la malavantaĝojn, sed mi pensas 118 00:05:27,100 --> 00:05:29,370 ke ĝi estas ankoraŭ bona biblioteko uzi. 119 00:05:29,370 --> 00:05:31,909 >> Do ni nur salti rekte en Flask. 120 00:05:31,909 --> 00:05:34,200 Tio estas definitive ne tuj esti kompleta lernilo, 121 00:05:34,200 --> 00:05:37,480 sed ĝi estas doni al vi ideon de kiel strukturi aferojn, 122 00:05:37,480 --> 00:05:40,790 kaj tial vi sentas komforta iranta ekstere kaj rigardis la dokumentado 123 00:05:40,790 --> 00:05:42,570 kaj elŝeligi pli. 124 00:05:42,570 --> 00:05:48,500 >> Do, lasu min malfermi vere Simpla ekzemplo unue, 125 00:05:48,500 --> 00:05:50,737 kaj al vi, kion tiu similas, kaj poste ni 126 00:05:50,737 --> 00:05:52,070 rompi ĝin malsupren iomete pli. 127 00:05:52,070 --> 00:05:56,160 >> Do ĉi tie, mi povas akiri ĝin kuranta. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Do, mi nun havas mian apliko kurado. 130 00:06:09,750 --> 00:06:15,910 Mi tuj malfermu Safari, kaj ĝi estas kurante sur mia loka gastiganto. 131 00:06:15,910 --> 00:06:19,360 Do mi simple tuj fari tiun pli grandan. 132 00:06:19,360 --> 00:06:23,960 Sed localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Kaj do, nun, ĉiu tiu faras estas, kiam vi vizitos la retejon, 134 00:06:27,650 --> 00:06:31,490 ĝi presas el "Saluton Flask" Kiu ne estas super utila, 135 00:06:31,490 --> 00:06:34,630 sed mi kredas ke estas cool, ke en tiu malgranda dosiero tie, 136 00:06:34,630 --> 00:06:37,390 ni havos retservilo kurado ke estas presi el io. 137 00:06:37,390 --> 00:06:40,500 Do, ni vere rigardi ĉe la kodo por dua, 138 00:06:40,500 --> 00:06:43,080 kaj gxin detruis iomete. 139 00:06:43,080 --> 00:06:45,260 Estas la grandeco bona por ĉiu ĉi tie? 140 00:06:45,260 --> 00:06:51,560 >> Do, espereble, vi estas iom komforta uzante Python. 141 00:06:51,560 --> 00:06:55,820 Mi supozas ke ni povas rigardi la Python kaj tralegis ĝin. 142 00:06:55,820 --> 00:06:59,290 Se vi havas demandojn pri ion, mi povas iri ankaŭ trans tio. 143 00:06:59,290 --> 00:07:03,974 >> Do la unua linio estas, de Flask, ni importi, Flask kun majuskla "F" 144 00:07:03,974 --> 00:07:06,140 kiu estas speco de ĉiuj ĉefaj karakterizaĵoj kiujn vi bezonas. 145 00:07:06,140 --> 00:07:08,890 Kiam ajn vi skribas dosiero kaj uzante Flask, 146 00:07:08,890 --> 00:07:12,120 vi tuj volas importi ke, nur ĉar kiu havas ĉiujn ĉefajn aferojn. 147 00:07:12,120 --> 00:07:15,400 La sekva afero, kiun ni faras, estas ni nomas tiun funkcion Flask, ĵus 148 00:07:15,400 --> 00:07:19,270 krei app celon, kaj vi estas ĉiam tuj volos fari tion. 149 00:07:19,270 --> 00:07:25,960 >> Kaj poste, saltante malsupren al la malsupro rapide, ĉi tiu parto estas ĉi tie, 150 00:07:25,960 --> 00:07:28,760 'if_nomo _ == "_ main_"' kiu estas ia Python konvencio. 151 00:07:28,760 --> 00:07:32,750 Do ĉi nur ekzekuti se vi kuri tiun dosieron rekte uzanta Python. 152 00:07:32,750 --> 00:07:36,040 Tiam ni nomas app.run, kiuj volas efektive komenci la app iras. 153 00:07:36,040 --> 00:07:39,570 >> Do, jen la ĉefa strukturo kiu vi devos en neniun Flask apliko, 154 00:07:39,570 --> 00:07:48,550 Estas vi havos tiun app = Flask (_name_), kaj tiam app.run. 155 00:07:48,550 --> 00:07:54,940 >> Do, la du aĵoj kiujn mi havas en tie, estas kion ni nomas itineroj. 156 00:07:54,940 --> 00:07:57,150 Do, ni parolu pri routing iomete pli. 157 00:07:57,150 --> 00:07:58,430 Mi reiros al la diapozitivo. 158 00:07:58,430 --> 00:08:02,540 >> Do la plej fundamentaj koncepto en Flask estas routing. 159 00:08:02,540 --> 00:08:06,750 Kaj ĝi estas la ideo ke vi asigni funkciojn en Python 160 00:08:06,750 --> 00:08:11,280 al aparta adresoj sur via retpaĝo. 161 00:08:11,280 --> 00:08:13,930 Do, kiam ajn vi volas krei novan itineron, 162 00:08:13,930 --> 00:08:16,500 vi uzas tiun @ app.route funkcio logejdezajnisto. 163 00:08:16,500 --> 00:08:19,770 Do, se vi ne kutimas funkcio decoradores en Python, 164 00:08:19,770 --> 00:08:24,160 ĝi estas tiu koncepto kiu permesas preni funkcio 165 00:08:24,160 --> 00:08:26,800 kaj ĉirkaŭas ĝin per io alia. 166 00:08:26,800 --> 00:08:30,140 >> Do vere, kion tiu logejdezajnisto faras, estas kiu portas la funkcio sub ĝi, 167 00:08:30,140 --> 00:08:33,409 kaj ĝi aldonas pli informo al ĝi, sed kion Flask reale 168 00:08:33,409 --> 00:08:37,480 faras fari kiuj okazas ne estas súper crucial, sed kio estas grava, 169 00:08:37,480 --> 00:08:43,640 estas ke antaŭ la itinero, vi metis tiun @ app.route, kaj tiam 170 00:08:43,640 --> 00:08:46,480 la adreso de la itinero, do la oblikvo estas kion ni 171 00:08:46,480 --> 00:08:48,360 vidis kiam ni simple malfermi la retpaĝon. 172 00:08:48,360 --> 00:08:49,580 Do jen la hejmpaĝo. 173 00:08:49,580 --> 00:08:51,037 Estas nur la oblikvo itinero. 174 00:08:51,037 --> 00:08:52,370 Kaj tiam vi havas tiun funkcion. 175 00:08:52,370 --> 00:08:54,453 La nomo de la funkcio povas esti kion vi volas. 176 00:08:54,453 --> 00:08:56,930 Ĝi ne devas nepre devi fari kun la itinero. 177 00:08:56,930 --> 00:08:59,440 Kaj tiam, kio ajn la funkcio reveno, 178 00:08:59,440 --> 00:09:01,730 la funkcio devus reveni kordo. 179 00:09:01,730 --> 00:09:03,740 Kaj ke kordoj povas enhavas HTML aŭ nenion, 180 00:09:03,740 --> 00:09:06,920 kaj tio estas vere kio ricevos Revenis al via retumilo kiel HTML, 181 00:09:06,920 --> 00:09:08,200 kaj ĝi redonos tion. 182 00:09:08,200 --> 00:09:12,030 >> Do tiu estas la sama kodo kiu estis de la ekzemplo 183 00:09:12,030 --> 00:09:16,430 ke mi ĵus kuris, do kiam ni vizitas oblikvo, ĝi nomas Saluton Mondo funkcio, kiun 184 00:09:16,430 --> 00:09:20,470 ĝuste redonas ĉenon, Saluton Flask, kaj ke gets presita sur la ekrano. 185 00:09:20,470 --> 00:09:27,290 >> Do ekzistas alia ekzemplo, kio estas, kiam vi vizitas / saluton, 186 00:09:27,290 --> 00:09:30,370 ĝi presas el Saluton Vorto, kiu devus reale diri, Saluton Mondo, 187 00:09:30,370 --> 00:09:32,010 sed ni ŝajnigi ke estis intenca. 188 00:09:32,010 --> 00:09:35,140 Do ni tiri ke ĝis reala rapida. 189 00:09:35,140 --> 00:09:41,290 >> Do se vi iros al localhost / saluton, ĝi nun presi ion alian. 190 00:09:41,290 --> 00:09:45,680 Do jen nur rapida ekzemplo de kiel vi povas krei du malsamajn itinerojn. 191 00:09:45,680 --> 00:09:50,630 >> Do, ĝis nun ĉi tio ne estas super utila, ekzistas ne tuta multo vi povas fari, 192 00:09:50,630 --> 00:09:55,360 vi povus simple fari cxion per havante malsamaj HTML paĝoj, 193 00:09:55,360 --> 00:09:58,000 kaj kiam vi vizitas apartan Paĝa ĝi nur ŝarĝas la paĝon. 194 00:09:58,000 --> 00:10:00,864 Do ni vidu iom pli utilaj aĵoj vi povas fari. 195 00:10:00,864 --> 00:10:03,780 Do, unu afero ke vi havu rimarkis en la ekzemplo kiun mi tiris 196 00:10:03,780 --> 00:10:07,160 supren, estas ke mi app.run (debug = Vera). 197 00:10:07,160 --> 00:10:09,580 Kaj do, kio estas tiu debug argumento faras, estas 198 00:10:09,580 --> 00:10:14,600 ke kiam vi kuros viaj retservilo, kiam vi estas en via apliko, 199 00:10:14,600 --> 00:10:18,100 se vi ŝanĝas dosiero, ĝi volo aŭtomate reload la servilo. 200 00:10:18,100 --> 00:10:21,160 >> Kaj tial vi ne efektive devas rekomenco Python, kiu estas super utila. 201 00:10:21,160 --> 00:10:24,020 Mi povas montri ke. 202 00:10:24,020 --> 00:10:26,960 Lasu min eltiri supren mia kodo kun la tajperaro en ĝi, 203 00:10:26,960 --> 00:10:30,420 kaj ŝajnigi ke tajperaro estis metita tie intence por instrua celoj. 204 00:10:30,420 --> 00:10:31,625 Do ni aldonu tiun reveni. 205 00:10:31,625 --> 00:10:33,140 Do nun diras Saluton Mondo. 206 00:10:33,140 --> 00:10:34,410 Mi savos. 207 00:10:34,410 --> 00:10:36,540 Kaj se ni tiri reen supren la fina stacio, vi 208 00:10:36,540 --> 00:10:39,520 diru ke ĝi estas rekomencanta, ĉar ĝi detektas ŝanĝon, 209 00:10:39,520 --> 00:10:43,620 kaj tiel nun kiam ni reŝargi tiun paĝon, ĝi estos presi lin ĝentila. 210 00:10:43,620 --> 00:10:45,630 >> Do debug estas super utila por ke. 211 00:10:45,630 --> 00:10:48,740 Ankaŭ, se vi havas neniun ia bruego, tiel 212 00:10:48,740 --> 00:10:54,370 lasu min fari ĉi aplikaĵo kraŝo por havi ŝin ne reveni kordo. 213 00:10:54,370 --> 00:10:57,540 Do, ni nur havas ĝin reveni Neniu ial. 214 00:10:57,540 --> 00:11:00,810 Kaj poste kiam mi vizitas tiun paĝo, ĝi nur kraŝi, 215 00:11:00,810 --> 00:11:04,465 sed la servilo ne nur frakasi, ĝi efektive donas vin super utila reen 216 00:11:04,465 --> 00:11:06,490 spuro de ĉio fuŝiĝis. 217 00:11:06,490 --> 00:11:10,050 Kaj kio estas vere bela, estas ke cxe cxiu pasxo en tiu reen spuro, 218 00:11:10,050 --> 00:11:14,260 vi povus malfermi interagan alkanonadi tie, kaj ia presi kio 219 00:11:14,260 --> 00:11:17,780 variabloj vi volas rigardu. 220 00:11:17,780 --> 00:11:21,054 >> Kaj elpuriganta tiel estas vere utila por elŝeligi 221 00:11:21,054 --> 00:11:23,470 kio okazas kun via servilo, anstataŭ nur vidante 222 00:11:23,470 --> 00:11:28,201 io en PHP kiel 500 internajn servilo eraro, kiu estas super senutila. 223 00:11:28,201 --> 00:11:30,700 Unu afero esti konscia de estas ke se vi metas vian programon rete 224 00:11:30,700 --> 00:11:34,260 do ĝi estas videbla al la publiko, vin neniam volas forlasi debug mode plu, 225 00:11:34,260 --> 00:11:37,320 ĉar homoj povas fakte uzas tiun konzolon ke mi 226 00:11:37,320 --> 00:11:39,150 montris vin ekzekuti arbitran kodon. 227 00:11:39,150 --> 00:11:42,120 >> Do ili povas presi kiel ajna sekretaj kodoj vi havas en tie, 228 00:11:42,120 --> 00:11:44,755 Ili povas rigardi akurate kiel via retejo funkcias. 229 00:11:44,755 --> 00:11:46,630 Do estas vere utilaj por testado, sed ĉiam 230 00:11:46,630 --> 00:11:50,090 certigi preni gxin antaux vi eldonis nenion rete. 231 00:11:50,090 --> 00:11:56,640 >> Do kiam vi uzas io kiel PHP, ekzistas tiu ideo 232 00:11:56,640 --> 00:11:58,920 ke vi povas pasi informo inter retpaĝoj 233 00:11:58,920 --> 00:12:03,620 metante la informo reale en la URL, kio estas GET peton, 234 00:12:03,620 --> 00:12:07,490 sed en Flask, vi povas efektive fari ion ia kiel tiu, 235 00:12:07,490 --> 00:12:10,590 por havi vojon kiu havas ŝanĝiĝema kiel parto de ĝi. 236 00:12:10,590 --> 00:12:14,090 >> Do se vi rigardas tiun ekzemple sur la ekrano tie, 237 00:12:14,090 --> 00:12:19,930 ni havos itineron tio ('/ saluton / "), kaj tial, se vi vizitos 238 00:12:19,930 --> 00:12:23,790 / saluton / io, ke io tuj reale preni plenigis 239 00:12:23,790 --> 00:12:25,490 en la nomo variablo. 240 00:12:25,490 --> 00:12:27,850 Kaj rimarki ke la funkcio kiu venas kun tiu itinero 241 00:12:27,850 --> 00:12:31,302 devas preni en la parametro nomo, por ke ĝi estos reale 242 00:12:31,302 --> 00:12:32,510 get pasis en la funkcio. 243 00:12:32,510 --> 00:12:34,190 >> Kaj tiam, unufoje vi estas interne de tiu funkcio, 244 00:12:34,190 --> 00:12:36,420 vi povas trakti ke kiel normala Python ŝanĝiĝema, 245 00:12:36,420 --> 00:12:39,650 Kaj tiel do, ĝi volo elprinti Saluton, kaj ĝi 246 00:12:39,650 --> 00:12:42,000 plenigos la nomon uzante iuj kordoj strukturado. 247 00:12:42,000 --> 00:12:48,060 >> Do aldoni variablo partoj al enrutamiento, vi uzas la angulo krampo markante. 248 00:12:48,060 --> 00:12:51,220 Kaj laŭvole, vi povas uzi kio nomiĝas konvertilo. 249 00:12:51,220 --> 00:12:56,840 Kaj do, se vi metas ĉi komentario kun la dupunkto, 250 00:12:56,840 --> 00:13:00,015 vi povas specifi ke ĝi estas int aŭ kaleŝego, aŭ vojeto, 251 00:13:00,015 --> 00:13:01,640 kaj ĝi aŭtomate konvertiĝos tio. 252 00:13:01,640 --> 00:13:05,130 Vi povas ankaŭ fari la konvertiĝon ene la Python funkcio, 253 00:13:05,130 --> 00:13:09,710 nur uzante razion, sed kelkfoje se Vi volas certigi ke ĝi estas int, 254 00:13:09,710 --> 00:13:12,080 vi povas meti tiun konvertiĝo regulo en tie. 255 00:13:12,080 --> 00:13:15,930 >> Do ni elsxiros ekzemplo de iu variablo reguloj. 256 00:13:15,930 --> 00:13:21,480 Do jen, tiu havas la saman bazan strukturo kun la de Flask importado 257 00:13:21,480 --> 00:13:25,030 Flask, la app = Flask (_name_), kaj tiam ĝi estas kurante fine. 258 00:13:25,030 --> 00:13:28,050 Ni havas tiujn du malsamajn ŝanĝiĝema itineroj tie. 259 00:13:28,050 --> 00:13:29,900 Kaj la unua, estas kiu mi montris 260 00:13:29,900 --> 00:13:34,230 en la diapozitivoj, kiujn estis ke ĝi nur prenas en ĉeno nomon 261 00:13:34,230 --> 00:13:35,650 kaj ĝi estos presi Saluton, Nomo. 262 00:13:35,650 --> 00:13:41,410 >> Kaj tiam, la dua unu uzas la konvertiĝo. 263 00:13:41,410 --> 00:13:44,690 Do tiu aŭtomate konverti ĝin al int, kaj tiam duobligi la int, 264 00:13:44,690 --> 00:13:46,150 kaj presi ke eksteren. 265 00:13:46,150 --> 00:13:48,220 Kaj, ni ne fari ajnan specon de konvertiĝo en ĝi 266 00:13:48,220 --> 00:13:49,594 ĉar Flask prizorgas tion. 267 00:13:49,594 --> 00:13:53,181 Do ni ricevas ĉi kurado. 268 00:13:53,181 --> 00:13:54,930 Kiam vi havas Flask apliko kurado, 269 00:13:54,930 --> 00:13:58,440 Vi povas kontroli-C el ĝi haltigi la servilo kurado. 270 00:13:58,440 --> 00:14:02,420 Kaj tiam mi kuros la variabloj. 271 00:14:02,420 --> 00:14:11,740 >> Do ni iru al localhost / saluton / Ezra kaj espereble, tiu diros saluton al mi. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Do ĝi prenis en mia nomo, en la variablo itinero, kaj ĝi plenigis lin tien. 274 00:14:20,310 --> 00:14:23,950 Do mi ankaŭ montras rapidan ekzemplo de la duobligo. 275 00:14:23,950 --> 00:14:28,600 Do se vi iros al / duoblaj / 3, ĝi estos presi 6. 276 00:14:28,600 --> 00:14:31,440 Do ĉi zorgis pri la konvertiĝo por ni. 277 00:14:31,440 --> 00:14:34,190 >> Do vi povas fari ĝin ankaŭ kun kaleŝego, kaj io speciala, 278 00:14:34,190 --> 00:14:37,530 se vi bezonos specifi ion kiel vojeton, kiu lasas ŝin akcepti slashes, 279 00:14:37,530 --> 00:14:39,155 sed tio ne devus kutime esti afero. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Ĝis nun, ankoraŭ ĵus reveninte 282 00:14:43,820 --> 00:14:46,320 kordoj, kiu ne estas tre interesa. 283 00:14:46,320 --> 00:14:48,730 >> Ni povus vere revenos laŭvorta HTML kordo. 284 00:14:48,730 --> 00:14:54,322 Do en la kodo oni povas enmeti ion kiel la b-etikedon por fari grasan, 285 00:14:54,322 --> 00:14:56,030 sed maksimume la tempo vi Usonanoj ne volas 286 00:14:56,030 --> 00:14:58,420 esti skribanta HTML kodo en via Python kodo. 287 00:14:58,420 --> 00:15:01,940 Ĝi akiras vere senorda, kaj ĝi ne estas bona tempo. 288 00:15:01,940 --> 00:15:06,430 >> Flask permesas nin disigi ekster la HTML en kio nomiĝas la Ŝablono: 289 00:15:06,430 --> 00:15:09,467 kaj do se vi pensas laŭ la modelo MVC 290 00:15:09,467 --> 00:15:11,550 ke vi konas, espereble, plu labori 291 00:15:11,550 --> 00:15:15,520 kun CS50 Financoj iomete, vi povas pensi pri la Python dosierojn 292 00:15:15,520 --> 00:15:19,430 kiel esti pli de la Regilo, kie Ili interagas kun kiom 293 00:15:19,430 --> 00:15:20,970 datumoj modelo vi povus havi. 294 00:15:20,970 --> 00:15:24,900 >> Kaj tiam ili estas vokante por Vidoj kaj pasanta informon al tiu View 295 00:15:24,900 --> 00:15:28,120 plenigi la informojn en HTML kiu ŝin bezonas. 296 00:15:28,120 --> 00:15:30,490 Kaj kion ni nomas tiujn Vidoj Estas Ŝablonoj en klaso. 297 00:15:30,490 --> 00:15:35,280 >> Do Flask uzas alian Pitono modulon ke ĝi aŭtomate 298 00:15:35,280 --> 00:15:38,620 instali kiam vi PIP instali Flask nomita Jinja, kiu 299 00:15:38,620 --> 00:15:40,885 permesas aldoni tiujn komentarioj al la HTML 300 00:15:40,885 --> 00:15:45,140 ke vi vidas sur la ekrano, kiu permesas vi metis en aĵoj kiel Conditionals, 301 00:15:45,140 --> 00:15:47,230 kaj loops en la HTML. 302 00:15:47,230 --> 00:15:51,140 >> Do ĝi aspektas iom kiel kiom vi povus uzi PHP ene HTML -dosiero, 303 00:15:51,140 --> 00:15:57,380 sed tio estas nur kiam la Flask servilo servas la HTML -dosiero, 304 00:15:57,380 --> 00:16:01,610 ĝi kuros ĉi templating motoro kaj analizi tra tiu kaj plenigi aferoj. 305 00:16:01,610 --> 00:16:06,650 Do Flask havas render_template funkcio ke vi povas vidi ĉe la fundo tie. 306 00:16:06,650 --> 00:16:14,300 Kaj do kiam vi vizitas paĝon, ĝi farus ĉi hello.html Ŝablono: 307 00:16:14,300 --> 00:16:16,407 kaj tiam plenigu ĉi HTML-paĝo. 308 00:16:16,407 --> 00:16:18,990 Do ni nur kuri ĉi reala rapida, kaj vidi kia gxi aspektas, 309 00:16:18,990 --> 00:16:21,198 kaj tiam mi iros tra iomete pli detale. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Do, via Ŝablonoj iras iri en Ŝablonoj dosierujo. 312 00:16:30,260 --> 00:16:33,980 Ĝi aŭtomate rigardi ene de la Ŝablonoj leterujo por tiu Ŝablono. 313 00:16:33,980 --> 00:16:35,615 Do ni malfermos ĉi supre. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Do, mi kuros la Templating ekzemplo. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Do, se mi iros al / saluton / Ezra, ĝi havas tiun hororan, 318 00:17:03,660 --> 00:17:05,930 malnormala karpo etikedo kiun mi metis en. 319 00:17:05,930 --> 00:17:08,050 Tre bela, tre dinamikaj. 320 00:17:08,050 --> 00:17:09,349 Mi estas granda ŝatanto. 321 00:17:09,349 --> 00:17:13,900 Sed kio okazas se Mi simple iru al: / Saluton? 322 00:17:13,900 --> 00:17:15,220 Do nur diras Saluton Mondo. 323 00:17:15,220 --> 00:17:17,678 Mi ne pasis al li nomon, kaj ĝi plenigis ĝin aŭtomate. 324 00:17:17,678 --> 00:17:22,050 Do ni vidu kiel ĝi faris ke, kaj kiel ni povas liveri de tiu markezo eble. 325 00:17:22,050 --> 00:17:26,240 >> Do jen, ĉi tiu estas speco de interesa ekzemplo de, 326 00:17:26,240 --> 00:17:29,101 se vi estas familiara kun kiel ŝaltilo deklaroj labori en lingvo. 327 00:17:29,101 --> 00:17:31,350 Diru ĉi estas speco de kiel, ke ia falo tra, 328 00:17:31,350 --> 00:17:34,266 kie vi efektive alkroĉita du malsamaj vojoj al la sama funkcio. 329 00:17:34,266 --> 00:17:41,190 Do ni alfiksi la / saluton itinero kaj la / saluton / nomo itinero al Saluton, 330 00:17:41,190 --> 00:17:45,130 kaj ni entajpi using-- Python permesas specifi defaŭlta funkcio arguments-- 331 00:17:45,130 --> 00:17:48,300 do se ne ekzistas nomo, do se ni iras al nur / saluton, 332 00:17:48,300 --> 00:17:50,680 ĝi estos aŭtomate filtri al nomo egalas Neniu. 333 00:17:50,680 --> 00:17:55,010 >> Tial, ni redonu la Ŝablono kun nomo = nomo, 334 00:17:55,010 --> 00:17:59,510 do ĝi pasos en la nomo parametro egala al tiu nomo funkcio parametro, 335 00:17:59,510 --> 00:18:00,730 en la ŝablono. 336 00:18:00,730 --> 00:18:04,040 Tio ankoraŭ ne klarigas kiel estas decidi ĉu presi Saluton Mondo, 337 00:18:04,040 --> 00:18:05,100 aŭ presi mian nomon. 338 00:18:05,100 --> 00:18:08,050 Do ni vere rigardi en la ŝablono mem, 339 00:18:08,050 --> 00:18:11,610 kaj vidu kie tiu venas de. 340 00:18:11,610 --> 00:18:18,680 >> Do, ene de tiu ŝablono, ni efektive havas iom kondiĉa logiko, 341 00:18:18,680 --> 00:18:20,580 kiun iuj personoj havus argumenti, vi efektive 342 00:18:20,580 --> 00:18:23,730 ne havu multajn kondiĉa logiko ene via ŝablono mem. 343 00:18:23,730 --> 00:18:26,310 Ĝi devus esti pli ene de la Regilo, sed por ĉi tiu ekzemplo 344 00:18:26,310 --> 00:18:27,476 ĝi estas io bela malgranda. 345 00:18:27,476 --> 00:18:31,060 Do jen, ni kontrolu, se nomo, do se nomo ne estas egala al Neniu, 346 00:18:31,060 --> 00:18:33,130 Se nomo estas vere pasis en, tiam ni 347 00:18:33,130 --> 00:18:36,210 diru Saluton, Nomo kun la header kaj la karpo, 348 00:18:36,210 --> 00:18:41,490 ĉiuj ĉi normalaj HTML, alie, ni volas elprinti Saluton, Mondo nur kutime. 349 00:18:41,490 --> 00:18:45,820 Do kelkaj aferoj rimarki tie pri kiel vi formati la templating, 350 00:18:45,820 --> 00:18:49,110 estas ke, ĉiuj tiuj kondiĉa deklaroj, 351 00:18:49,110 --> 00:18:54,475 ia kiel ni kiel PHP ĝin kiam vi volas enigi iuj PHP, 352 00:18:54,475 --> 00:18:58,380 vi uzas la malpli-ol demando markon, ĝi estas speco de analogaj tie 353 00:18:58,380 --> 00:19:00,140 kun la {%. 354 00:19:00,140 --> 00:19:02,130 >> Do jen, ni havas niajn kondiĉan kodon. 355 00:19:02,130 --> 00:19:05,920 Kaj poste, kiam vi vere volas laŭvorte taksi ion, kaj presaĵo 356 00:19:05,920 --> 00:19:08,710 gxin por la ekrano, vi uzi la duoblaj krampoj. 357 00:19:08,710 --> 00:19:12,310 Do jen la duobla krampoj, kaj tiam ni specifi nomon 358 00:19:12,310 --> 00:19:15,500 do ene de tiu, ĝi devos taksi al la variablo nomo, kiun 359 00:19:15,500 --> 00:19:18,860 estis pasita en el redonu ŝablono funkcio, 360 00:19:18,860 --> 00:19:21,484 anstataŭ nur printado eksteren, se ni forigis tiujn, 361 00:19:21,484 --> 00:19:23,150 estus ĝuste presi la vorto "nomo". 362 00:19:23,150 --> 00:19:26,340 Do, jen io rigardi ekstere por. 363 00:19:26,340 --> 00:19:29,792 >> Do alia afero atenton estas ke, kiam ni 364 00:19:29,792 --> 00:19:31,500 volas uzi la render_template funkcio, 365 00:19:31,500 --> 00:19:34,490 ni efektive devas importi eksplicite el Flask. 366 00:19:34,490 --> 00:19:36,915 Kaj tiu estas ekzemplo de la modularidad de Flask, 367 00:19:36,915 --> 00:19:39,290 ke vi ne devas importi aferoj, kiujn vi ne bezonas. 368 00:19:39,290 --> 00:19:41,290 Vi povas simple venigu la funkcioj vi reale 369 00:19:41,290 --> 00:19:43,450 ja bezonas, kiu estas kelkfoje bela, do vi ne 370 00:19:43,450 --> 00:19:46,560 devas havi ĉiuj tiuj funkcioj sidas ĉirkaŭ tiu vi ne uzas, 371 00:19:46,560 --> 00:19:49,730 sed ankaŭ, se vi forgesas ke vi bezonas importi render_template, 372 00:19:49,730 --> 00:19:52,660 vi probable ricevos averton kiu lasos vin scii pri tio. 373 00:19:52,660 --> 00:19:56,700 Do, tio estas templating. 374 00:19:56,700 --> 00:20:01,680 >> Do, ni montris kiel fari simplajn retpaĝojn, 375 00:20:01,680 --> 00:20:04,947 kaj aldoni iomete pli logiko al ĝi, en terminoj de la variablo enrutamiento. 376 00:20:04,947 --> 00:20:08,280 Ĝi permesas fari malsamajn aferojn surbaze kio URL vi iru, kaj ankaŭ tiam, donu 377 00:20:08,280 --> 00:20:11,950 la HTML iomete pli sentita en terminoj de kiel vi volas repagi aferojn. 378 00:20:11,950 --> 00:20:14,210 Vi ne devas meti ĉiuj via HTML en via Python, 379 00:20:14,210 --> 00:20:16,640 sed por sufiĉe tre ĉiu apliko retejo, 380 00:20:16,640 --> 00:20:21,480 vi tuj volas ian de datuma modelo asociita kun ĝi. 381 00:20:21,480 --> 00:20:25,560 >> Kaj tiel tradicie, tio esti io kiel SQL datumbazo. 382 00:20:25,560 --> 00:20:30,280 Kaj vi povas simple interagi rekte kun SQL. 383 00:20:30,280 --> 00:20:32,190 Python havas, mi pensas ĝi nomiĝas. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Vi povas simple importi SQLite 3 kaj ekzekuti SQL sercxoj rekte, 386 00:20:38,454 --> 00:20:40,870 sed mi ne scias pri vi, Sed mi vere ne ŝatas, simple, 387 00:20:40,870 --> 00:20:42,750 skribado SQL pridemandojn. 388 00:20:42,750 --> 00:20:45,350 Ĝi inklinas akiri vere longa kaj komplika. 389 00:20:45,350 --> 00:20:49,180 >> Kaj do, iu kiu Mi ŝatas uzi estas kio estas 390 00:20:49,180 --> 00:20:53,610 konata kiel ORM, kiu estas objekto-interrilata mapado. 391 00:20:53,610 --> 00:20:56,890 Kaj la punkto de objekto-interrilata mapado, 392 00:20:56,890 --> 00:21:00,100 estas ke ekzistas du malsamaj manieroj vi povas pensi pri datumbazoj. 393 00:21:00,100 --> 00:21:03,240 >> Do la ekzemplo kiu Profesoro Malan kutime 394 00:21:03,240 --> 00:21:07,660 uzas en klaso, estas la Excel tablo, kie vi havos tiujn vicoj kaj tiujn kolumnojn, 395 00:21:07,660 --> 00:21:10,210 kaj tio estas vere utila por kiel estas reprezentita en SQLa 396 00:21:10,210 --> 00:21:13,170 kaj kiel vi interagas kun ĝi, sed alia vojo ke fakte 397 00:21:13,170 --> 00:21:16,390 utile pensi pri ĝi kelkfoje, estas en terminoj de klasoj kaj objektoj. 398 00:21:16,390 --> 00:21:20,420 >> Do anstataŭ pensado de ĉiu tablo kiel havanta 399 00:21:20,420 --> 00:21:23,040 tiu vico kiu havas certajn informoj, vi povas efektive 400 00:21:23,040 --> 00:21:26,100 rigardante ĝin kiel estante ĉiu tablo estas klaso, 401 00:21:26,100 --> 00:21:29,810 kaj tiam ĉiu petskribo de la klaso havas certaj propraĵoj. 402 00:21:29,810 --> 00:21:35,110 Do, en ĉi tiu ekzemplo, la kazoj de la klaso estas la vicoj de la tabulo, 403 00:21:35,110 --> 00:21:37,490 kaj tiam ĉiu posedaĵo farus esti kolumnon en la tabelo. 404 00:21:37,490 --> 00:21:40,840 >> Do, la ORM, ke Mi ŝatas uzi nomiĝas Peewee. 405 00:21:40,840 --> 00:21:43,520 Estas vere malgranda, ia kiel Flask. 406 00:21:43,520 --> 00:21:46,760 Mi opinias ke ili iras bone kune, sed ekzistas multaj aliaj ORMs 407 00:21:46,760 --> 00:21:47,730 ke vi povas uzi. 408 00:21:47,730 --> 00:21:52,180 Pli populara estas konata kiel SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 kaj mi ne memoras kial mi origine elektis Peewee super SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 aŭ mi rakontus al vi, kial mi kredas ke estas la pli bona, 411 00:21:58,311 --> 00:22:01,060 sed ni nur tuj uzos tiun ĉar mi scias kiel uzi ĝin. 412 00:22:01,060 --> 00:22:04,760 >> Do, unu demando estas, kial devus vin ĝeni uzante ORM, 413 00:22:04,760 --> 00:22:07,552 anstataŭ nur rekte skribi SQL sercxoj? 414 00:22:07,552 --> 00:22:09,760 Kaj mi kredas ke la plej bona kazo, estas ke vi ne vere 415 00:22:09,760 --> 00:22:11,356 devas skribi SQL pridemandojn. 416 00:22:11,356 --> 00:22:14,480 Ĝi estas multe pli facila, kiel mi montros al vi, al fari aferojn kiel selektado, inserción, 417 00:22:14,480 --> 00:22:16,157 forigo, speciale krei tabelojn. 418 00:22:16,157 --> 00:22:17,990 Estas multe pli facile Skribi klaso strukturon, 419 00:22:17,990 --> 00:22:22,250 ol ĝi estas strukturi Krei Tabelo deklaro, sed unu afero 420 00:22:22,250 --> 00:22:25,710 esti konscia de, estas ke la ORM provos lia plej bona 421 00:22:25,710 --> 00:22:28,640 elkompreni la plej efika SQL query estus, 422 00:22:28,640 --> 00:22:30,110 sed foje ĝi ricevas ĝin malĝusta. 423 00:22:30,110 --> 00:22:32,660 >> Kaj speciale se vi estas laborante kun granda datenbazo, 424 00:22:32,660 --> 00:22:35,557 vi povas rimarki ke query kiuj devus esti kurante rapide, 425 00:22:35,557 --> 00:22:36,640 fakte prenante plu. 426 00:22:36,640 --> 00:22:40,164 Kaj se vi rigardas sub la kapuĉo je kiom la ORM interpretas ke en SQL, 427 00:22:40,164 --> 00:22:42,080 ĝi povus esti faranta ion vere ridindaj, 428 00:22:42,080 --> 00:22:44,371 nur ĉar ĝi ia gestadis viajn intencojn erara. 429 00:22:44,371 --> 00:22:48,080 Kaj, Tie estis tempoj kie Mi devis nuligi ĝin, kaj nur 430 00:22:48,080 --> 00:22:52,429 plenumados Miajn proprajn SQL pridemandojn, ĵus ĉar ĝi sintaksa analizo en stranga maniero. 431 00:22:52,429 --> 00:22:54,220 Do, ekzistas iu superkape, ĝuste en la maniero 432 00:22:54,220 --> 00:22:58,680 ke kompilas via deklaroj malsupren en SQL. 433 00:22:58,680 --> 00:23:06,200 >> Do, ni rigardu súper rapide ĉe simpla ekzemplo de datuma modelo 434 00:23:06,200 --> 00:23:07,350 ke vi povus uzi. 435 00:23:07,350 --> 00:23:11,880 Do, tiu estas Python kodo, kaj tiel la unua afero vi deziras fari estas el 436 00:23:11,880 --> 00:23:12,950 Peewee importado *. 437 00:23:12,950 --> 00:23:15,850 Do, kontraste Flask, kie vi havas ĉiuj tiuj individuaj moduloj, 438 00:23:15,850 --> 00:23:18,125 kaj vi volas importi Flask, kaj Skribi Ŝablono, kaj kelkaj aliaj 439 00:23:18,125 --> 00:23:20,690 ke ni vidos poste, de Peewee, vi povas simple importi ĉio, 440 00:23:20,690 --> 00:23:22,290 ĉar ĝi estas bela malgranda biblioteko. 441 00:23:22,290 --> 00:23:26,490 >> Do, la unua afero vi deziras fari, estas fakte krei la datumbazon objekto. 442 00:23:26,490 --> 00:23:31,212 Do, vi havas db = SqliteDatabase, kaj tiam la nomo de via datumaro. 443 00:23:31,212 --> 00:23:33,170 Kaj tion reale krei datumbazon objekto 444 00:23:33,170 --> 00:23:36,230 ke vi povas interagi kun, kun Peewee. 445 00:23:36,230 --> 00:23:40,570 >> Kaj tiam, ni havas la fakta modelo kiun ni volas krei. 446 00:23:40,570 --> 00:23:42,470 Do la tablo ni volas krei. 447 00:23:42,470 --> 00:23:47,270 Do, ene Peewee, ĉiu klaso havas lia propra tablo ene de via datumbazo. 448 00:23:47,270 --> 00:23:52,800 Do, ĉiuj la klasoj heredi de la baza modelo, 449 00:23:52,800 --> 00:23:55,960 kaj la ĉefurbo M modelo estas iu kiu estas difinita en Peewee. 450 00:23:55,960 --> 00:24:02,162 >> Do, ĉiuj viaj modeloj devus heredi kiel siaj plej superclase, 451 00:24:02,162 --> 00:24:04,620 ili devus heredi de la modelo, sed kio estas vere genia, 452 00:24:04,620 --> 00:24:07,610 estas ke vi povas efektive havas vian modeloj heredi de ĉiu alia. 453 00:24:07,610 --> 00:24:10,530 Kaj multa la tempo, via datumoj modeloj ne nepre 454 00:24:10,530 --> 00:24:13,754 fari belan heredajxon hierarkio, sed fojojn kie ili faras, ĝi estas vere bela, 455 00:24:13,754 --> 00:24:15,920 ĉar vi havas la modelon imanenta inter si. 456 00:24:15,920 --> 00:24:19,710 >> Do, ni difinas tiun klason 'studento', kiu heredas modelon, 457 00:24:19,710 --> 00:24:21,170 kaj ĝi havas tri propraĵoj. 458 00:24:21,170 --> 00:24:24,080 Ĝi havas ID, kiu estas a PrimaryKeyField, kiu 459 00:24:24,080 --> 00:24:26,920 Estas iu kiu estas provizita per Peewee, nomo estas Charfield, 460 00:24:26,920 --> 00:24:28,490 kaj grado estas IntegerField. 461 00:24:28,490 --> 00:24:32,260 Do tio povas esti aŭ ne esti kiom CS50 fakte stokas ĉiujn 462 00:24:32,260 --> 00:24:33,650 la studentaj karakteroj. 463 00:24:33,650 --> 00:24:36,060 Ĝi ne estas, sed jen kiel mi farus. 464 00:24:36,060 --> 00:24:37,920 >> Kaj tiam ĝi havas, ene tiu klaso, kaj ĉi 465 00:24:37,920 --> 00:24:41,620 Estas io, kion vi povas fari kun Python, vi povas havi nestitaj klasoj. 466 00:24:41,620 --> 00:24:43,920 Kaj tio estas io ke estas postulataj per Peewee. 467 00:24:43,920 --> 00:24:47,250 Do, tiu klaso Meta, vi havas specifi ke la datumbazo estas 468 00:24:47,250 --> 00:24:49,830 egala al la objekto ke ni kreis supre. 469 00:24:49,830 --> 00:24:54,339 Kaj tiu diras kio dosiero estas ĉi tablo fakte tuj estos enhavita en. 470 00:24:54,339 --> 00:24:57,130 Do tiu estas iu kiu vi devas fari ene ĉiujn viajn modelojn. 471 00:24:57,130 --> 00:24:59,380 Vi nur devas specifi ene tiu Meta klaso 472 00:24:59,380 --> 00:25:01,400 ke datumbazo egalas db. 473 00:25:01,400 --> 00:25:03,940 Do kion mi kutime faras, se mi havas faskon de malsamaj modeloj, 474 00:25:03,940 --> 00:25:05,910 estas ke mi havas unu bazo modelo, kiun mi kutime 475 00:25:05,910 --> 00:25:08,839 simple nomas "baza modelo" kiu havas la Meta klaso, 476 00:25:08,839 --> 00:25:10,380 kaj ĝi fiksas la datumbazo egala al db. 477 00:25:10,380 --> 00:25:13,710 Kaj poste ĉiuj el miaj postaj modeloj heredontoj de tiu bazo klaso. 478 00:25:13,710 --> 00:25:16,760 Kaj tiam mi ne devas maltrankviligi pri fiksanta la Meta klaso. 479 00:25:16,760 --> 00:25:21,490 >> Do, kiam tiu fakte ricevas kompilita malsupren en SQL aserto, 480 00:25:21,490 --> 00:25:24,875 ĝi aspektas kiel tiu aĉa afero malsupren tie, "Krei tablo studento ID entjero, 481 00:25:24,875 --> 00:25:26,020 "Ajn. 482 00:25:26,020 --> 00:25:30,002 >> Kaj, mi pensas ke ĝi estas pli mallonga, ĉi SQL query ĉi tie, 483 00:25:30,002 --> 00:25:32,960 sed se vi rigardas tiun klason tie vi povas vidi ĝuste kio okazas. 484 00:25:32,960 --> 00:25:36,116 Vi povas vidi kion specoj de kampoj estas, kion ili nomas, 485 00:25:36,116 --> 00:25:38,115 kaj tiel, mi opinias ke rigardante tiun Python kodo 486 00:25:38,115 --> 00:25:43,340 estas multe pli legebla ol provas skribi ĉi SQL query. 487 00:25:43,340 --> 00:25:45,990 >> Do, por vere uzi la datumbazo, 488 00:25:45,990 --> 00:25:48,470 ni devos konekti ĝin ene Python. 489 00:25:48,470 --> 00:25:52,770 Do, mi kutime skribi funkcion nomita initialize_db kiu faras du aferojn. 490 00:25:52,770 --> 00:25:54,880 Ĝi portas en la datumbazo objekto db kaj ĝi 491 00:25:54,880 --> 00:25:58,360 konektas al ĝi, kiu nur malfermiĝas supren sekcio por la datumbazo. 492 00:25:58,360 --> 00:26:00,860 Se vi ĵus kuras kvankam afiŝinto sur via loka maŝino, 493 00:26:00,860 --> 00:26:04,320 ne estas super granda interkonsento zorgi pri konektanta kaj desconectar, 494 00:26:04,320 --> 00:26:06,885 sed se vi kuras ĝi en retejo, vi 495 00:26:06,885 --> 00:26:10,010 volas certigi ke, ĉiufoje kiam uzanto konektas al ĝi, kiam oni fermas eksteren 496 00:26:10,010 --> 00:26:12,270 la retejo, ili malkonekti por ke vi ne havas faskon da homoj konektis 497 00:26:12,270 --> 00:26:14,480 al via datumbazo ĉiuj samtempe. 498 00:26:14,480 --> 00:26:16,370 >> Kaj poste, kiam vi konekti al la datumbazo, 499 00:26:16,370 --> 00:26:20,832 vi volas nomi db.create_tables, kaj listigi la modeloj por kio vi volas 500 00:26:20,832 --> 00:26:21,540 por krei tabelojn. 501 00:26:21,540 --> 00:26:23,950 Do jen, mi volas nur krei ĝin por tiu studento. 502 00:26:23,950 --> 00:26:28,070 Kaj tiam, kio estas grava, estas por specifi sekura = Veraj plej tiutempe. 503 00:26:28,070 --> 00:26:30,380 Do kio estas tiu deklaro faros, estas ke ĝi 504 00:26:30,380 --> 00:26:33,580 kreas tablojn por la studento modelo, sed nur 505 00:26:33,580 --> 00:26:36,109 se tiu tablo havas ne estis kreita jam. 506 00:26:36,109 --> 00:26:37,400 Tion la sekura specifas. 507 00:26:37,400 --> 00:26:39,150 Do ĝi ne anstatauxigas via ekzistanta tablo 508 00:26:39,150 --> 00:26:41,525 ĝi nur kreas novan tablo se neniu el tie. 509 00:26:41,525 --> 00:26:45,090 Do, vi povus simple krei la tablojn iam uzante SQL. 510 00:26:45,090 --> 00:26:49,410 Kaj tiam havas tiun datumbazon sidado tie kaj tiam konekti al ĉiu tempo, 511 00:26:49,410 --> 00:26:52,450 sed estas kutime agrabla nur al metis en tiun create_tables alvoko, 512 00:26:52,450 --> 00:26:55,550 por ke, se vi iam forigi viajn datumaron post vi kuras via retejo 513 00:26:55,550 --> 00:26:57,960 app denove, gxi rekrei ĝin. 514 00:26:57,960 --> 00:27:00,730 >> Do, nur certigi ke sekura estas precizigita por esti vera, 515 00:27:00,730 --> 00:27:03,580 aŭ vi trovos viajn datumojn nur Akiranta clobbered ĉiufoje. 516 00:27:03,580 --> 00:27:06,380 Kaj tiam, vi povas simple nomi initialize_db establi 517 00:27:06,380 --> 00:27:09,820 rilato, kaj krei tabloj eventuale. 518 00:27:09,820 --> 00:27:13,150 >> Do, la plej ofta afero ke vi volas fari, 519 00:27:13,150 --> 00:27:15,920 aŭ unu el la plej komunaj aferoj, estas efektive enigi aferoj 520 00:27:15,920 --> 00:27:17,170 en vian datumbazon. 521 00:27:17,170 --> 00:27:19,430 Kaj do, prefere ol devi skribi enmeti en 522 00:27:19,430 --> 00:27:21,990 komunikaĵo kun ĉiuj la valoroj specifita, 523 00:27:21,990 --> 00:27:24,650 vi povas efektive voki funkcio sur la studenta klaso. 524 00:27:24,650 --> 00:27:28,200 Do, kiam vi kreas klason kiu heredas de modelo, 525 00:27:28,200 --> 00:27:30,200 ĝi havas tiun krei metodo. 526 00:27:30,200 --> 00:27:33,870 >> Do, vi faru klaso name.create, kaj vi specifas la parametroj 527 00:27:33,870 --> 00:27:35,260 ke vi volas pasi en. 528 00:27:35,260 --> 00:27:39,200 Do, se mi volas aldoni kelkajn lernantojn al nia CS50 lernojaro libro ekzemplo, 529 00:27:39,200 --> 00:27:41,820 Mi metos en Davido, kiu havas tre bona grado, li havas 95. 530 00:27:41,820 --> 00:27:45,100 Kaj mi, kiu ne estas faranta tiel bone en CS50, Mi havas 50. 531 00:27:45,100 --> 00:27:47,600 Kaj do, la bela afero pri kion tio krei funkcio faras, 532 00:27:47,600 --> 00:27:53,040 estas ke ĝi revenas la petskribo, aŭ la vico, kiu kreis ene de la tablo, 533 00:27:53,040 --> 00:27:55,750 kaj tiel tiam vi stoki ke en variablo, kaj laboro kun ĝi poste. 534 00:27:55,750 --> 00:27:58,830 Vi povas ŝanĝi ĉirkaŭe, kiuj Mi montros ekzemplon de. 535 00:27:58,830 --> 00:28:03,050 >> Rimarku ke mi ne devas entajpi la ID, 536 00:28:03,050 --> 00:28:09,340 ĉar pro tio ke estas la PrimaryKeyField, ĝi aŭtomate 537 00:28:09,340 --> 00:28:10,930 pliigo ĝin se vi ne specifi ĝin. 538 00:28:10,930 --> 00:28:12,250 Kaj, fakte, vi probable ne devus specifi ĝin, 539 00:28:12,250 --> 00:28:14,810 ĉar vi eble hazarde clobber aliulaj ID. 540 00:28:14,810 --> 00:28:16,830 Kaj vi volas fari certas ke ĝi estas unika. 541 00:28:16,830 --> 00:28:20,662 >> Do, fakte, la plej komuna afero vi deziras fari, 542 00:28:20,662 --> 00:28:22,620 estas normale elektu el de la datumbazo unufoje vi 543 00:28:22,620 --> 00:28:24,078 havas multan informon en tie. 544 00:28:24,078 --> 00:28:27,360 Kaj do, se vi volas akiri ĉion, do la ekvivalenton de la unuaranga stelo 545 00:28:27,360 --> 00:28:30,940 de studentoj deklaro, ĝi nur estus student.select. 546 00:28:30,940 --> 00:28:34,380 Kaj kiu donos vin reen tabelo kun ĉiuj de la studenta objektoj en ĝi 547 00:28:34,380 --> 00:28:35,770 ke vi persisti super vi volas. 548 00:28:35,770 --> 00:28:37,019 Vi povas akiri aferojn el ĝi. 549 00:28:37,019 --> 00:28:39,310 Kaj plejofte, vi ne nur deziras fari unuaranga, 550 00:28:39,310 --> 00:28:40,935 vi efektive volas specifi ion. 551 00:28:40,935 --> 00:28:44,580 Do, vi povas ĉeno kune tiuj funkcio vokoj, 552 00:28:44,580 --> 00:28:48,830 kiel kiel vi tajpus ĉeno kune la deklaroj en SQL. 553 00:28:48,830 --> 00:28:53,002 Do vi povas fari student.select (). Kie en ĉi tiu ekzemplo. 554 00:28:53,002 --> 00:28:54,710 Kaj tiam, vi povas specifi la kondiĉoj, 555 00:28:54,710 --> 00:28:57,880 nur uzante normala Pitono Booleans kontroli aferojn. 556 00:28:57,880 --> 00:29:02,110 >> Do, en tiu kazo, vi volas limigi kion vi elektante al, 557 00:29:02,110 --> 00:29:06,790 kie student.grade egalas 50, kaj student.name egalas al Ezra, 558 00:29:06,790 --> 00:29:09,130 tial estos nur akiras min el ĝi. 559 00:29:09,130 --> 00:29:11,340 Kaj rimarku, vere subtila afero ĉi tie estas 560 00:29:11,340 --> 00:29:15,570 ke, se vi volas specifi an kaj / kaj aŭ aŭ / aŭ, 561 00:29:15,570 --> 00:29:19,840 en Python, vi normale uzas, Mi kredas ke la vorto "kaj" fakte, 562 00:29:19,840 --> 00:29:23,351 sed ĉi tie oni uzas la solan ampersand, kiu normale estas bitlarĝa operatoro, 563 00:29:23,351 --> 00:29:25,600 sed en tiu speciala okazo, nur la vojo Peewee faras ĝin, 564 00:29:25,600 --> 00:29:27,660 vi uzas la sola ampersand specifi "kaj." 565 00:29:27,660 --> 00:29:29,451 Tio estas io kion Mi konfuzas multajn, 566 00:29:29,451 --> 00:29:32,530 sed ne supreniru ke multe praktike. 567 00:29:32,530 --> 00:29:36,350 >> Kaj tiam, kiam vi havas ĉiujn la studentoj el la datumbazo, 568 00:29:36,350 --> 00:29:39,420 Unufoje vi faris ke vi estas unuaranga kaj via eluziĝo aŭ kio ajn, 569 00:29:39,420 --> 00:29:42,334 vi povas uzi foreach buklo, nur kiel normalaj en Python, 570 00:29:42,334 --> 00:29:44,500 kun ia iterator aŭ kun ajna speco de tabelo. 571 00:29:44,500 --> 00:29:46,333 Do vi povas fari, por s en student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), kaj tiel tiu volo persisti super ĉiu studento en la tablo 573 00:29:52,930 --> 00:29:56,260 kies grado estas malpli ol 75, kiu en tiu kazo, estas ankoraŭ nur min. 574 00:29:56,260 --> 00:29:59,218 Kaj tiam vi povus fari ion interne ke buklo, kiel sendi mi retpoŝto 575 00:29:59,218 --> 00:30:01,680 kaj diru al reale envenu en mia Problemo Aroj. 576 00:30:01,680 --> 00:30:04,550 >> Do, alia afero vi povas do, ĉu ĝi estas vere facila 577 00:30:04,550 --> 00:30:06,460 ĝisdatigi vicoj ene la tablo. 578 00:30:06,460 --> 00:30:08,720 Do, memoru tien, via kiam mi enigita, 579 00:30:08,720 --> 00:30:11,440 Mi prenis la valoro kiu estis revenis por student.create, 580 00:30:11,440 --> 00:30:14,920 kaj mi atribuis al nomo nomita Ezra. 581 00:30:14,920 --> 00:30:18,995 Kaj tial nun, oni povas ŝanĝi la valoroj ene tiu petskribo, 582 00:30:18,995 --> 00:30:20,870 samkiel vi volus normala klaso en Python. 583 00:30:20,870 --> 00:30:25,060 >> Do vi povas agordi ezra.grade = 95 kaj kiu ĝisdatigos la lokan kopion, 584 00:30:25,060 --> 00:30:28,380 sed se vi vere volas commit ke ŝanĝo al datumbazo, 585 00:30:28,380 --> 00:30:31,410 vi devas voki ezra.save, tiel vi nomas la .save metodo 586 00:30:31,410 --> 00:30:32,650 sur la petskribo. 587 00:30:32,650 --> 00:30:38,085 >> Kaj tial nun, mi sukcese ŝanĝis mia propra grado ene de la datumbazo. 588 00:30:38,085 --> 00:30:41,210 Do, tiam diru, ke mi akiras kaptita ŝanĝanta mia grado ene de la datumbazo. 589 00:30:41,210 --> 00:30:44,126 Profesoro Malan estas probable tuj voli forviŝi min el la klaso, 590 00:30:44,126 --> 00:30:48,630 kaj tiel vi povas voki la .delete Ekzemple metodo ĝuste en tiu afero. 591 00:30:48,630 --> 00:30:51,674 >> Do, se vi volas iri reen en ĉi buklo tie, 592 00:30:51,674 --> 00:30:53,465 kaj efektive, anstataŭ de sendanta retpoŝtojn ĉiuj 593 00:30:53,465 --> 00:30:56,577 de la studentoj kies grado estas malpli ol 75, vi volis forigi ilin, 594 00:30:56,577 --> 00:30:58,660 ene tiu buklo vi povis voki s.delete ekz. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Kaj la lasta afero vi deziras fari, estas whenever vi establi konekton, 597 00:31:07,780 --> 00:31:10,350 kaj vi faris kun via laboro, vi volas nomi db.close, 598 00:31:10,350 --> 00:31:13,190 kie db estas ke datenbazo kontesti ke ni havis antaŭe. 599 00:31:13,190 --> 00:31:18,290 Kaj vi volas certigi ke ĉio iĝas fermita el. 600 00:31:18,290 --> 00:31:18,790 >> Malvarmeta. 601 00:31:18,790 --> 00:31:22,410 Do nun, mi havas ekzemplon apliko. 602 00:31:22,410 --> 00:31:26,880 Mi jam ian pre-farita ĉio ĝuste tiel ke ne estos ajna rekta kodigo 603 00:31:26,880 --> 00:31:30,220 erarojn, sed ni povas marŝi tra ĝin kaj vidi kiel vi metus Flask 604 00:31:30,220 --> 00:31:33,685 kaj Peewee kune, kaj fari simplan programon. 605 00:31:33,685 --> 00:31:38,680 Mi nomas ĝin CS50 rant, kaj ĝi estas speco de simpla blogo platformo. 606 00:31:38,680 --> 00:31:41,150 >> Do, unue, mi kuros ĝin kaj montri kiel brilas, 607 00:31:41,150 --> 00:31:42,890 kaj tiam ni povas rigardi pli en la kodo. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Konsentite, do ni nur kuri ĉi. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Cool, mi faros ĉi iomete pli malgranda. 612 00:32:17,250 --> 00:32:20,000 Ĝi ne estas tre belaj, ĝuste ĉar Mi ne faris multajn CSS, 613 00:32:20,000 --> 00:32:23,255 sed kio faras estas, ĝi havas tiun datumbazon de posts, 614 00:32:23,255 --> 00:32:25,630 kaj gxi iras tra ĉiuj ili, kaj ĝi montros ilin 615 00:32:25,630 --> 00:32:28,170 sur la paĝo en ordo de la plej freŝaj. 616 00:32:28,170 --> 00:32:30,920 Do, tiuj estas nur iuj posts ke mi savigxu en la datumbazo. 617 00:32:30,920 --> 00:32:35,680 >> Do se ni volas krei novan post, ni povas iri al Aldonu novan postenon, 618 00:32:35,680 --> 00:32:42,720 kaj ni povas eniri la titolon de la post, do io kiel, CS50 seminario. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, vere ĝuas la seminarion. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Malvarmeta. 623 00:32:52,270 --> 00:32:56,060 Tiam vi premas post, kaj ĝi volas redirekti vin al la hejmpaĝo, 624 00:32:56,060 --> 00:33:00,039 kaj tiam vi vidos, ke la lasta posteno estis aldonita. 625 00:33:00,039 --> 00:33:01,580 Kaj ni ankoraŭ havas ĉiuj la ones tie. 626 00:33:01,580 --> 00:33:08,080 Do nun, ni tretas tra ĉiuj de la kodon kaj vidi kiel ĉi estas implementado. 627 00:33:08,080 --> 00:33:11,995 >> Do, mi kredas ke la unua kiu ni rigardu, estas vere la modeloj. 628 00:33:11,995 --> 00:33:14,120 Multa la tempo, kiam vi desegni ion, 629 00:33:14,120 --> 00:33:17,036 Vi volas pensi pri kiel unua vi tuj reprezenti via datumo, 630 00:33:17,036 --> 00:33:22,915 kaj tiam desegni aferojn ĉirkaŭ tiu, tiel ke ĉiu havas sencon. 631 00:33:22,915 --> 00:33:25,290 Kaj tio estas vere kiel mi faris ĝin kiam mi estis faranta tion, 632 00:33:25,290 --> 00:33:28,030 Mi sidiĝis kaj pensis, kion mi volas en fosto. 633 00:33:28,030 --> 00:33:32,130 >> Do, ĉi tie, ni havas la saman strukturon ke mi menciadis antaŭe, 634 00:33:32,130 --> 00:33:33,755 kie ni fari db = Sqldatabase ('posts.db'). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 En realo, vi probable ne volas forte kodo en via nomo datumbazoj. 637 00:33:40,980 --> 00:33:43,730 Tio devus probable esti parametro kiu estas stokita ie, eble 638 00:33:43,730 --> 00:33:45,940 en config dosiero, sed en malgrandan ekzemplon kiel tiu, 639 00:33:45,940 --> 00:33:48,310 ĝi estas bone forte kodo ke en. 640 00:33:48,310 --> 00:33:53,510 >> Do nun, ni havas ĉi Afiŝu klaso, kiu heredas de la baza modelo. 641 00:33:53,510 --> 00:33:56,930 Kaj ĝi havas, denove, la ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 Reale, se vi ne specifas, se mi fakte liveris tion, 643 00:34:02,250 --> 00:34:07,152 tiam Peewee ni prizorgos aŭtomate kreas ke ID kampo, 644 00:34:07,152 --> 00:34:09,360 kaj ĝi aŭtomate igi ĝin PrimaryKey, kiu 645 00:34:09,360 --> 00:34:12,485 Mi pensas estas vere bela, ĉar kutime, tio estas io vi deziras havi, 646 00:34:12,485 --> 00:34:16,239 sed mi ŝatus meti ĝin en specife, nur tiel mi memoras ke estas tie interne. 647 00:34:16,239 --> 00:34:19,480 Sed se vi ne specifas ke, ke estos tie aŭtomate. 648 00:34:19,480 --> 00:34:22,198 >> Tial, mi havas daton kiu Estas DateTimeField, kaj ĉiuj 649 00:34:22,198 --> 00:34:24,864 tiuj malsamaj kampoj, se vi rigardi la Peewee dokumentaron, 650 00:34:24,864 --> 00:34:28,920 ĝi donos al vi liston de la malsamaj tipoj de kampoj kiuj povas uzi. 651 00:34:28,920 --> 00:34:34,440 Plejparte, ĝi estas analoga kion vi vidus en SQL. 652 00:34:34,440 --> 00:34:37,699 Do estas Charfield, a VarCharFields, TextFields, 653 00:34:37,699 --> 00:34:40,550 kiu estas por tre longa tekstoj, kiel blog 654 00:34:40,550 --> 00:34:44,460 Potenciale, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 cxion tiel. 656 00:34:46,100 --> 00:34:51,570 >> Kaj vi povas pasi en aliaj argumentoj al ĝi, kiun mi ne specifis tie. 657 00:34:51,570 --> 00:34:55,719 Diru, ekzemple, vi ne volas permesi du afiŝojn havi la sama titolo, 658 00:34:55,719 --> 00:34:59,672 vi povus entajpi io kiel unika = True, 659 00:34:59,672 --> 00:35:02,880 kaj tio estas nur ekstra parametro la kampo kiu kiam kompilas ĝin 660 00:35:02,880 --> 00:35:06,865 en la SQL, ĝi specifas ke ĝi devas esti unika. 661 00:35:06,865 --> 00:35:09,740 Vi ankaŭ povas difini ion kiel ne nula kaj ĉiuj aliaj aĵoj 662 00:35:09,740 --> 00:35:11,750 vi kutime faras en SQL. 663 00:35:11,750 --> 00:35:16,020 Do, ĉi tiu estas sufiĉe simpla modelo kiu havas la daton. 664 00:35:16,020 --> 00:35:19,460 Rimarku tie, ene de la DateTimeField, Mi specifita kion la defaŭlto estas. 665 00:35:19,460 --> 00:35:22,560 Mi specifita ĝin esti datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 pro la maniero ke ĉi gets taksita, 667 00:35:24,920 --> 00:35:28,750 ĝi reale taksas la datetime.now kiam 668 00:35:28,750 --> 00:35:32,110 gets enmetita en la datumbazo. 669 00:35:32,110 --> 00:35:34,760 >> Mi pensas ke mi devus duobligi ĉi, 670 00:35:34,760 --> 00:35:38,222 sed se vi faris ion tiel, tiam estus reale taksi ke fojo, 671 00:35:38,222 --> 00:35:40,180 kaj tiam la DatoTempo ĉiam estus la sama. 672 00:35:40,180 --> 00:35:44,240 Do, nur se vi estas faranta ion kun datetimes, duobla ĉeko 673 00:35:44,240 --> 00:35:47,080 ke ĝi estas taksi kiam fakte gets enmetita, aŭ alie 674 00:35:47,080 --> 00:35:48,780 vi eble estos konfuzita. 675 00:35:48,780 --> 00:35:51,221 >> La titolo estas nur Charfield, kiu tie 676 00:35:51,221 --> 00:35:53,970 estas pli argumentoj vi povas pasi en preciziganta precize kiom longe vi 677 00:35:53,970 --> 00:35:56,170 deziras ĝin esti, sed ĉi tie, ĝi ne vere gravas. 678 00:35:56,170 --> 00:35:58,687 Kaj Teksto tuj estos la teksto de la tuta poŝto, 679 00:35:58,687 --> 00:36:01,020 kaj ke tuj esti TextField nur ĉar vi volas 680 00:36:01,020 --> 00:36:03,370 por permesi ĝin esti bela longa ŝnuro. 681 00:36:03,370 --> 00:36:05,970 >> Tiam ni havas ĉi Meta subklaso ke nur 682 00:36:05,970 --> 00:36:11,250 specifas ke ni volas la datumbazo kie tiu estas efektive malfermis en 683 00:36:11,250 --> 00:36:14,267 esti la db celo kiun ni havas tie ĉi. 684 00:36:14,267 --> 00:36:16,350 Kaj lasta afero ni havas tie, estas ĝuste tiu funkcio 685 00:36:16,350 --> 00:36:18,120 ke ni tuj uzi el niaj ĉefaj app 686 00:36:18,120 --> 00:36:23,970 pravalorizi la datumbazo por konekti al ĝi kaj poste krei la Post tablo. 687 00:36:23,970 --> 00:36:26,880 >> Nun, ni rigardu la ĉefa app mem. 688 00:36:26,880 --> 00:36:30,800 Do ĉi tiu estas tre iom pli longa ol la ones 689 00:36:30,800 --> 00:36:34,840 ke ni vidis antaŭe, sed espereble ne tro malbona. 690 00:36:34,840 --> 00:36:37,140 Do, lasu min etendi ĉi ekstere. 691 00:36:37,140 --> 00:36:38,370 Okay. 692 00:36:38,370 --> 00:36:42,070 >> Do, rimarki kaj la supro mi importita tuta aro da aliaj aĵoj 693 00:36:42,070 --> 00:36:44,129 el Flask ke ni havas ne vere vidis antaŭe. 694 00:36:44,129 --> 00:36:46,670 Kaj espereble, ni povas iri tra ĉiu de tiuj por oni 695 00:36:46,670 --> 00:36:49,420 kaj paroli iom pli pri ilin, ordigitaj laŭ ekzemplo. 696 00:36:49,420 --> 00:36:51,380 Do, ni havas la Flask, kaj la render_template, 697 00:36:51,380 --> 00:36:54,370 kion ni vidis antaŭe, tiu peto objekto, 698 00:36:54,370 --> 00:37:00,400 kiuj venos supren kiam ni rigardas kiel la formo kiun mi montris reale 699 00:37:00,400 --> 00:37:01,170 funkcias. 700 00:37:01,170 --> 00:37:04,850 Alidirektila, kiu permesas redirect reen de la Krei novan Afiŝo 701 00:37:04,850 --> 00:37:11,710 Reen al la originala hejmpagxo, kaj tiam URL, kiu estas iu kiu permesas 702 00:37:11,710 --> 00:37:15,550 elkompreni kie sur la retejo aparta paĝo estas. 703 00:37:15,550 --> 00:37:17,810 >> Tial do, la sekva aferon mi faras, estas mi importado 704 00:37:17,810 --> 00:37:21,550 ĉiuj la informo de la Modeloj dosierojn, ke ni nur rigardante. 705 00:37:21,550 --> 00:37:23,140 Kaj, jes. 706 00:37:23,140 --> 00:37:28,720 >> Do, io alia nova kiu venas ĝis kiam vi pritraktas, 707 00:37:28,720 --> 00:37:31,850 speciale datumbazoj, estas ke vi povas specifi 708 00:37:31,850 --> 00:37:35,110 funkcio kiu prenas nomita antaŭ ĉiun peton kaj funkcio kiu alvenas 709 00:37:35,110 --> 00:37:39,690 vokis post ĉiu peto, uzante tiun funkcio logejdezajnisto app.before peto. 710 00:37:39,690 --> 00:37:42,324 >> Kaj tiel tio estos get ekzekutita kien tiu funkcio estas. 711 00:37:42,324 --> 00:37:44,240 Tio ne devas esti nomita antaŭ peto, 712 00:37:44,240 --> 00:37:46,281 sed kutime tio estas io saĝa nomi ĝin. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Vi povas specifi ajn funkcio vi deziras akiri pregxis tie, 715 00:37:51,650 --> 00:37:56,330 do mi specifita ĉi initialize_db funkcio kiun ni havis reen en la Modeloj 716 00:37:56,330 --> 00:38:02,390 dosiero, do antaŭ ĉiu peto, vi volas konektiĝi al datumbazo. 717 00:38:02,390 --> 00:38:04,560 >> Estas du malsamaj manieroj vi povas fari tion. 718 00:38:04,560 --> 00:38:10,830 Vi povas fariapp., I kredas ke estas after_request. 719 00:38:10,830 --> 00:38:13,800 Kaj la diferenco inter after_request kaj teardown_request, 720 00:38:13,800 --> 00:38:17,590 estas ke after_request nur okazos se la peto vere estis valida. 721 00:38:17,590 --> 00:38:20,440 Kaj tial, nur se la peto estis sukcesa, 722 00:38:20,440 --> 00:38:22,490 se nenio fuŝiĝis, sed teardown_request 723 00:38:22,490 --> 00:38:26,300 okazas en la kazo de sukcesa peto, aŭ en la kazo de eraro. 724 00:38:26,300 --> 00:38:28,252 >> Do, kutime, vi volas uzi teardown_request, 725 00:38:28,252 --> 00:38:30,460 krom se vi volas fari io, precipe malsamajn 726 00:38:30,460 --> 00:38:31,470 en la kazo de eraro. 727 00:38:31,470 --> 00:38:35,122 Sed nur por fermi la datumbazo, ĉu ĝi sukcesos aŭ se ĝi malsukcesas, 728 00:38:35,122 --> 00:38:37,080 ni ĉu vi volas malkonekti el la datumbazo. 729 00:38:37,080 --> 00:38:41,240 Do ĝi nomiĝas, db.close sur la db objekto. 730 00:38:41,240 --> 00:38:43,740 >> Rimarku ke la teardown_request prenas en escepton. 731 00:38:43,740 --> 00:38:46,781 Do vi povas kontroli se estis fakte eraro kiam fermante malsupren, 732 00:38:46,781 --> 00:38:49,390 sed ĉi tie, espereble, tie ne tuta multo de eraroj, 733 00:38:49,390 --> 00:38:52,720 tiel ni nur speco de ignori tion. 734 00:38:52,720 --> 00:38:55,990 >> Okay, kaj la resto de ĝi estas ne tro malbona. 735 00:38:55,990 --> 00:39:02,240 Do, kiam ni iros al la hejmpaĝo, ni sendadis ĉi home.html Ŝablono 736 00:39:02,240 --> 00:39:03,490 ke malfermos. 737 00:39:03,490 --> 00:39:06,240 La enirpermesilo estas en post egala al, kaj kion tiu 738 00:39:06,240 --> 00:39:10,260 faras estas, memoru ni havas afiŝo modelo, tiel ni elektu ĉiujn afiŝojn, 739 00:39:10,260 --> 00:39:13,890 kaj poste alia afero vi povas fari, vi povas entajpi la KIE klaŭzo, 740 00:39:13,890 --> 00:39:16,910 vi povas specifi ordigi de, kaj tial ni preni 741 00:39:16,910 --> 00:39:18,820 ĉiuj posts kiu akiri selektitaj, kaj tiam 742 00:39:18,820 --> 00:39:22,590 ni ordigi ilin per post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Kaj kiu specifas, kiam ili fakte eliru, 744 00:39:25,030 --> 00:39:29,250 la plej nova Estos plej unua unu. 745 00:39:29,250 --> 00:39:31,420 >> Kaj poste, ni pasas ke en la home.html ŝablono, 746 00:39:31,420 --> 00:39:34,240 do ni vere malfermi ke Ŝablono vere rapida, 747 00:39:34,240 --> 00:39:36,760 kaj rigardu kiamaniere tio funkcias. 748 00:39:36,760 --> 00:39:42,130 Kaj tio ne grandajn HTML, sed espereble, ni povas enfokusigi la Python. 749 00:39:42,130 --> 00:39:46,960 >> Do tie estas ligo al la Add New Post, kaj tiel ĉi specifas la itinero 750 00:39:46,960 --> 00:39:51,580 ene la Flask ke ni difini, kio estas gxusta cxi tie. 751 00:39:51,580 --> 00:39:56,310 Tiu estas la nova posteno itinero, kaj ni specifi ke tien. 752 00:39:56,310 --> 00:40:00,450 Kaj por ke estas ligo kiu tiam iru al tiu itinero ene la Flask servilo. 753 00:40:00,450 --> 00:40:03,820 >> La pli interesa estas tiu por buklo tie. 754 00:40:03,820 --> 00:40:07,685 Do ni specifas ke ĉi post parametron kiu 755 00:40:07,685 --> 00:40:09,560 estis pasita en la render_template funkcio, 756 00:40:09,560 --> 00:40:13,550 por ĉiu posteno en la post la celo kiun gets pasis en. 757 00:40:13,550 --> 00:40:16,600 Ni volas presi la posteno titolo, en H1, 758 00:40:16,600 --> 00:40:21,930 kaj tiam sube, ni volas presi la afiŝan tekston ene de alineo. 759 00:40:21,930 --> 00:40:25,710 >> Kaj tie, ni povas reale voki Python funkcio, 760 00:40:25,710 --> 00:40:35,130 tiel ni povas nomi strftime, ST-RF-tempo, kaj vi povas pasi en la formato kordoj 761 00:40:35,130 --> 00:40:37,064 ke vi volas printi la datumoj en. 762 00:40:37,064 --> 00:40:39,980 Do ĝi estas sufiĉe bela, ke vi povas fakte nomas tiun Python funkcio 763 00:40:39,980 --> 00:40:41,090 de ene tie. 764 00:40:41,090 --> 00:40:44,370 Vi ne devas fari la formatado sur la regilo flanko, ĉar vere, 765 00:40:44,370 --> 00:40:47,770 formati la dato estas iu kiu vi volas trakti ene la Vido. 766 00:40:47,770 --> 00:40:51,480 >> Kaj ĉiuj tiuj procentoj aferoj ne estas super grava. 767 00:40:51,480 --> 00:40:55,270 Se vi rigardas la dokumentado por la strftime funkcio en Python, 768 00:40:55,270 --> 00:40:57,040 ĝi precizigas ĉiuj tiuj aferojn, sed tio estas 769 00:40:57,040 --> 00:40:59,190 kiel, kiam ni serĉis ĉe la hejmpaĝo ĉi tie, 770 00:40:59,190 --> 00:41:04,440 ĝi formatoj ĉi kun bela dato, kaj ĝi specifas AM aŭ PM, 771 00:41:04,440 --> 00:41:09,410 sed normale, se ni ne havis ĉi tie, 772 00:41:09,410 --> 00:41:14,024 vi probable akiri iuj rubo dato kiu ne aspektis bonaj. 773 00:41:14,024 --> 00:41:15,940 Kaj tiam ni specifi la post.text, kaj mi povis 774 00:41:15,940 --> 00:41:19,460 metis kelkajn linisaltojn tie, nur 775 00:41:19,460 --> 00:41:21,820 meti iun spacoj inter ĉiu poŝto. 776 00:41:21,820 --> 00:41:26,270 >> Do, mi pensas la plej grava afero en tiu ekzemplo, 777 00:41:26,270 --> 00:41:28,697 estas ke vi povas uzi tion por buklo. 778 00:41:28,697 --> 00:41:30,780 Kaj tiu estas analoga al aferoj vi povas fari en PHP. 779 00:41:30,780 --> 00:41:32,905 Vi povas persisti tra, ĉiu gets pasis en, 780 00:41:32,905 --> 00:41:36,719 kaj tiel, anstataŭ devi fari kopio / alglui, kopii / almeti ĉiujn HTML, 781 00:41:36,719 --> 00:41:40,010 vi nur devas skribi ĝin unufoje, kaj tiam vi povas persisti super ĉiuj el la afiŝoj. 782 00:41:40,010 --> 00:41:41,510 >> Kaj tio estas io komuna kiu vi volas 783 00:41:41,510 --> 00:41:44,510 fari, kiam vi havas multajn datumojn, estas ke por ĉiu en via datumo, 784 00:41:44,510 --> 00:41:48,370 vi volas fari similan aferon. 785 00:41:48,370 --> 00:41:51,690 Kaj tiam, nur memoras, ke kiam vi volas presi ion eksplicite 786 00:41:51,690 --> 00:41:54,780 en la HTML, vi uzas la duoblaj krampoj tie, 787 00:41:54,780 --> 00:41:57,820 sed tiam, kiam vi volas specifi kelkaj informoj pri kondiĉo, 788 00:41:57,820 --> 00:42:02,430 aŭ pri por ciklo, vi uzi la procento krampo. 789 00:42:02,430 --> 00:42:08,730 >> Do, irante reen al la Python kodo, tiel ke klarigas 790 00:42:08,730 --> 00:42:12,242 kio okazas en la ĉefa itinero, kiam ni iru tien, 791 00:42:12,242 --> 00:42:14,450 ĝi nur montras la tutan afiŝojn, sed tiam la demando 792 00:42:14,450 --> 00:42:17,440 estas, kiel ni reale preni fostoj en la datumbazo, kiu 793 00:42:17,440 --> 00:42:18,970 estas iomete pli interesa. 794 00:42:18,970 --> 00:42:23,960 >> Do, kiam vi klakas sur la Nova Afiŝu ligon, kiun ni vidis ĉi tie, 795 00:42:23,960 --> 00:42:26,000 ĝi alidirektilojn vi al tiu formo. 796 00:42:26,000 --> 00:42:29,580 Kaj tio estas nur simpla alvoko al la render_template funkcio, kiu tiam 797 00:42:29,580 --> 00:42:32,110 pasas en la nova post en HTML formo. 798 00:42:32,110 --> 00:42:36,212 Do ni rigardu tion. 799 00:42:36,212 --> 00:42:37,420 Do ĉi tiu estas sufiĉe simpla. 800 00:42:37,420 --> 00:42:45,110 Ĝi havas simplan HTML formo, kiu aspektos iomete familiara, 801 00:42:45,110 --> 00:42:47,380 bazita sur la formoj en CS50 Financoj. 802 00:42:47,380 --> 00:42:49,940 Kaj do, ni tie specifitaj, la ago. 803 00:42:49,940 --> 00:42:52,435 Kaj tie, se vi laboras kun PHP, kutime, ĝi 804 00:42:52,435 --> 00:42:55,930 estus iu kiel: create.PHP, sed tie 805 00:42:55,930 --> 00:42:59,960 ni fakte specifi itinero ene la Flask servilo. 806 00:42:59,960 --> 00:43:02,520 Kaj do, ĉi itinero respondas al la krei itineron 807 00:43:02,520 --> 00:43:05,680 ke ni havas ĉi tie, kio ni iros en en dua. 808 00:43:05,680 --> 00:43:07,630 >> Kaj tiel, ni specifi ke ĝi estas fosto metodo, 809 00:43:07,630 --> 00:43:09,820 ĉar ni volas sendi tiu formo datumoj, kaj kutime 810 00:43:09,820 --> 00:43:12,945 kiam vi sendas datumojn de formo, vi eble deziras uzi post peto, 811 00:43:12,945 --> 00:43:15,760 nur do vi ne finos kun tiu granda nelertaj URL. 812 00:43:15,760 --> 00:43:18,970 Sed vi povus ankaŭ uzi GET peton, kaj fordoni en variajn enrutamiento, 813 00:43:18,970 --> 00:43:21,170 sed por formoj, ĝi estas bela al fosto peton tie. 814 00:43:21,170 --> 00:43:24,620 Kaj tiel do, nur ŝatas vin farus kun HTML kaj PHP, 815 00:43:24,620 --> 00:43:28,420 vi povas specifi tiujn teksto enigoj, kaj vi povas specifi la nomon de ili, 816 00:43:28,420 --> 00:43:33,490 kaj tio estas la nomo kiu estos get pasis en peto objekto ene Flask. 817 00:43:33,490 --> 00:43:36,960 >> Kaj tiam ni havas Submit butono kiu diras Post. 818 00:43:36,960 --> 00:43:40,760 Kaj tie, Post estas la nomo de la butono, ĉar ĝi estas la blog, 819 00:43:40,760 --> 00:43:42,700 sed tie, post estas peto metodo. 820 00:43:42,700 --> 00:43:47,060 Do tiuj estas la sama vorto sed fakte senrilata. 821 00:43:47,060 --> 00:43:48,460 Yeah 822 00:43:48,460 --> 00:43:54,800 >> Irante al la Python kodo, kiam ni nomas la metodon krei, 823 00:43:54,800 --> 00:43:57,702 rimarki ĉi tie ke vi povas fakte specifi ene la itinero 824 00:43:57,702 --> 00:44:00,650 peto metodoj ke vi volas akcepti, 825 00:44:00,650 --> 00:44:04,770 do tie, mi specifi ke mi nur volas akcepti Afiŝo metodo. 826 00:44:04,770 --> 00:44:09,800 Do, se mi vere provos viziti la paĝon rekte, kiu estas uzanta GET peton, 827 00:44:09,800 --> 00:44:11,700 ĝi diras min "Metodo malpermesataj." 828 00:44:11,700 --> 00:44:15,840 >> Do, vi havas paĝojn, ia kiel tiun kreas artikolon, kiu mi estas nur 829 00:44:15,840 --> 00:44:20,192 vere uzante kiel rimedon por formo akiri submetitaj, 830 00:44:20,192 --> 00:44:22,900 vi povas specifi ke vi faras ne volas ke oni povos iri tien 831 00:44:22,900 --> 00:44:25,650 rekte tra GET peton, aŭ se vi ne volas, 832 00:44:25,650 --> 00:44:28,580 ial, POST peto, vi povus nur entajpi GET tie, 833 00:44:28,580 --> 00:44:32,720 sed en ĉi tiu ekzemplo, ni nur volas la Post peto eliri. 834 00:44:32,720 --> 00:44:38,700 >> Do, kiam create_post nomiĝas, kiam ni vizitu ke tra la Post peto, 835 00:44:38,700 --> 00:44:43,600 kiam vi iras al aparta itinero, ekzistas tiu peto objekto, 836 00:44:43,600 --> 00:44:46,640 kaj ni devis importi petoj ĉe la plejsupro, 837 00:44:46,640 --> 00:44:49,640 Sed tie estas ĉi tiu peto celo kiun gets pasis en, 838 00:44:49,640 --> 00:44:53,210 kaj vi povas aliri la formo datumoj, kiu aŭtomate akiri plenigis 839 00:44:53,210 --> 00:44:55,070 kiam vi sendas peton de formo. 840 00:44:55,070 --> 00:44:56,990 >> Kaj tiam, kion mi pensas Estas vere cool, estas 841 00:44:56,990 --> 00:45:02,840 ke la formo objekto al get pasis en, estas nur Python vortaro ke 842 00:45:02,840 --> 00:45:10,560 enhavas, se vi access-- do jen, lasu mi elsxiros la HTML apud ĝi, ĝuste 843 00:45:10,560 --> 00:45:17,670 Do vi povas havi tiun kiel referencon, jes, tiel 844 00:45:17,670 --> 00:45:21,060 la nomoj kiujn ni tie specifitaj por la malsamaj kampoj, tiel 845 00:45:21,060 --> 00:45:23,900 la titolo kaj la teksto, ni tiam nur uzi tiujn ĉi tien 846 00:45:23,900 --> 00:45:27,110 kiel indeksoj en la formo de datumoj. 847 00:45:27,110 --> 00:45:28,950 Do jen super oportuna. 848 00:45:28,950 --> 00:45:33,320 >> Tial do ni nomas post.create, kiu kreos kaj aŭtomate enmeti 849 00:45:33,320 --> 00:45:36,850 tiu nova posteno objekto en la datumbazo. 850 00:45:36,850 --> 00:45:40,690 Kaj mi kredas ĉi krei funkcio tie estas vere freŝa ekzemplo de kiel 851 00:45:40,690 --> 00:45:44,900 potenca Flask estas kaj laborante kun ĉi, ĉar se vi estis faranta ion 852 00:45:44,900 --> 00:45:48,660 en PHP, vi eble devas fari multajn validación, 853 00:45:48,660 --> 00:45:51,730 Vi devus tiam establi datumbaza konekto, 854 00:45:51,730 --> 00:45:55,210 Vi devus tiam ekzekuti la SQL query, 855 00:45:55,210 --> 00:45:59,550 sed tie ni simple havas tiun belan post.create, kiun ni povas do simple 856 00:45:59,550 --> 00:46:01,520 akiri la informon eksteren de la peto objekto, 857 00:46:01,520 --> 00:46:05,370 kaj tiam pasi ĝin en novan afiŝi ke ni kreas. 858 00:46:05,370 --> 00:46:07,850 >> Kaj tiam, la tre lasta afero ni volas fari, 859 00:46:07,850 --> 00:46:09,630 estas al redirekti la uzanto reen al la hejmo. 860 00:46:09,630 --> 00:46:13,020 Kaj tial ni uzas tiun Flask redirect funkcio. 861 00:46:13,020 --> 00:46:17,770 Kaj iu kiu ni ne vidis antaŭe, estis jena URL funkcio. 862 00:46:17,770 --> 00:46:21,970 Do la URL por funkcio ebligas vi pasas en la praktiko la nomo 863 00:46:21,970 --> 00:46:26,090 de funkcio en via Python kodo, anstataŭ la aparta vojo 864 00:46:26,090 --> 00:46:26,720 ke ĝi estas ĉe. 865 00:46:26,720 --> 00:46:32,107 >> Do mi povis havi same facile redirektita al uzanto oblikvo, 866 00:46:32,107 --> 00:46:37,050 kiu sendus ŝin reen hejme, sed uzanta la URL por funkcio estas bela, 867 00:46:37,050 --> 00:46:39,990 ĉar se vi ŝanĝas la loko kie aferoj estas, 868 00:46:39,990 --> 00:46:44,080 Do diru ke mi ŝanĝas la hejmo esti ĉe / home anstataŭe, 869 00:46:44,080 --> 00:46:47,040 tiu estus ankoraŭ tiam revenu / hejmo, ĉar efektive iras kaj rigardas supren 870 00:46:47,040 --> 00:46:50,770 la nomo de la funkcio, kaj ĝi donos vin reen la URL por ke. 871 00:46:50,770 --> 00:46:52,490 >> Do, ia sur la antaŭsupozo ke vi estas 872 00:46:52,490 --> 00:46:55,489 pli verŝajna por ŝanĝi kie aferoj estas, kiu la nomoj de la funkcioj. 873 00:46:55,489 --> 00:46:58,840 Vi povas uzi ĉi vere bela URL por funkcio. 874 00:46:58,840 --> 00:47:02,470 Kaj unu afero esti konscia de ke estas iom delikata, 875 00:47:02,470 --> 00:47:05,750 estas ke vi pensas vi povus nur voki redirect sur la URL por, 876 00:47:05,750 --> 00:47:10,600 sed fakte ĉio el la itineroj havas reveni ia tekston kaj HTML, 877 00:47:10,600 --> 00:47:14,360 tiel vi efektive devas redoni la alidirektilo alvokon. 878 00:47:14,360 --> 00:47:18,379 Alie, vi devos akiri ion nevalida pri ne revenante cxeno, 879 00:47:18,379 --> 00:47:21,420 ĉar ĉiuj tiuj devas reveni la HTML vi vere volas repagi. 880 00:47:21,420 --> 00:47:26,980 >> Kaj tiel, kiam vi nomas la alidirektado, ĝi alidirektilojn vin al la paĝo, 881 00:47:26,980 --> 00:47:30,270 sed fakte revenas la HTML vi devas ekzekuti ke alidirektadon. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Reiru al la hejmpaĝo. 884 00:47:37,110 --> 00:47:39,200 Do ni havas tiujn du malsamajn vidpunktojn. 885 00:47:39,200 --> 00:47:40,132 Ni havas la hejmo vido. 886 00:47:40,132 --> 00:47:41,590 Aŭ, Mi konjektas min devus diri ŝablonoj. 887 00:47:41,590 --> 00:47:44,190 Ni havas tiujn du ŝablonojn, la hejmo ŝablonon kiu 888 00:47:44,190 --> 00:47:48,500 vidigas ĉiujn niajn afiŝojn kaj tiam ni havas ĉi ad aferon, 889 00:47:48,500 --> 00:47:52,970 kaj kiam vi alklakas la post, ĝi iras al nova itinero ene la Flask, 890 00:47:52,970 --> 00:47:55,920 sed tiu itinero ne nepre havas respondan ŝablonon. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Vi ne devas vidi nenion, sed vi povas ankoraŭ 893 00:48:01,560 --> 00:48:04,090 havi tiun verkon iranta sur malantaŭ la scenoj. 894 00:48:04,090 --> 00:48:07,450 Kaj tiam vi akiras nomumata Reen al la ĉefa paĝo. 895 00:48:07,450 --> 00:48:12,230 Kaj sendube, estas facile labori en iu agrabla CSS en la ŝablono 896 00:48:12,230 --> 00:48:15,580 kaj ke tio aspektas multe pli agrable, sed ĉiuj el la ĉefaj logiko 897 00:48:15,580 --> 00:48:18,590 ĉu estas en la Python. 898 00:48:18,590 --> 00:48:20,020 >> Demandojn pri tiu ekzemplo? 899 00:48:20,020 --> 00:48:22,760 Mi scias estas multaj malsamaj aferoj okazas tie, 900 00:48:22,760 --> 00:48:25,341 Multon ni ne vidis antaŭe, sed kiel ion. 901 00:48:25,341 --> 00:48:25,840 Yeah. 902 00:48:25,840 --> 00:48:28,346 >> Spektantaro 1: Ĉu vi devi fari ion speciala al arbustaro la datumojn tio 903 00:48:28,346 --> 00:48:29,600 venon de la formo? 904 00:48:29,600 --> 00:48:31,109 Mi rimarkis vin diris nur "krei" 905 00:48:31,109 --> 00:48:33,900 Ezra ZIGMOND: Yeah, tiel ke estas fakte, tio estas vere bona punkto. 906 00:48:33,900 --> 00:48:36,350 Do la demando estis, ĉu vi bezonas kontroli kaj certigi 907 00:48:36,350 --> 00:48:39,190 ke la datumoj estas valida, kaj fari omnaspeca scrubbing 908 00:48:39,190 --> 00:48:41,840 por certigi ke ĝi estas valida, ĉar kiel vi povas vidi ĉi tie, 909 00:48:41,840 --> 00:48:42,660 Mi ne faras tion. 910 00:48:42,660 --> 00:48:48,140 Do ni vidu kio okazas se mi afiŝi ion malplenan. 911 00:48:48,140 --> 00:48:51,190 Do, gxi devos vere nur fari malplenan fosto kaj plenigu la DatoTempo. 912 00:48:51,190 --> 00:48:55,990 >> Do fakte, vi versxajne volas fari ion kiel, 913 00:48:55,990 --> 00:49:04,749 eble specifi se titolo estas egala al la malplena linio, tiam ne faru tion. 914 00:49:04,749 --> 00:49:07,290 Aŭ, nur fari tion se la titolo estas ne egala al la malplena linio. 915 00:49:07,290 --> 00:49:10,330 Do ĝi faras ne efektive aŭtomate prizorgi ke Profunde lavos 916 00:49:10,330 --> 00:49:12,820 por vi, do vi ankoraŭ bezonas fari tion. 917 00:49:12,820 --> 00:49:14,330 Jes, bona demando. 918 00:49:14,330 --> 00:49:18,497 >> Spektantaro 2: Ĉu ĝi arbustaroj por sekvo injekto? 919 00:49:18,497 --> 00:49:19,890 Ĉu vi scias? 920 00:49:19,890 --> 00:49:22,830 >> Ezra ZIGMOND: Espereble, Peewee faras tion. 921 00:49:22,830 --> 00:49:25,830 Mi pensas certe estus bela malbona biblioteko se ĝi ne faros tion. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Mi ne scias ekzakte. 924 00:49:32,690 --> 00:49:34,820 Mi devas rigardi la konsulti kiu generis. 925 00:49:34,820 --> 00:49:38,980 Mi pensas ke, se mi tajpas en blog tian rigardis 926 00:49:38,980 --> 00:49:46,370 kiel SQLa injekto atako, io tiamaniere, se tiu 927 00:49:46,370 --> 00:49:49,370 estas kiel pasvorto kampo aŭ io, vi eble faros ion kiel tiu. 928 00:49:49,370 --> 00:49:53,410 >> Mi pensas ke ankoraŭ akiri laŭvorte poŝtis, 929 00:49:53,410 --> 00:49:59,200 sed mi pensas ke Peewee does fari ia scrubbing de la datumoj 930 00:49:59,200 --> 00:50:01,680 antaŭ ĝi efektive ekzekutas lin. 931 00:50:01,680 --> 00:50:04,510 >> Spektantaro 1: Tiu teksto kampo estas desegnita preni plata teksto, ĉu ne? 932 00:50:04,510 --> 00:50:05,710 >> Ezra ZIGMOND: Jes, ĝi estas. 933 00:50:05,710 --> 00:50:06,465 Yeah. 934 00:50:06,465 --> 00:50:09,590 Do mi pensas, ke ĉiuj el la, do tio estas korekta konduto, kiu faros ke, 935 00:50:09,590 --> 00:50:12,170 sed mi pensas ke Peewee espereble faras faras 936 00:50:12,170 --> 00:50:13,780 ian protekton sur ilia fino. 937 00:50:13,780 --> 00:50:16,090 Kaj se vi volis duobla ĉeko ke, tie 938 00:50:16,090 --> 00:50:19,530 Estas manieroj kiam vi generi mendo. 939 00:50:19,530 --> 00:50:22,622 tial vi ne devas ekzekuti ĝin rekte. 940 00:50:22,622 --> 00:50:24,330 Mi voli devi preni rigardas dokumentaron, 941 00:50:24,330 --> 00:50:27,930 sed vi povas fakte vidi la SQLa ke ĝi iras generante, 942 00:50:27,930 --> 00:50:30,840 kaj rigardu tion, kaj fari certa, ke ĝi eskapis aferojn. 943 00:50:30,840 --> 00:50:33,700 >> Alia kialo kial vi povus volas rigardi la SQL 944 00:50:33,700 --> 00:50:37,920 ke Peewee estas elirigi, estas se aĵoj ŝajnas esti irante vere malrapide, 945 00:50:37,920 --> 00:50:41,090 Vi povas rigardi kaj vidi kio ĝi estas fakte faras, ĉar ĝi estas kelkfoje 946 00:50:41,090 --> 00:50:44,670 facile hazarde aldonu en, kiel vi skribas, 947 00:50:44,670 --> 00:50:47,880 vi povas hazarde havas ĝin elektu la tuta datumbazo unua, 948 00:50:47,880 --> 00:50:50,230 kaj tiam fari ian operacion sur tiu, kiam vi vere 949 00:50:50,230 --> 00:50:51,320 signifis elekti subaro. 950 00:50:51,320 --> 00:50:53,560 >> Kaj do, se aĵoj ne tute iranta rajton, 951 00:50:53,560 --> 00:50:57,300 estas bone rigardu la peton kiu estas reale akiranta generita. 952 00:50:57,300 --> 00:50:57,800 Yeah. 953 00:50:57,800 --> 00:51:02,100 >> Spektantaro 2: Kiam vi unue komencis, vi metis en la haveno kiel 5000. 954 00:51:02,100 --> 00:51:02,904 >> Ezra ZIGMOND: Yeah. 955 00:51:02,904 --> 00:51:06,070 Spektantaro 2: Ĉu la defaŭlta kun Peewee, aŭ estas, ke io povas ŝanĝi? 956 00:51:06,070 --> 00:51:10,870 Ezra ZIGMOND: Jes, do la haveno estas implicite kun Flask. 957 00:51:10,870 --> 00:51:13,061 Se vi ruli ĝin sen preciziganta ion, 958 00:51:13,061 --> 00:51:14,310 ĝi estos aŭtomate fari tion. 959 00:51:14,310 --> 00:51:16,060 Mi kredas, ke mi havas duobligi ĉi, 960 00:51:16,060 --> 00:51:19,130 sed vi povas specifi ke en la app.run, Mi kredas ke vi povas fari ion kiel, 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 Ni donu ke provi reala rapida. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Jes, do vi povas simple entajpi port = 8080, kaj ĝi kuros ĝin tie, 966 00:51:32,230 --> 00:51:36,130 kiu miaopinie, se vi volis kuri ĝin sur la IDE, Mi ne provis ĉi ekstere, 967 00:51:36,130 --> 00:51:38,527 sed mi pensas ke se vi kuris sur haveno 8080, 968 00:51:38,527 --> 00:51:40,360 vi aperus povos aliri la servilon, 969 00:51:40,360 --> 00:51:41,870 nur ŝatas vi estis por la retejo. 970 00:51:41,870 --> 00:51:44,390 >> Jes, sed ĝi estas facile ŝanĝi ke se vi 971 00:51:44,390 --> 00:51:48,540 havas ia kiel haveno-plusendado aferoj, kiujn vi devas fari. 972 00:51:48,540 --> 00:51:50,410 >> Aliajn demandojn? 973 00:51:50,410 --> 00:51:50,916 Yeah? 974 00:51:50,916 --> 00:51:53,416 Spektantaro 1: Do, mi vidis en via modeloj kiuj, kiel vi menciis, 975 00:51:53,416 --> 00:51:55,647 Vi devas indiki la datumbazo por ĉiu celo. 976 00:51:55,647 --> 00:51:58,105 Ĉu vi hazarde scias, ĉu kiuj faras ĝin vere facila se vi 977 00:51:58,105 --> 00:52:03,210 havas multajn SQLite datumbazoj ke vi volas uzi por unu sola retejo app, 978 00:52:03,210 --> 00:52:07,210 ke vi povas simple entajpi faskon de malsamaj en via modelo? 979 00:52:07,210 --> 00:52:11,620 >> Ezra ZIGMOND: Jes, lasu min malfermu ke ĝis reala rapida. 980 00:52:11,620 --> 00:52:17,570 Do, vi diras, se vi volas havi faskon de malsamaj ion, eble 981 00:52:17,570 --> 00:52:22,670 ŝatas kaj la studentoj, por kelkaj Tial io simila? 982 00:52:22,670 --> 00:52:26,870 Jes, do mi pensas ke vi retenos, ĉiu modelo 983 00:52:26,870 --> 00:52:30,652 devus ankoraŭ havas nur unu datumbazon al ĝi atribuitaj, 984 00:52:30,652 --> 00:52:32,610 sed se vi volis havi malsamaj modeloj kiu 985 00:52:32,610 --> 00:52:35,818 esti malsamaj datumbazo objektoj atribuita por tio, vi povus definitive fari tion. 986 00:52:35,818 --> 00:52:43,070 Do, se mi kreis novan, ion tiel, 987 00:52:43,070 --> 00:52:47,000 kaj nun tiu estas studanto ke aspektas strange kiel blog, 988 00:52:47,000 --> 00:52:49,390 Mi povus specifi ke la datumbazo egalas db_2 tie. 989 00:52:49,390 --> 00:52:51,390 Do, mi kredas ke tio estas la ĉefa vojo vi povas fari tion. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Malvarmeta. 992 00:52:56,200 --> 00:52:58,410 Aliajn demandojn? 993 00:52:58,410 --> 00:53:02,170 >> Do simple fini supre malgranda iom, jen kelkaj rimedoj, 994 00:53:02,170 --> 00:53:06,030 kaj tiuj diapozitivoj estos poŝtita rete do vi povas reale atingi tiujn ligilojn. 995 00:53:06,030 --> 00:53:08,500 La plej bonaj rimedoj estas vere la dokumentaro por Flask 996 00:53:08,500 --> 00:53:09,930 kaj Peewee sin. 997 00:53:09,930 --> 00:53:12,940 Ili skribas vere bone, mi opinias. 998 00:53:12,940 --> 00:53:18,180 Do, la Flask retejo estas tie, kaj ili havas Quickstart lernilo ke 999 00:53:18,180 --> 00:53:20,710 irados tra similaj aferojn al kio mi povis iri, 1000 00:53:20,710 --> 00:53:23,560 sed se vi volas omnaspeca revizio el la aĵoj kiujn mi travivis, 1001 00:53:23,560 --> 00:53:26,200 aŭ vi pensis ke mi klarigis ion en konfuzanta maniero, 1002 00:53:26,200 --> 00:53:28,390 ili havos similajn ekzemplojn tie. 1003 00:53:28,390 --> 00:53:31,570 >> Peewee havas dokumentadon, kaj ili havas Quickstart lernilo 1004 00:53:31,570 --> 00:53:34,650 kiu iras trans la ĉefa parametroj ke vi volus uzi. 1005 00:53:34,650 --> 00:53:38,900 Do, tion mi parolis kun la sola, kaj preciziganta defaŭltoj, 1006 00:53:38,900 --> 00:53:42,710 la malsamaj specoj de kampoj kiuj vi povas uzi, tiuj ĉiuj estus tie. 1007 00:53:42,710 --> 00:53:44,690 >> Ankaŭ, se vi havas demandoj pri Peewee, 1008 00:53:44,690 --> 00:53:47,530 kaj vi afiŝi ilin sur StackOverflow, la ulo kiu faris Peewee reale 1009 00:53:47,530 --> 00:53:49,500 daŭrigas kaj respondas tiuj kelkfoje. 1010 00:53:49,500 --> 00:53:53,200 Se vi havas demandon, espereble Li povos respondi gxin, 1011 00:53:53,200 --> 00:53:54,867 ĉar li verkis la tutan aferon. 1012 00:53:54,867 --> 00:53:56,700 Mi pensas ke estas ĉio Mi volis kovri. 1013 00:53:56,700 --> 00:53:58,930 Dankon pro eliranta. 1014 00:53:58,930 --> 00:54:02,688