1 00:00:00,000 --> 00:00:00,499 2 00:00:00,499 --> 00:00:03,227 [MUSIC JOC] 3 00:00:03,227 --> 00:00:04,705 4 00:00:04,705 --> 00:00:05,830 EZRA Zigmond: Salut, toată lumea. 5 00:00:05,830 --> 00:00:08,020 Mulțumesc că ai venit azi. 6 00:00:08,020 --> 00:00:10,660 Acest seminar este "Python Web Apps cu Flask. " 7 00:00:10,660 --> 00:00:14,510 >> Deci, am de gând să vorbim un pic despre ce 8 00:00:14,510 --> 00:00:17,400 s-ar putea doriți să utilizați pentru a face Flask aplicații web cu Python, spre deosebire 9 00:00:17,400 --> 00:00:21,556 unor alte cadre acolo, cum ar fi Django, care este cel mai bine-cunoscut. 10 00:00:21,556 --> 00:00:24,330 Subtitlul este "și pitic ", care este ceva 11 00:00:24,330 --> 00:00:27,250 vom vorbi despre modul în care pentru a interacționa cu baze de date SQL. 12 00:00:27,250 --> 00:00:29,610 Ea face foarte frumos. 13 00:00:29,610 --> 00:00:32,390 >> Deci, aici e doar o consultare rapidă din ceea ce vreau să merg peste. 14 00:00:32,390 --> 00:00:35,520 Deci, în primul rând, doar un diapozitiv care va fi QuickStart, 15 00:00:35,520 --> 00:00:38,530 care este modul de a obține tot ceea ce instalat pe computer. 16 00:00:38,530 --> 00:00:41,760 Am de gând să fie demonstreze acest lucru pe masina mea locale Mac, 17 00:00:41,760 --> 00:00:45,220 doar pentru că în cazul în care am făcut acest lucru înainte, eu sunt cel mai confortabil cu ea, 18 00:00:45,220 --> 00:00:48,510 dar acest lucru este cu siguranta posibil pe IDE CD50. 19 00:00:48,510 --> 00:00:52,050 >> Deci, după aceea, vreau să introduce ceea ce este Flask, 20 00:00:52,050 --> 00:00:55,089 și te convinge de ce ar trebui să-l utilizați în primul rând. 21 00:00:55,089 --> 00:00:56,880 Apoi, voi da o scurtă exemplu de ceea ce 22 00:00:56,880 --> 00:01:00,550 poate face în Flask, un exemplu rapid de ceea ce se poate face în pitic, 23 00:01:00,550 --> 00:01:05,010 și apoi vă voi arăta o mai cerere completă exemplu 24 00:01:05,010 --> 00:01:07,520 că am pus împreună pe care le pot merge prin împreună. 25 00:01:07,520 --> 00:01:10,040 >> Și apoi în cele din urmă, în ultimul diapozitiv, am 26 00:01:10,040 --> 00:01:12,730 unele resurse pe care le arata la on-line pentru mai multe informații. 27 00:01:12,730 --> 00:01:15,560 Aceasta nu este o complet tutorial de modul de utilizare a Flask. 28 00:01:15,560 --> 00:01:18,140 Și voi sper să plec ceva timp pentru întrebări. 29 00:01:18,140 --> 00:01:21,050 Oricine vizionarea la nivel local, doar cum ar fi, striga în mijlocul 30 00:01:21,050 --> 00:01:22,340 Dacă aveți întrebări. 31 00:01:22,340 --> 00:01:27,150 >> Deci, chestii rapid de instalare, dacă doriți să urmeze de-a lungul, 32 00:01:27,150 --> 00:01:29,240 sau dacă doriți să obțineți acest pe cont propriu de mașini, 33 00:01:29,240 --> 00:01:32,440 Am de gând să fie folosind Python 2.7.10. 34 00:01:32,440 --> 00:01:35,860 Balon funcționează cu Python 3, dar îmi place 35 00:01:35,860 --> 00:01:38,660 folosind Python 2, pentru că nu e unele pachete Python care 36 00:01:38,660 --> 00:01:40,910 nu funcționează cu 3 încă. 37 00:01:40,910 --> 00:01:44,800 Dacă ați instalat PIP, care este un manager de pachete Python, 38 00:01:44,800 --> 00:01:48,190 Cred că dacă Python este mai mare sau egală cu 2.7.9, 39 00:01:48,190 --> 00:01:52,220 aveți instalat deja, e super usor de instalat aceste pachete. 40 00:01:52,220 --> 00:01:54,990 >> Puteți face instala PIP Balon, pip instala pitic, 41 00:01:54,990 --> 00:01:58,600 de obicei, trebuie să rulați sudo doar astfel că permisiunile lucra. 42 00:01:58,600 --> 00:02:01,080 Și, dacă utilizați un super-versiune veche Python, 43 00:02:01,080 --> 00:02:05,100 Vă recomandăm actualizarea Python dvs., sau folosind EasyInstall pentru a instala pip. 44 00:02:05,100 --> 00:02:09,180 45 00:02:09,180 --> 00:02:11,120 Deci, următoarea întrebare este, ceea ce este Flask? 46 00:02:11,120 --> 00:02:13,280 Și cred că, în primul rând un întrebare rezonabilă M-am întrebat 47 00:02:13,280 --> 00:02:15,585 pentru o lungă perioadă de timp este, ceea ce este o aplicatie web? 48 00:02:15,585 --> 00:02:17,960 Pentru că e un cuvânt pe care am cred că este aruncat în jurul o mulțime 49 00:02:17,960 --> 00:02:19,240 ca nu am știu cu adevărat. 50 00:02:19,240 --> 00:02:22,340 Și cred că cel mai bine exemplu de ceea ce o aplicatie web este, 51 00:02:22,340 --> 00:02:26,960 într-adevăr este CS50 Finanțe, în cazul în care nu este de fapt doar un site web, 52 00:02:26,960 --> 00:02:29,320 dar e ceva ce ar putea fel de a interacționa cu. 53 00:02:29,320 --> 00:02:31,736 Există conturi de utilizator și tot felul de lucruri diferite. 54 00:02:31,736 --> 00:02:35,010 Deci, unde ai trage linie între ceea ce este un site web, 55 00:02:35,010 --> 00:02:38,780 și ceea ce este o aplicatie web, este un fel de arbitrar, dar cred că ideea, 56 00:02:38,780 --> 00:02:42,110 e ceva mai mult decât un site web și este o aplicatie utila. 57 00:02:42,110 --> 00:02:46,081 >> Deci, Flask este un cadru pentru făcând aplicații web folosind Python. 58 00:02:46,081 --> 00:02:48,330 Și sperăm, până la sfârșitul anului de acest lucru, eu vă va convinge 59 00:02:48,330 --> 00:02:52,210 pe care le-ar putea scrie de fapt ceva ca CS50 Finante folosind Python, pe care am 60 00:02:52,210 --> 00:02:53,950 ca o mult mai bine decât PHP, personal. 61 00:02:53,950 --> 00:02:57,320 >> Deci, Flask este, ei numesc o microframework, prin care, 62 00:02:57,320 --> 00:02:59,800 ei spun că e foarte simplu, dar extensibil. 63 00:02:59,800 --> 00:03:02,980 Deci, ea are doar ceea ce ai nevoie, dar daca vrei mai multe caracteristici, 64 00:03:02,980 --> 00:03:04,522 este ușor pentru a le aduce în. 65 00:03:04,522 --> 00:03:06,480 Dar, doar pentru că e un microframework, nu 66 00:03:06,480 --> 00:03:08,960 inseamna ca e doar pentru proiecte mici. 67 00:03:08,960 --> 00:03:12,590 Am un link aici care spune că că Obama folosit Flask în 2012 68 00:03:12,590 --> 00:03:14,410 pentru campania sa site-ul, care sperăm, 69 00:03:14,410 --> 00:03:16,937 este un fel de aprobare. 70 00:03:16,937 --> 00:03:18,770 Dar lucrul pe care am place foarte mult despre Flask 71 00:03:18,770 --> 00:03:22,401 este că, aceasta nu face cu adevărat orice fel de decizii pentru tine. 72 00:03:22,401 --> 00:03:24,150 Doar pentru că suntem vorbesc despre aplicații web, 73 00:03:24,150 --> 00:03:26,940 Am să-l compara cu Ruby on Rails si Django, ambele 74 00:03:26,940 --> 00:03:30,450 sunt cadre mari, dar ambele fac presupuneri 75 00:03:30,450 --> 00:03:33,600 despre modul în care doriți să interacționează cu bazele de date, 76 00:03:33,600 --> 00:03:36,900 modul în care doriți să prezinte dvs. opinii, și sunt sigur 77 00:03:36,900 --> 00:03:38,850 aspecte bune la asta. 78 00:03:38,850 --> 00:03:41,490 >> De exemplu, Ruby on Rails are acest sistem de înregistrare activ, 79 00:03:41,490 --> 00:03:43,100 care este un foarte frumos modalitate de a interacționa cu date, 80 00:03:43,100 --> 00:03:45,960 dar dacă doriți să utilizați Ruby on Rails, te un fel de legat în asta. 81 00:03:45,960 --> 00:03:47,835 Dar, cu vasul cum voi vă arată cu pitic, 82 00:03:47,835 --> 00:03:49,830 puteți folosi orice fel de baze de date pe care doriți, 83 00:03:49,830 --> 00:03:53,980 și puteți trage doar că în ca o extensie în Flask. 84 00:03:53,980 --> 00:03:56,350 >> Deci, de aceea eu chiar ca vasul e că 85 00:03:56,350 --> 00:04:01,170 nu face presupuneri pentru tine bazate pe lucruri pe care nu ai nevoie de prea. 86 00:04:01,170 --> 00:04:04,440 >> Deci, de ce ar trebui să utilizați Flask? 87 00:04:04,440 --> 00:04:08,230 Avantajele sunt, doar are într-adevăr caracteristicile principale 88 00:04:08,230 --> 00:04:09,420 construit în el de care aveți nevoie. 89 00:04:09,420 --> 00:04:11,980 Deci, nu trebuie să vă faceți griji cu privire la înțelegerea o grămadă de lucruri 90 00:04:11,980 --> 00:04:13,175 că nu într-adevăr nevoie. 91 00:04:13,175 --> 00:04:15,060 Nu trebuie să trebuie să vă faceți despre dezactivarea caracteristicile 92 00:04:15,060 --> 00:04:16,620 că nu într-adevăr nevoie. 93 00:04:16,620 --> 00:04:21,082 >> Și, așa cum am menționat, e super- ușor să adăugați în extensii de lucruri 94 00:04:21,082 --> 00:04:21,790 care aveți nevoie. 95 00:04:21,790 --> 00:04:24,700 Unele dintre ele, Flask are propria lor sprijin pentru ea. 96 00:04:24,700 --> 00:04:28,230 Deci nu e ceva numit Flask admin, care reflectă faptul că admin 97 00:04:28,230 --> 00:04:32,060 panou care Django prevede, care vă oferă un mod vizual frumos 98 00:04:32,060 --> 00:04:33,405 pentru a administra site-ul tau. 99 00:04:33,405 --> 00:04:35,280 Dar, din nou, dacă ești face ceva simplu, 100 00:04:35,280 --> 00:04:39,550 probabil că nu aveți nevoie de un admin mare panou, deci cred că e foarte frumos. 101 00:04:39,550 --> 00:04:45,940 Și dezavantajele sunt, ca aveți mai puțină putere din cutie. 102 00:04:45,940 --> 00:04:49,660 Deci, atunci când deschideți prima dată Flask, și în programul Python, 103 00:04:49,660 --> 00:04:53,150 doar să tastați din Flask import *, sau orice altceva, 104 00:04:53,150 --> 00:04:55,957 nu te exact toate caracteristicile ați putea dori. 105 00:04:55,957 --> 00:04:58,540 Și deci va trebui să mai explicit lista caracteristicile pe care doriți. 106 00:04:58,540 --> 00:05:01,990 Deci asta e un dezavantaj, dar eu cred că pentru construirea de mici web 107 00:05:01,990 --> 00:05:04,782 aplicații, cum ar fi Voi fi afișat tu, asta nu e chiar o problemă. 108 00:05:04,782 --> 00:05:07,281 Și ce ultimul lucru este ar trebui să spun, care este o greșeală de scriere, 109 00:05:07,281 --> 00:05:10,240 este că există mai puțin standardizate convențiile de modul de utilizare a Flask, 110 00:05:10,240 --> 00:05:12,400 doar pentru că nu sunt la fel de multe oameni care se folosesc profesional 111 00:05:12,400 --> 00:05:13,191 comparativ cu Django. 112 00:05:13,191 --> 00:05:16,380 Deci, dacă te uiți ceva de genul, "cum fac X" în Django, 113 00:05:16,380 --> 00:05:18,190 veți găsi, probabil,. 114 00:05:18,190 --> 00:05:20,260 >> Nu e bun design modele care le puteți utiliza, 115 00:05:20,260 --> 00:05:22,660 dar cu vasul e un fel de du-te în felul tău, 116 00:05:22,660 --> 00:05:24,850 doar pentru că este un bibliotecă destul de mici. 117 00:05:24,850 --> 00:05:27,100 Astfel încât cei sunt dezavantaje, dar cred că 118 00:05:27,100 --> 00:05:29,370 că este încă o bibliotecă bună de a utiliza. 119 00:05:29,370 --> 00:05:31,909 >> Deci, hai să sari direct în balon. 120 00:05:31,909 --> 00:05:34,200 Acest lucru este cu siguranta nu merge să fie un tutorial complet, 121 00:05:34,200 --> 00:05:37,480 dar este pentru a vă oferi o idee de modul de structurare lucrurile, 122 00:05:37,480 --> 00:05:40,790 și așa vă simțiți confortabil de gând off și se uită la documentația 123 00:05:40,790 --> 00:05:42,570 și a afla mai multe. 124 00:05:42,570 --> 00:05:48,500 >> Deci, lasă-mă să deschid un adevărat exemplu simplu la început, 125 00:05:48,500 --> 00:05:50,737 și vă ce arată că arata ca, si apoi vom 126 00:05:50,737 --> 00:05:52,070 rupe-l jos un pic mai mult. 127 00:05:52,070 --> 00:05:56,160 >> Deci asta aici, lasă-mă să-l rulează. 128 00:05:56,160 --> 00:06:06,800 129 00:06:06,800 --> 00:06:09,750 Deci, acum am rulează meu aplicație. 130 00:06:09,750 --> 00:06:15,910 Am de gând să se deschidă Safari, și se rulează pe gazda mea locală. 131 00:06:15,910 --> 00:06:19,360 Așa că am doar de gând să facă acest lucru mai mare. 132 00:06:19,360 --> 00:06:23,960 Dar localhost: 5000 133 00:06:23,960 --> 00:06:27,650 >> Și astfel, chiar acum, toate acestea nu este, atunci când vizitați site-ul, 134 00:06:27,650 --> 00:06:31,490 se afiseaza "Hello balon" care nu este foarte util, 135 00:06:31,490 --> 00:06:34,630 dar cred că e mișto că în acest mic fișier aici, 136 00:06:34,630 --> 00:06:37,390 avem o funcționare server web care imprimă ceva. 137 00:06:37,390 --> 00:06:40,500 Deci, să ne uităm de fapt la codul pentru un al doilea, 138 00:06:40,500 --> 00:06:43,080 și-l rupe în jos un pic. 139 00:06:43,080 --> 00:06:45,260 Este dimensiunea bun pentru toată lumea aici? 140 00:06:45,260 --> 00:06:51,560 >> Deci, sperăm, ești oarecum confortabil folosind Python. 141 00:06:51,560 --> 00:06:55,820 Sunt presupunând că ne putem uita la Python și citit prin ea. 142 00:06:55,820 --> 00:06:59,290 Dacă aveți întrebări despre ceva, eu pot merge, de asemenea, peste asta. 143 00:06:59,290 --> 00:07:03,974 >> Deci, prima linie este, de la Flask, noi de import, vasul cu un capital "F" 144 00:07:03,974 --> 00:07:06,140 care este un fel de tot caracteristici cheie de care aveți nevoie. 145 00:07:06,140 --> 00:07:08,890 Ori de câte ori scrii un fișier și utilizarea Flask, 146 00:07:08,890 --> 00:07:12,120 ai de gând să doriți să le importați ca, doar pentru că este dotat cu toate lucrurile principale. 147 00:07:12,120 --> 00:07:15,400 Următorul lucru ce facem, este ne numesc această funcție Flask, doar 148 00:07:15,400 --> 00:07:19,270 pentru a crea un obiect aplicație, și tu ești întotdeauna o să vrei să faci asta. 149 00:07:19,270 --> 00:07:25,960 >> Și apoi, sărind până la jos rapid, această parte aici este, 150 00:07:25,960 --> 00:07:28,760 "if_name _ ==" _ main_ "", care este un fel de convenție Python. 151 00:07:28,760 --> 00:07:32,750 Deci, aceasta va executa numai dacă rulați acest fișier folosind direct Python. 152 00:07:32,750 --> 00:07:36,040 Apoi, noi numim app.run, care va începe efectiv aplicația merge. 153 00:07:36,040 --> 00:07:39,570 >> Deci, asta e structura principală care veți avea în orice aplicație Flask, 154 00:07:39,570 --> 00:07:48,550 este va avea acest app = Flask (_NAME_), și apoi app.run. 155 00:07:48,550 --> 00:07:54,940 >> Deci, cele două lucruri pe care am aici, sunt ceea ce noi numim rute. 156 00:07:54,940 --> 00:07:57,150 Deci, hai sa vorbim despre rutare un pic mai mult. 157 00:07:57,150 --> 00:07:58,430 Mă duc înapoi la diapozitiv. 158 00:07:58,430 --> 00:08:02,540 >> Deci cel mai fundamental concept în Flask este rutare. 159 00:08:02,540 --> 00:08:06,750 Și este ideea pe care le aloca funcții în Python 160 00:08:06,750 --> 00:08:11,280 la anumite adrese pe pagina de web. 161 00:08:11,280 --> 00:08:13,930 Deci, ori de câte ori doriți pentru a crea o nouă rută, 162 00:08:13,930 --> 00:08:16,500 utilizați această @ app.route Funcția decorator. 163 00:08:16,500 --> 00:08:19,770 Deci, dacă nu sunteți familiarizat cu decoratori funcție în Python, 164 00:08:19,770 --> 00:08:24,160 este acest concept care vă permite să luați o funcție 165 00:08:24,160 --> 00:08:26,800 și înconjoară cu altceva. 166 00:08:26,800 --> 00:08:30,140 >> Deci într-adevăr, ceea ce face acest decorator, este că este nevoie de funcția de sub ea, 167 00:08:30,140 --> 00:08:33,409 și se adaugă mai multe informații la ea, dar ceea ce de fapt Flask 168 00:08:33,409 --> 00:08:37,480 se face acest lucru nu este super esențială, dar ceea ce este important, 169 00:08:37,480 --> 00:08:43,640 este că, înainte de ruta, ați pune acest @ app.route, și apoi 170 00:08:43,640 --> 00:08:46,480 adresa a traseului, astfel încât slash este ceea ce am 171 00:08:46,480 --> 00:08:48,360 văzut când ne-am deschide pagina web. 172 00:08:48,360 --> 00:08:49,580 Deci asta e pagina. 173 00:08:49,580 --> 00:08:51,037 E doar ruta slash. 174 00:08:51,037 --> 00:08:52,370 Și apoi ai această funcție. 175 00:08:52,370 --> 00:08:54,453 Numele funcției poate fi orice vrei. 176 00:08:54,453 --> 00:08:56,930 Aceasta nu trebuie să neapărat au de a face cu traseul. 177 00:08:56,930 --> 00:08:59,440 Și apoi, indiferent de întoarcerea functiei, 178 00:08:59,440 --> 00:09:01,730 funcția trebuie să returneze un șir. 179 00:09:01,730 --> 00:09:03,740 Și că șir poate conțin HTML sau ceva, 180 00:09:03,740 --> 00:09:06,920 și că este de fapt ceea ce se va primi a revenit la browser-ului tău ca HTML, 181 00:09:06,920 --> 00:09:08,200 și se va face acest lucru. 182 00:09:08,200 --> 00:09:12,030 >> Deci, acesta este același cod care a fost din exemplul 183 00:09:12,030 --> 00:09:16,430 care tocmai am fugit, asa ca atunci cand vom vizita slash, o numește o funcție de Hello World, care 184 00:09:16,430 --> 00:09:20,470 doar Returnează un șir, Buna, ziua Flask, și care se imprimate pe ecran. 185 00:09:20,470 --> 00:09:27,290 >> Deci există un alt exemplu, care este, atunci când vizitați / Bună ziua, 186 00:09:27,290 --> 00:09:30,370 se imprimă pe Hello Word, care ar trebui să spun, de fapt, Hello World, 187 00:09:30,370 --> 00:09:32,010 dar hai sa pretindem că a fost intenționat. 188 00:09:32,010 --> 00:09:35,140 Deci, haideți să trage asta foarte repede. 189 00:09:35,140 --> 00:09:41,290 >> Deci, dacă te duci la localhost / salut, se va imprima acum altceva. 190 00:09:41,290 --> 00:09:45,680 Deci asta e doar un exemplu de cât de rapid puteți crea două căi diferite. 191 00:09:45,680 --> 00:09:50,630 >> Deci, până în prezent acest lucru nu este foarte util, nu există un întreg lot care le puteți face, 192 00:09:50,630 --> 00:09:55,360 ai putea face doar tot ceea ce cu având diferite pagini HTML, 193 00:09:55,360 --> 00:09:58,000 și atunci când vizitați un anumit Pagina se încarcă doar pagina. 194 00:09:58,000 --> 00:10:00,864 Deci, hai sa vedem ceva mai mult lucruri utile care le puteți face. 195 00:10:00,864 --> 00:10:03,780 Deci, un lucru pe care ai putea avea observat în exemplul pe care am tras 196 00:10:03,780 --> 00:10:07,160 up, este că am app.run (debug = True). 197 00:10:07,160 --> 00:10:09,580 Și așa mai departe, ceea ce acest argument depanare nu este 198 00:10:09,580 --> 00:10:14,600 că, atunci când rula serverul de web, atunci când sunteți în cererea dumneavoastră, 199 00:10:14,600 --> 00:10:18,100 dacă schimbați un fișier, acesta va reincarca automat serverul. 200 00:10:18,100 --> 00:10:21,160 >> Și astfel încât să nu au de fapt să repornire Python, care este foarte util. 201 00:10:21,160 --> 00:10:24,020 Pot demonstra că. 202 00:10:24,020 --> 00:10:26,960 Lasă-mă să trageți în sus codul meu cu greșeli în ea, 203 00:10:26,960 --> 00:10:30,420 și pretinde că a fost pus acolo greșeli în mod intenționat în scopuri instructive. 204 00:10:30,420 --> 00:10:31,625 Așa că haideți să adăugați acest nou. 205 00:10:31,625 --> 00:10:33,140 Deci, acum se spune Hello World. 206 00:10:33,140 --> 00:10:34,410 Voi salva. 207 00:10:34,410 --> 00:10:36,540 Și dacă ne-am trage înapoi terminal, veți 208 00:10:36,540 --> 00:10:39,520 spune că este repornirea, deoarece detectat o schimbare, 209 00:10:39,520 --> 00:10:43,620 și așa acum, când ne-am reîncărcați această pagină, se va imprima un lucru corect. 210 00:10:43,620 --> 00:10:45,630 >> Deci depanare este foarte util pentru asta. 211 00:10:45,630 --> 00:10:48,740 De asemenea, dacă aveți orice un fel de accident, astfel încât 212 00:10:48,740 --> 00:10:54,370 lasă-mă să fac acest accident cerere de a avea nu-l întoarcă un șir. 213 00:10:54,370 --> 00:10:57,540 Deci, hai să-l aibă Nici unul reveni pentru un motiv oarecare. 214 00:10:57,540 --> 00:11:00,810 Și apoi, când am vizita acest pagină, se va prăbuși doar, 215 00:11:00,810 --> 00:11:04,465 dar serverul nu doar accident, ea de fapt, vă oferă o înapoi foarte util 216 00:11:04,465 --> 00:11:06,490 urme de tot ceea ce a mers prost. 217 00:11:06,490 --> 00:11:10,050 Si ceea ce este foarte frumos, este că la orice pas în această înapoi urmă, 218 00:11:10,050 --> 00:11:14,260 ai putea deschide un interactiv coajă aici, și un fel de a imprima ce 219 00:11:14,260 --> 00:11:17,780 variabile pe care doriți să aruncăm o privire la. 220 00:11:17,780 --> 00:11:21,054 >> Și așa este într-adevăr depanare util pentru imaginind 221 00:11:21,054 --> 00:11:23,470 ceea ce se întâmplă cu dumneavoastră Server, mai degrabă decât doar a vedea 222 00:11:23,470 --> 00:11:28,201 ceva in PHP ca un intern de 500 eroare de server, care este super inutil. 223 00:11:28,201 --> 00:11:30,700 Un lucru să fie conștienți de, este că, dacă ai pus aplicația online 224 00:11:30,700 --> 00:11:34,260 asa ca e vizibil pentru public, ai Nu vrea să plece modul de depanare pe, 225 00:11:34,260 --> 00:11:37,320 deoarece oamenii pot de fapt folosi acest consolă pe care am 226 00:11:37,320 --> 00:11:39,150 arătat să execute cod arbitrar. 227 00:11:39,150 --> 00:11:42,120 >> Astfel încât să poată tipări la fel ca orice coduri secrete care le au acolo, 228 00:11:42,120 --> 00:11:44,755 se pot uita la exact cum site-ul dvs. este de lucru. 229 00:11:44,755 --> 00:11:46,630 Deci, este foarte util pentru testare, dar întotdeauna 230 00:11:46,630 --> 00:11:50,090 asigurați-vă că să-l ia înainte când publicați ceva on-line. 231 00:11:50,090 --> 00:11:56,640 >> Deci, atunci când utilizați ceva ca PHP, există această idee 232 00:11:56,640 --> 00:11:58,920 pe care le poate trece informații între paginile web 233 00:11:58,920 --> 00:12:03,620 prin punerea informațiilor de fapt în URL-ul, care este o cerere GET, 234 00:12:03,620 --> 00:12:07,490 dar in Flask, puteți de fapt face ceva un fel de genul asta, 235 00:12:07,490 --> 00:12:10,590 printr-un traseu care are o variabilă ca o parte din el. 236 00:12:10,590 --> 00:12:14,090 >> Deci, dacă te uiți la acest exemplu pe ecran aici, 237 00:12:14,090 --> 00:12:19,930 avem un traseu care este ("/ Bună ziua /"), și așa mai departe, dacă vizitați 238 00:12:19,930 --> 00:12:23,790 / Bună ziua / ceva, acel ceva este mergi la a lua efectiv ocupate 239 00:12:23,790 --> 00:12:25,490 în variabila nume. 240 00:12:25,490 --> 00:12:27,850 Și observați că funcția care vine cu această rută 241 00:12:27,850 --> 00:12:31,302 trebuie să ia în parametrul nume, astfel încât acesta va efectiv 242 00:12:31,302 --> 00:12:32,510 se trecut în funcția. 243 00:12:32,510 --> 00:12:34,190 >> Și apoi, odată ce ești în interiorul acestei funcții, 244 00:12:34,190 --> 00:12:36,420 puteți trata ca la fel ca o variabilă normală Python, 245 00:12:36,420 --> 00:12:39,650 și așa, atunci, acesta va imprima Bună ziua, și-l 246 00:12:39,650 --> 00:12:42,000 va completa numele folosind unele formatare șir. 247 00:12:42,000 --> 00:12:48,060 >> Deci, pentru a adăuga piesele variabile la un rutare, utilizați suportul unghi de marcare. 248 00:12:48,060 --> 00:12:51,220 Și opțional, puteți folosi ceea ce se numește un convertor. 249 00:12:51,220 --> 00:12:56,840 Și așa, dacă ai pus acest adnotare cu colon, 250 00:12:56,840 --> 00:13:00,015 aveți posibilitatea să specificați că este un int, sau un flotor, sau cale, 251 00:13:00,015 --> 00:13:01,640 și se va converti automat că. 252 00:13:01,640 --> 00:13:05,130 Puteți face, de asemenea conversia în funcția de Python, 253 00:13:05,130 --> 00:13:09,710 doar prin utilizarea unui exprimate, dar, uneori, în cazul în care doriți să vă asigurați că este un int, 254 00:13:09,710 --> 00:13:12,080 puteți pune asta regulă de conversie acolo. 255 00:13:12,080 --> 00:13:15,930 >> Deci, haideți să trageți în sus un exemplu a unor reguli variabile. 256 00:13:15,930 --> 00:13:21,480 Deci, aici, acest lucru are același de bază structură cu de la Flask import 257 00:13:21,480 --> 00:13:25,030 Balon, App = balon (_NAME_), și apoi se rulează la sfârșitul anului. 258 00:13:25,030 --> 00:13:28,050 Avem aceste două diferite trasee variabile aici. 259 00:13:28,050 --> 00:13:29,900 Și primul, este cea pe care am aratat 260 00:13:29,900 --> 00:13:34,230 în diapozitiv, care a fost că Este nevoie de doar un nume șir 261 00:13:34,230 --> 00:13:35,650 și se va tipări Bună ziua, numele. 262 00:13:35,650 --> 00:13:41,410 >> Apoi, a doua se folosește conversia. 263 00:13:41,410 --> 00:13:44,690 Deci, acest lucru se va converti automat la un int, iar apoi dublu int, 264 00:13:44,690 --> 00:13:46,150 și imprima asta. 265 00:13:46,150 --> 00:13:48,220 Si, nu facem nici un fel de conversie în cadrul acestuia 266 00:13:48,220 --> 00:13:49,594 deoarece Flask are grijă de asta. 267 00:13:49,594 --> 00:13:53,181 Așa că hai să această alergatul. 268 00:13:53,181 --> 00:13:54,930 Când aveți un balon funcționare cerere, 269 00:13:54,930 --> 00:13:58,440 Puteți controla-C din ea pentru a opri rularea serverului. 270 00:13:58,440 --> 00:14:02,420 Și apoi voi alerga variabilele. 271 00:14:02,420 --> 00:14:11,740 >> Așa că hai să mergem la localhost / salut / Ezra și sperăm, va salut la mine. 272 00:14:11,740 --> 00:14:14,530 273 00:14:14,530 --> 00:14:20,310 >> Așa că a luat în numele meu, în variabila traseu, și a umplut aici. 274 00:14:20,310 --> 00:14:23,950 Așa că voi arăta, de asemenea, un rapid exemplu de dublarea. 275 00:14:23,950 --> 00:14:28,600 Deci, dacă te duci la / dubla / 3, se va imprima 6. 276 00:14:28,600 --> 00:14:31,440 Deci, această a avut grijă de conversia pentru noi. 277 00:14:31,440 --> 00:14:34,190 >> Astfel încât să puteți, de asemenea, face acest lucru cu float, și ceva special, 278 00:14:34,190 --> 00:14:37,530 dacă aveți nevoie să specificați ceva de genul o cale, care îi permite să accepte slash-uri, 279 00:14:37,530 --> 00:14:39,155 dar că nu ar trebui să fie, de obicei, o problemă. 280 00:14:39,155 --> 00:14:41,480 281 00:14:41,480 --> 00:14:43,820 Până acum am, încă tocmai a fost revenind 282 00:14:43,820 --> 00:14:46,320 siruri de caractere, care nu este foarte interesant. 283 00:14:46,320 --> 00:14:48,730 >> Am putea întoarce de fapt șir HTML literal. 284 00:14:48,730 --> 00:14:54,322 Deci, în codul putem introduce ceva cum ar fi b-tag-ul pentru a face bold, 285 00:14:54,322 --> 00:14:56,030 dar cel mai mult timpul pe care îl Nu vreau de fapt 286 00:14:56,030 --> 00:14:58,420 pentru a fi scrierea de cod HTML în codul Python. 287 00:14:58,420 --> 00:15:01,940 Aceasta devine foarte murdar, și nu e un moment bun. 288 00:15:01,940 --> 00:15:06,430 >> Flask ne permite să se separe afară HTML în ceea ce se numește șablon, 289 00:15:06,430 --> 00:15:09,467 și așa mai departe, dacă sunteți de gândire în ceea ce privește modelul MVC 290 00:15:09,467 --> 00:15:11,550 că ești familiarizat cu, sperăm, de la lucru 291 00:15:11,550 --> 00:15:15,520 cu CS50 Finance un pic, vă puteți gândi la fișierele Python 292 00:15:15,520 --> 00:15:19,430 ca fiind mai mult Controller, în cazul în care ele interacționează cu orice 293 00:15:19,430 --> 00:15:20,970 model de date s-ar putea avea. 294 00:15:20,970 --> 00:15:24,900 >> Și apoi ei sunt de asteptare la Vizualizări și care trece informații în acest Vizualizare 295 00:15:24,900 --> 00:15:28,120 la completați informațiile în HTML care are nevoie. 296 00:15:28,120 --> 00:15:30,490 Și ceea ce noi numim aceste opinii sunt Șabloane din clasa. 297 00:15:30,490 --> 00:15:35,280 >> Deci, Flask folosește un alt Python modul care se va automat 298 00:15:35,280 --> 00:15:38,620 instala atunci când instalați Pip Balon numit Jinja, care 299 00:15:38,620 --> 00:15:40,885 vă permite să adăugați aceste adnotări la HTML 300 00:15:40,885 --> 00:15:45,140 pe care le vedeți pe ecran, care vă permite ai pus în lucruri cum ar fi condiționale, 301 00:15:45,140 --> 00:15:47,230 și buclele în HTML. 302 00:15:47,230 --> 00:15:51,140 >> Deci, se pare un pic ca modul în care s-ar putea folosi PHP într-un fișier HTML, 303 00:15:51,140 --> 00:15:57,380 dar aceasta este doar atunci când balonul serverul servește fișierul HTML, 304 00:15:57,380 --> 00:16:01,610 va rula acest motor templating și analiza prin această și completați lucruri. 305 00:16:01,610 --> 00:16:06,650 Deci, Flask are o funcție render_template pe care le puteți vedea în partea de jos de aici. 306 00:16:06,650 --> 00:16:14,300 Și așa, atunci când vizitați această pagină, ar face acest șablon hello.html, 307 00:16:14,300 --> 00:16:16,407 și apoi completați în această pagină HTML. 308 00:16:16,407 --> 00:16:18,990 Deci, hai să executați acest reală rapid, și să vedem ce se pare ca, 309 00:16:18,990 --> 00:16:21,198 și apoi voi merge printr-o pic mai în detaliu. 310 00:16:21,198 --> 00:16:25,380 311 00:16:25,380 --> 00:16:30,260 Deci, șabloanele vor pentru a merge într-un folder Șabloane. 312 00:16:30,260 --> 00:16:33,980 Se va arăta în mod automat în Template-uri folder pentru că Format. 313 00:16:33,980 --> 00:16:35,615 Așa că haideți să deschide acest sus. 314 00:16:35,615 --> 00:16:47,350 315 00:16:47,350 --> 00:16:50,005 Deci, voi alerga exemplul templating. 316 00:16:50,005 --> 00:16:52,820 317 00:16:52,820 --> 00:17:03,660 >> Deci, dacă mă duc la / Bună ziua / Ezra, are acest oribil, 318 00:17:03,660 --> 00:17:05,930 tag marquee respingător că mi-am pus în. 319 00:17:05,930 --> 00:17:08,050 Foarte frumos, foarte dinamic. 320 00:17:08,050 --> 00:17:09,349 Sunt un mare fan. 321 00:17:09,349 --> 00:17:13,900 Dar ce se întâmplă dacă Mă duc la, / salut? 322 00:17:13,900 --> 00:17:15,220 Deci, doar spune Hello World. 323 00:17:15,220 --> 00:17:17,678 Nu am să-l dați un nume, și îl completat în mod automat. 324 00:17:17,678 --> 00:17:22,050 Deci, hai sa vedem cum a făcut-o ca și cum putem scăpa de care cadru de selecție poate. 325 00:17:22,050 --> 00:17:26,240 >> Deci, aici, aceasta este un fel de un exemplu interesant de, 326 00:17:26,240 --> 00:17:29,101 dacă sunteți familiarizați cu modul de comutare Declarații lucra într-o limbă. 327 00:17:29,101 --> 00:17:31,350 Spun acest lucru este un fel de, acest fel de o scădere prin, 328 00:17:31,350 --> 00:17:34,266 în cazul în care de fapt doi atașat rute diferite pentru aceeași funcție. 329 00:17:34,266 --> 00:17:41,190 Așa că am atașa / salut ruta și A / salut / nume traseul Buna ziua, 330 00:17:41,190 --> 00:17:45,130 și ne-am specifica using-- Python vă permite să specifica funcția implicit arguments-- 331 00:17:45,130 --> 00:17:48,300 deci, dacă nu există nici un nume, asa ca dacă mergem la doar / salut, 332 00:17:48,300 --> 00:17:50,680 se va filtra în mod automat la numele este egal cu None. 333 00:17:50,680 --> 00:17:55,010 >> Deci, vom aduce, în Șablon cu name = numele, 334 00:17:55,010 --> 00:17:59,510 asa ca va trece în parametrul nume egală cu acest parametru funcție nume, 335 00:17:59,510 --> 00:18:00,730 în șablonul. 336 00:18:00,730 --> 00:18:04,040 Asta încă nu explică cum este decide dacă să imprimați Hello World, 337 00:18:04,040 --> 00:18:05,100 sau imprima numele meu. 338 00:18:05,100 --> 00:18:08,050 Așa că haideți să ne uităm de fapt în șablonul în sine, 339 00:18:08,050 --> 00:18:11,610 si vezi in care vine de la. 340 00:18:11,610 --> 00:18:18,680 >> Deci, în acest șablon, am au de fapt unele logica condiționată, 341 00:18:18,680 --> 00:18:20,580 care unii oameni ar susțin, de fapt 342 00:18:20,580 --> 00:18:23,730 nu ar trebui să aibă o mulțime de condiționate logica în Template-ul în sine. 343 00:18:23,730 --> 00:18:26,310 Ar trebui să fie mai în Controller, dar pentru acest exemplu 344 00:18:26,310 --> 00:18:27,476 e ceva destul de mici. 345 00:18:27,476 --> 00:18:31,060 Deci, aici, vom verifica, în cazul în care numele, așa dacă numele nu este egal cu Nici unul, 346 00:18:31,060 --> 00:18:33,130 Dacă un nume de este, de fapt a trecut în, atunci vom 347 00:18:33,130 --> 00:18:36,210 salut, Numele cu antet și selecție, 348 00:18:36,210 --> 00:18:41,490 Toate acestea HTML normale, în caz contrar, vom imprima Hello, World doar în mod normal. 349 00:18:41,490 --> 00:18:45,820 Deci, câteva lucruri pentru a observa aici despre modul în care formatați templating, 350 00:18:45,820 --> 00:18:49,110 este faptul că, toate aceste Declarații condiționale, 351 00:18:49,110 --> 00:18:54,475 un fel de modul în care l-am atunci când PHP doriți să inserați unele PHP, 352 00:18:54,475 --> 00:18:58,380 utilizați mai puțin decât întrebare marca, e un fel de analog aici 353 00:18:58,380 --> 00:19:00,140 cu {%. 354 00:19:00,140 --> 00:19:02,130 >> Deci, aici, avem codul nostru condiționată. 355 00:19:02,130 --> 00:19:05,920 Și apoi, atunci când doriți de fapt la evalua literalmente ceva, și de imprimare 356 00:19:05,920 --> 00:19:08,710 l la ecran, utilizați duble acolade. 357 00:19:08,710 --> 00:19:12,310 Deci, aici sunt duble acolade, și apoi ne-am specificați numele, 358 00:19:12,310 --> 00:19:15,500 astfel în acest, se va evalua la numele variabilei, care 359 00:19:15,500 --> 00:19:18,860 a fost adoptată de pe face funcția de șablon, 360 00:19:18,860 --> 00:19:21,484 mai degrabă decât doar de imprimare out, dacă am scăpat de aceștia, 361 00:19:21,484 --> 00:19:23,150 s-ar imprima doar din cuvântul "nume". 362 00:19:23,150 --> 00:19:26,340 Deci, asta e ceva să fiți atenți pentru. 363 00:19:26,340 --> 00:19:29,792 >> Deci, un alt lucru pentru a observat este faptul că, atunci când ne 364 00:19:29,792 --> 00:19:31,500 doriți să utilizați Funcția render_template, 365 00:19:31,500 --> 00:19:34,490 avem de fapt, de a importa se în mod explicit de la balon. 366 00:19:34,490 --> 00:19:36,915 Și acesta este un exemplu de modularitatea Flask, 367 00:19:36,915 --> 00:19:39,290 care nu trebuie să importe lucruri pe care nu aveți nevoie. 368 00:19:39,290 --> 00:19:41,290 Puteți aduce doar in Funcțiile de fapt 369 00:19:41,290 --> 00:19:43,450 aveți nevoie de, care este uneori frumos, astfel încât să nu 370 00:19:43,450 --> 00:19:46,560 trebuie să aibă toate aceste funcții ședinței în jurul valorii pe care nu îl utilizați, 371 00:19:46,560 --> 00:19:49,730 dar, de asemenea, dacă vă uitați pe care le sa importam render_template, 372 00:19:49,730 --> 00:19:52,660 veți obține, probabil, un avertisment care va lasa sa stii despre asta. 373 00:19:52,660 --> 00:19:56,700 Deci, care este templating. 374 00:19:56,700 --> 00:20:01,680 >> Deci, ne-am arătat cum să face pagini web simple, 375 00:20:01,680 --> 00:20:04,947 și a adăuga un pic mai mult logica pentru a l, în ceea ce privește traseul variabilă. 376 00:20:04,947 --> 00:20:08,280 Acesta vă permite să faci lucruri diferite în funcție de ce URL-ul te duci la, și, de asemenea, apoi, da 377 00:20:08,280 --> 00:20:11,950 HTML un pic mai mult sens în Termeni de modul în care doriți să facă lucruri. 378 00:20:11,950 --> 00:20:14,210 Nu trebuie să pună toate HTML în Python ta, 379 00:20:14,210 --> 00:20:16,640 dar pentru destul de mult fiecare aplicație web, 380 00:20:16,640 --> 00:20:21,480 ai de gând să vrea un fel de model de date asociate cu acesta. 381 00:20:21,480 --> 00:20:25,560 >> Și astfel în mod tradițional, acest lucru ar fie ceva de genul o bază de date SQL. 382 00:20:25,560 --> 00:20:30,280 Și puteți interacționa doar direct cu SQL. 383 00:20:30,280 --> 00:20:32,190 Python are, cred că se numește. 384 00:20:32,190 --> 00:20:33,040 SQLite 3. 385 00:20:33,040 --> 00:20:38,454 Puteți importa doar SQLite 3 și executa interogări SQL direct, 386 00:20:38,454 --> 00:20:40,870 dar nu știu despre tine, dar eu chiar nu-mi place, doar, 387 00:20:40,870 --> 00:20:42,750 scriind interogări SQL. 388 00:20:42,750 --> 00:20:45,350 Ea tinde să obține cu adevărat lungă și complicată. 389 00:20:45,350 --> 00:20:49,180 >> Și astfel, ceva ce Imi place sa folosesc este ceea ce este 390 00:20:49,180 --> 00:20:53,610 cunoscut ca un ORM, care este un -obiect relational mapping. 391 00:20:53,610 --> 00:20:56,890 Și scopul unei cartografiere-obiect relational, 392 00:20:56,890 --> 00:21:00,100 este că există două diferite modalități vă puteți gândi despre bazele de date. 393 00:21:00,100 --> 00:21:03,240 >> Deci exemplul pe care Profesorul Malan, de obicei, 394 00:21:03,240 --> 00:21:07,660 folosește în clasa, este tabelul Excel, în cazul în care aveți aceste rânduri și aceste coloane, 395 00:21:07,660 --> 00:21:10,210 și că este foarte util pentru modul în care este reprezentată în SQL 396 00:21:10,210 --> 00:21:13,170 și modul în care interacționați cu el, dar un alt mod că este de fapt 397 00:21:13,170 --> 00:21:16,390 util să se gândească la ea, uneori, este în termeni de clase și obiecte. 398 00:21:16,390 --> 00:21:20,420 >> Deci, în loc de gândire de fiecare masă ca având 399 00:21:20,420 --> 00:21:23,040 acest rând că are anumite informații, puteți de fapt 400 00:21:23,040 --> 00:21:26,100 cred că de ea ca fiind fiecare masă este o clasa, 401 00:21:26,100 --> 00:21:29,810 și apoi la fiecare instanță a clasă are anumite proprietăți. 402 00:21:29,810 --> 00:21:35,110 Astfel, în acest exemplu, cazurile de clasa sunt rândurile din tabel, 403 00:21:35,110 --> 00:21:37,490 și apoi fiecare proprietate ar fie o coloană în tabel. 404 00:21:37,490 --> 00:21:40,840 >> Deci, ORM că-mi place de a utiliza se numește pitic. 405 00:21:40,840 --> 00:21:43,520 Este foarte mic, un fel de balon. 406 00:21:43,520 --> 00:21:46,760 Cred că ei merg bine împreună, dar există o mulțime de alte ORMs 407 00:21:46,760 --> 00:21:47,730 pe care le puteți folosi. 408 00:21:47,730 --> 00:21:52,180 Un unul mai popular este cunoscut sub numele de SQLAlchemy, 409 00:21:52,180 --> 00:21:56,050 și nu-mi amintesc de ce am început ales pitic peste SQLAlchemy, 410 00:21:56,050 --> 00:21:58,311 sau v-aș ce am spus cred că e cel mai bun, 411 00:21:58,311 --> 00:22:01,060 dar noi suntem doar de gând să utilizeze acest o pentru că știu cum să-l folosească. 412 00:22:01,060 --> 00:22:04,760 >> Deci, o întrebare este, de ce ar trebui să vă deranjez folosind un ORM, 413 00:22:04,760 --> 00:22:07,552 în loc de doar direct scris interogări SQL? 414 00:22:07,552 --> 00:22:09,760 Și cred că cel mai bun caz, este că nu face de fapt 415 00:22:09,760 --> 00:22:11,356 trebuie să scrie interogări SQL. 416 00:22:11,356 --> 00:22:14,480 Este mult mai ușor, după cum vă voi arăta, la fac lucruri cum ar fi de selecție, de inserție, 417 00:22:14,480 --> 00:22:16,157 ștergere, în special crearea de tabele. 418 00:22:16,157 --> 00:22:17,990 Este mult mai ușor să scrie o structură de clasă, 419 00:22:17,990 --> 00:22:22,250 decât este de a structura un Creați Declarație de masă, dar un lucru 420 00:22:22,250 --> 00:22:25,710 să fie conștienți de, este că ORM va încerca cele mai bune 421 00:22:25,710 --> 00:22:28,640 să dau seama ce cel mai mult interogare SQL eficient ar fi, 422 00:22:28,640 --> 00:22:30,110 dar, uneori, devine greșit. 423 00:22:30,110 --> 00:22:32,660 >> Și mai ales dacă sunteți de lucru cu o bază de date mare, 424 00:22:32,660 --> 00:22:35,557 se poate observa că o interogare care ar trebui să fie difuzate rapid, 425 00:22:35,557 --> 00:22:36,640 este, de fapt durează mai. 426 00:22:36,640 --> 00:22:40,164 Și dacă te uiți sub capotă la modul ORM este interpretarea care în SQL, 427 00:22:40,164 --> 00:22:42,080 s-ar putea face ceva într-adevăr ridicol, 428 00:22:42,080 --> 00:22:44,371 doar pentru că un fel de făcu semn intențiile greșit. 429 00:22:44,371 --> 00:22:48,080 Și, au fost momente in care Am avut să-l trece peste, și doar 430 00:22:48,080 --> 00:22:52,429 executa propriile mele interogări SQL, doar pentru că a fost analiză într-un mod ciudat. 431 00:22:52,429 --> 00:22:54,220 Deci, există o anumită deasupra, doar în modul în care 432 00:22:54,220 --> 00:22:58,680 că compileaza dvs. Declarații în jos în SQL. 433 00:22:58,680 --> 00:23:06,200 >> Deci, să ne uităm foarte repede la un simplu exemplu de un model de date 434 00:23:06,200 --> 00:23:07,350 pe care le-ar putea folosi. 435 00:23:07,350 --> 00:23:11,880 Deci, acest lucru este cod Python, și așa mai departe Primul lucru pe care doriți să faceți este de 436 00:23:11,880 --> 00:23:12,950 import pitic *. 437 00:23:12,950 --> 00:23:15,850 Deci, spre deosebire de Flask, în cazul în care aveți toate aceste module individuale, 438 00:23:15,850 --> 00:23:18,125 și doriți să le importați balon și scrie un șablon, iar altele 439 00:23:18,125 --> 00:23:20,690 că vom vedea mai târziu, de la pitic, puteți importa doar totul, 440 00:23:20,690 --> 00:23:22,290 pentru că este o bibliotecă destul de mici. 441 00:23:22,290 --> 00:23:26,490 >> Deci, primul lucru pe care doriți să faceți, este crea de fapt acest obiect bază de date. 442 00:23:26,490 --> 00:23:31,212 Deci, ai db = SqliteDatabase, și apoi numele bazei de date. 443 00:23:31,212 --> 00:23:33,170 Iar acest lucru va de fapt a crea un obiect de bază de date 444 00:23:33,170 --> 00:23:36,230 pe care le poate interacționa cu, cu pitic. 445 00:23:36,230 --> 00:23:40,570 >> Și apoi, avem real Modelul pe care ne-o dorim pentru a crea. 446 00:23:40,570 --> 00:23:42,470 Deci masa dorim să creăm. 447 00:23:42,470 --> 00:23:47,270 Deci, în cadrul pitic, fiecare clasă are propria masă în baza de date. 448 00:23:47,270 --> 00:23:52,800 Deci, toate clasele moșteni de la modelul de bază, 449 00:23:52,800 --> 00:23:55,960 și modelul de capital M este ceva ce este definit în pitic. 450 00:23:55,960 --> 00:24:02,162 >> Deci, toate modelul ar trebui să moșteni ca cea mai mare superclasă lor, 451 00:24:02,162 --> 00:24:04,620 acestea ar trebui să moștenească de la modelul, dar ceea ce e foarte misto, 452 00:24:04,620 --> 00:24:07,610 este că puteți avea de fapt, dvs. Modelele moșteni unul de celălalt. 453 00:24:07,610 --> 00:24:10,530 Și o mulțime de timp, dvs. modele de date nu neapărat 454 00:24:10,530 --> 00:24:13,754 face o ierarhie moștenire frumos, dar ori în cazul în care o fac, e foarte frumos, 455 00:24:13,754 --> 00:24:15,920 pentru că aveți modelul inerent unul de celălalt. 456 00:24:15,920 --> 00:24:19,710 >> Deci, am definit această clasă "elev", care moștenește un model, 457 00:24:19,710 --> 00:24:21,170 și are trei proprietăți. 458 00:24:21,170 --> 00:24:24,080 Ea are o identitate, care este o PrimaryKeyField, care 459 00:24:24,080 --> 00:24:26,920 este ceva care este asigurat de pitic, numele este un CharField, 460 00:24:26,920 --> 00:24:28,490 și un grad este un IntegerField. 461 00:24:28,490 --> 00:24:32,260 Deci acest lucru poate sau nu poate fi cum CS50 fapt stochează toate 462 00:24:32,260 --> 00:24:33,650 clasele elevilor. 463 00:24:33,650 --> 00:24:36,060 Nu este, dar acest lucru este cum mi-ar face. 464 00:24:36,060 --> 00:24:37,920 >> Și apoi le-a, în cadrul această clasă, și această 465 00:24:37,920 --> 00:24:41,620 este ceva ce se poate face cu Python, puteți avea clase imbricate. 466 00:24:41,620 --> 00:24:43,920 Și acest lucru este ceva care este cerut de pitic. 467 00:24:43,920 --> 00:24:47,250 Deci, această clasă Meta, aveți să se precizeze că baza de date este 468 00:24:47,250 --> 00:24:49,830 egală cu obiectul că am creat mai sus. 469 00:24:49,830 --> 00:24:54,339 Și acest spune fisier este acest tabel de fapt de gând să fie incluse în. 470 00:24:54,339 --> 00:24:57,130 Deci, aceasta este ceva care aveți să facă în toate modelul. 471 00:24:57,130 --> 00:24:59,380 Trebuie doar să specificați în această clasă Meta 472 00:24:59,380 --> 00:25:01,400 că baza de date este egal cu db. 473 00:25:01,400 --> 00:25:03,940 Deci, ce fac de obicei, dacă am o grămadă de modele diferite, 474 00:25:03,940 --> 00:25:05,910 este că am o bază model pe care eu de obicei 475 00:25:05,910 --> 00:25:08,839 numesc doar "model de bază" care are clasa Meta, 476 00:25:08,839 --> 00:25:10,380 și stabilește baza de date egal cu db. 477 00:25:10,380 --> 00:25:13,710 Și apoi toate modelele mele ulterioare vor moșteni de la această clasă de bază. 478 00:25:13,710 --> 00:25:16,760 Și apoi nu am să vă faceți griji despre setarea clasa Meta. 479 00:25:16,760 --> 00:25:21,490 >> Deci, atunci când acest lucru devine de fapt compilate în jos, în o instrucțiune SQL, 480 00:25:21,490 --> 00:25:24,875 se pare ca acest lucru urât în ​​jos aici, "Creați tabelul de student ID-ul întreg, 481 00:25:24,875 --> 00:25:26,020 " tot ceea ce. 482 00:25:26,020 --> 00:25:30,002 >> Și, cred că este mai scurt, această interogare SQL aici, 483 00:25:30,002 --> 00:25:32,960 dar dacă te uiți la această clasă aici puteți vedea exact ce se întâmplă. 484 00:25:32,960 --> 00:25:36,116 Puteți vedea ce fel de câmpuri există, ceea ce ei se numesc, 485 00:25:36,116 --> 00:25:38,115 și așa, cred că se uită la acest cod Python 486 00:25:38,115 --> 00:25:43,340 este mult mai ușor de citit decât încercarea de a scrie această interogare SQL. 487 00:25:43,340 --> 00:25:45,990 >> Deci, în scopul de a efectiv utilizează baza de date, 488 00:25:45,990 --> 00:25:48,470 trebuie să se conecteze la acesta, în Python. 489 00:25:48,470 --> 00:25:52,770 Deci, de obicei, scriu o funcție numită initialize_db care face două lucruri. 490 00:25:52,770 --> 00:25:54,880 Este nevoie în baza de date db obiect și 491 00:25:54,880 --> 00:25:58,360 se conectează la ea, care se deschide doar SECȚIUNEA la baza de date. 492 00:25:58,360 --> 00:26:00,860 Dacă sunteți doar execută, deși site-ul de pe computerul local, 493 00:26:00,860 --> 00:26:04,320 aceasta nu este o afacere super-mare să vă faceți griji despre conectarea și deconectarea, 494 00:26:04,320 --> 00:26:06,885 dar dacă se execută l pe un site web, 495 00:26:06,885 --> 00:26:10,010 doriți să vă asigurați că, ori de câte ori un utilizator se conectează la ea, atunci când închide 496 00:26:10,010 --> 00:26:12,270 site-ul, ei deconectați astfel încât să nu au o grămadă de persoane conectate 497 00:26:12,270 --> 00:26:14,480 la baza de date dintr-o dată. 498 00:26:14,480 --> 00:26:16,370 >> Și apoi, când conecta la baza de date, 499 00:26:16,370 --> 00:26:20,832 doriți să apelați db.create_tables, și lista modelelor de ceea ce vrei 500 00:26:20,832 --> 00:26:21,540 pentru a crea tabele. 501 00:26:21,540 --> 00:26:23,950 Deci, aici, vreau doar să crea o pentru acest elev. 502 00:26:23,950 --> 00:26:28,070 Și apoi, ceea ce este important, este acela de a specificați în condiții de siguranță = True cel mai mult timp. 503 00:26:28,070 --> 00:26:30,380 Deci, ce această declarație va face, este faptul că 504 00:26:30,380 --> 00:26:33,580 creeaza tabele pentru modelul elev, dar numai 505 00:26:33,580 --> 00:26:36,109 Dacă masa nu are fost create deja. 506 00:26:36,109 --> 00:26:37,400 Asta e ceea ce se precizează în condiții de siguranță. 507 00:26:37,400 --> 00:26:39,150 Deci nu va suprascrie tabel existent, 508 00:26:39,150 --> 00:26:41,525 se va crea doar un nou tabel dacă nu există o acolo. 509 00:26:41,525 --> 00:26:45,090 Deci, ai putea crea doar tabelele dată folosind SQL. 510 00:26:45,090 --> 00:26:49,410 Și apoi au ca bază de date de zi acolo, și apoi conectați la fiecare dată, 511 00:26:49,410 --> 00:26:52,450 dar este, de obicei frumos doar pentru a pus în acest apel create_tables, 512 00:26:52,450 --> 00:26:55,550 astfel încât, dacă ștergeți vreodată ta de baze de date atunci când executați dvs. de web 513 00:26:55,550 --> 00:26:57,960 app din nou, îl va recrea. 514 00:26:57,960 --> 00:27:00,730 >> Deci, asigurați-vă doar că în condiții de siguranță este specificată să fie adevărat, 515 00:27:00,730 --> 00:27:03,580 sau veți găsi datele doar obtinerea clobbered de fiecare dată. 516 00:27:03,580 --> 00:27:06,380 Și apoi, puteți apela doar initialize_db pentru a stabili 517 00:27:06,380 --> 00:27:09,820 o conexiune, și de a crea tabele, dacă este necesar. 518 00:27:09,820 --> 00:27:13,150 >> Deci, cel mai comun lucru pe care le va dori să facă, 519 00:27:13,150 --> 00:27:15,920 sau unul dintre cele mai comune lucruri, este de a insera de fapt lucrurile 520 00:27:15,920 --> 00:27:17,170 în baza de date. 521 00:27:17,170 --> 00:27:19,430 Și astfel, mai degrabă decât pentru a scrie un insera în 522 00:27:19,430 --> 00:27:21,990 declarație cu toate valorile specificate, 523 00:27:21,990 --> 00:27:24,650 puteți apela de fapt, Funcția pe clasa de student. 524 00:27:24,650 --> 00:27:28,200 Deci, atunci când vă creați o clasă care moștenește de la modelul, 525 00:27:28,200 --> 00:27:30,200 are această metodă a crea. 526 00:27:30,200 --> 00:27:33,870 >> Deci, ce faci de clasă name.create, și specificați parametrii 527 00:27:33,870 --> 00:27:35,260 pe care doriți să treci în. 528 00:27:35,260 --> 00:27:39,200 Deci, dacă vreau să adăugați unii elevi nostru exemplu de carte grad CS50, 529 00:27:39,200 --> 00:27:41,820 Voi pune în David, care are un grad foarte bun, el are un 95. 530 00:27:41,820 --> 00:27:45,100 Și eu, care nu face atât de bine în CS50, am 50. 531 00:27:45,100 --> 00:27:47,600 Și astfel, lucrul frumos despre ceea ce face această funcție a crea, 532 00:27:47,600 --> 00:27:53,040 este că se întoarce instanța, sau rând, că a creat în tabel, 533 00:27:53,040 --> 00:27:55,750 și așa mai apoi stocați că într-un variabilă, și locul de muncă cu el mai târziu. 534 00:27:55,750 --> 00:27:58,830 Puteți schimba în jurul valorii, care Voi arăta un exemplu de. 535 00:27:58,830 --> 00:28:03,050 >> Observați că nu am făcut trebuie să specificați ID-ul, 536 00:28:03,050 --> 00:28:09,340 pentru că din moment ce este PrimaryKeyField, se va în mod automat 537 00:28:09,340 --> 00:28:10,930 incrementa aceasta dacă nu-l specificați. 538 00:28:10,930 --> 00:28:12,250 Și, de fapt, probabil nu ar trebui să specifice, 539 00:28:12,250 --> 00:28:14,810 pentru că s-ar putea accidental rescrie ID altcuiva. 540 00:28:14,810 --> 00:28:16,830 Și doriți să faceți sigur că este unic. 541 00:28:16,830 --> 00:28:20,662 >> Majoritatea așa, De fapt, lucru comun vrei să faci, 542 00:28:20,662 --> 00:28:22,620 este, probabil, selectați din bazei de date După ce 543 00:28:22,620 --> 00:28:24,078 au o mulțime de informații acolo. 544 00:28:24,078 --> 00:28:27,360 Și astfel, dacă doriți să obțineți totul, astfel încât echivalentul a select stele 545 00:28:27,360 --> 00:28:30,940 din declarația studenți, ea ar fi doar student.select. 546 00:28:30,940 --> 00:28:34,380 Și care vă va oferi înapoi o serie cu toate studentului obiectelor în ea 547 00:28:34,380 --> 00:28:35,770 pe care le repeta peste vrei. 548 00:28:35,770 --> 00:28:37,019 Puteți obține lucruri din ea. 549 00:28:37,019 --> 00:28:39,310 Și de cele mai multe ori, Nu vreau doar să selectați, 550 00:28:39,310 --> 00:28:40,935 tu de fapt vrei să specificați ceva. 551 00:28:40,935 --> 00:28:44,580 Și astfel, puteți lanț Împreună, aceste apeluri de funcții, 552 00:28:44,580 --> 00:28:48,830 ca și cum v-ar lanț împreună declarațiile din SQL. 553 00:28:48,830 --> 00:28:53,002 Astfel încât să puteți face student.select (). În cazul în care în acest exemplu. 554 00:28:53,002 --> 00:28:54,710 Și apoi, puteți precizează condițiile, 555 00:28:54,710 --> 00:28:57,880 folosind doar Python normală Booleans pentru a verifica lucrurile. 556 00:28:57,880 --> 00:29:02,110 >> Deci, în acest caz, pe care doriți să limita ceea ce selectarea la, 557 00:29:02,110 --> 00:29:06,790 unde student.grade este egal cu 50, și student.name este egal cu Ezra, 558 00:29:06,790 --> 00:29:09,130 astfel că va primi doar eu din ea. 559 00:29:09,130 --> 00:29:11,340 Și observați, unul cu adevarat lucru subtil aici este 560 00:29:11,340 --> 00:29:15,570 că, în cazul în care doriți să specificați o și / sau o și / sau sau, 561 00:29:15,570 --> 00:29:19,840 în Python, ar trebui să utilizați în mod normal, Cred că cuvântul "și" de fapt, 562 00:29:19,840 --> 00:29:23,351 dar aici utilizați ampersand unic, care este în mod normal un operator de biți, 563 00:29:23,351 --> 00:29:25,600 dar în acest caz special, doar modul în care o face pitic, 564 00:29:25,600 --> 00:29:27,660 utilizați single ampersand pentru a specifica "și." 565 00:29:27,660 --> 00:29:29,451 Asta e ceva ce I a lua amestecat o mulțime, 566 00:29:29,451 --> 00:29:32,530 dar nu veni atât de mult în practică. 567 00:29:32,530 --> 00:29:36,350 >> Și apoi, odată ce aveți toate elevii din baza de date, 568 00:29:36,350 --> 00:29:39,420 Odată ce ați făcut că ești selectați și uzura sau orice altceva, 569 00:29:39,420 --> 00:29:42,334 aveți posibilitatea să utilizați o buclă foreach, la fel cum ar fi normal în Python, 570 00:29:42,334 --> 00:29:44,500 cu orice fel de iterator sau cu orice fel de matrice. 571 00:29:44,500 --> 00:29:46,333 Astfel încât să puteți face, pentru s în student.select (). whe 572 00:29:46,333 --> 00:29:52,930 re (Student.grade <75), și astfel încât aceasta va repeta peste fiecare elev în tabelul 573 00:29:52,930 --> 00:29:56,260 a cărui grad este mai mic de 75, care în acest caz, este încă doar eu. 574 00:29:56,260 --> 00:29:59,218 Și apoi ai putea face ceva în că bucla, ca trimite-mi un e-mail 575 00:29:59,218 --> 00:30:01,680 și spune-mi de fapt, rândul său, în seturi problema mea. 576 00:30:01,680 --> 00:30:04,550 >> Deci, un alt lucru pe care poți face, este foarte ușor 577 00:30:04,550 --> 00:30:06,460 să actualizeze rânduri în tabel. 578 00:30:06,460 --> 00:30:08,720 Deci, amintiți-vă înapoi aici, atunci când am introdus, 579 00:30:08,720 --> 00:30:11,440 Am luat valoarea pe care a fost întors de student.create, 580 00:30:11,440 --> 00:30:14,920 și l-am atribuit numele numit Ezra. 581 00:30:14,920 --> 00:30:18,995 Și așa acum, aveți posibilitatea să modificați valori în acea instanță, 582 00:30:18,995 --> 00:30:20,870 la fel ca tine ar fi un clasă normală în Python. 583 00:30:20,870 --> 00:30:25,060 >> Astfel încât să puteți seta ezra.grade = 95 și că va actualiza copia locală, 584 00:30:25,060 --> 00:30:28,380 dar dacă doriți de fapt la angajeze că schimbările la baza de date, 585 00:30:28,380 --> 00:30:31,410 aveți pentru a apela ezra.save, așa te-a chemat metoda .save 586 00:30:31,410 --> 00:30:32,650 pe instanța. 587 00:30:32,650 --> 00:30:38,085 >> Și așa acum, mi-am schimbat cu succes mea clasa proprie în baza de date. 588 00:30:38,085 --> 00:30:41,210 Deci, atunci să spunem că am prins schimbarea de grad mea în baza de date. 589 00:30:41,210 --> 00:30:44,126 Profesorul Malan este, probabil, va să vrei să mă ștergeți din clasa, 590 00:30:44,126 --> 00:30:48,630 și astfel încât să puteți apela .delete Metoda exemplu doar pe chestia aia. 591 00:30:48,630 --> 00:30:51,674 >> Deci, dacă ai vrut să mergi înapoi în această buclă aici, 592 00:30:51,674 --> 00:30:53,465 și de fapt, în loc să de trimiterea de emailuri toate 593 00:30:53,465 --> 00:30:56,577 a studenților a căror grad este mai puțin mult de 75, ai vrut să le ștergeți, 594 00:30:56,577 --> 00:30:58,660 în această buclă ai putea suna exemplu s.delete. 595 00:30:58,660 --> 00:31:04,180 596 00:31:04,180 --> 00:31:07,780 Și ultimul lucru pe care doriți să faceți, ori de câte ori este a stabili o conexiune, 597 00:31:07,780 --> 00:31:10,350 și ați terminat cu munca ta, doriți să apelați db.close, 598 00:31:10,350 --> 00:31:13,190 în cazul în care este baza de date db obiecta că am avut-o înainte. 599 00:31:13,190 --> 00:31:18,290 Și doriți să vă asigurați că totul se închise din. 600 00:31:18,290 --> 00:31:18,790 >> Misto. 601 00:31:18,790 --> 00:31:22,410 Deci, acum, am o cerere exemplu. 602 00:31:22,410 --> 00:31:26,880 Am un fel de pre-a făcut totul doar așa că nu va fi nici codificare vii 603 00:31:26,880 --> 00:31:30,220 greșeli, dar putem trece prin l și vezi cum te-ar pune Flask 604 00:31:30,220 --> 00:31:33,685 și pitic împreună, și să facă o aplicație simplă. 605 00:31:33,685 --> 00:31:38,680 Eu o numesc CS50 declama, și este un fel de platformă simplă blog. 606 00:31:38,680 --> 00:31:41,150 >> Deci, în primul rând, voi rula și arată ceea ce pare, 607 00:31:41,150 --> 00:31:42,890 și apoi ne putem uita mai mult în codul. 608 00:31:42,890 --> 00:32:00,470 609 00:32:00,470 --> 00:32:02,830 Bine, hai să executați acest. 610 00:32:02,830 --> 00:32:14,040 611 00:32:14,040 --> 00:32:17,250 Rece, voi face acest lucru un pic mai mic. 612 00:32:17,250 --> 00:32:20,000 Nu e foarte frumos, doar pentru că Nu am face o mulțime de CSS, 613 00:32:20,000 --> 00:32:23,255 dar ceea ce face este, are această bază de date de blog, 614 00:32:23,255 --> 00:32:25,630 și merge prin toate ei, și le va afișa 615 00:32:25,630 --> 00:32:28,170 pe pagina în ordinea cele mai recente. 616 00:32:28,170 --> 00:32:30,920 Și astfel încât acestea sunt doar unele posturi că am salvat in baza de date. 617 00:32:30,920 --> 00:32:35,680 >> Deci, dacă dorim să creăm o nouă poștă, putem merge pentru a adăuga un Mesaj nou, 618 00:32:35,680 --> 00:32:42,720 și putem intra în titlul poștă, așa ceva de genul, seminar CS50. 619 00:32:42,720 --> 00:32:45,360 620 00:32:45,360 --> 00:32:46,735 Wow, într-adevăr se bucură de seminar. 621 00:32:46,735 --> 00:32:51,070 622 00:32:51,070 --> 00:32:52,270 >> Misto. 623 00:32:52,270 --> 00:32:56,060 Apoi, aveți de presă de după, și va vă redirecționa înapoi la pagina de start, 624 00:32:56,060 --> 00:33:00,039 și apoi veți vedea că S-a adăugat ultimul mesaj. 625 00:33:00,039 --> 00:33:01,580 Și mai avem încă toate cele de acolo. 626 00:33:01,580 --> 00:33:08,080 Deci, acum, hai să pas prin toate Codul și a vedea cum acest lucru este pus în aplicare. 627 00:33:08,080 --> 00:33:11,995 >> Deci, cred că primul lucru pe care să să ia o privire la, este, de fapt modele. 628 00:33:11,995 --> 00:33:14,120 O mulțime de timp, atunci când sunteți proiectarea ceva, 629 00:33:14,120 --> 00:33:17,036 vrei să se gândească mai întâi despre modul ai de gând să reprezinte datele tale, 630 00:33:17,036 --> 00:33:22,915 și apoi de design lucrurile din jurul faptul că, astfel încât totul are sens. 631 00:33:22,915 --> 00:33:25,290 Și care este de fapt modul în care am a făcut-o când am fost a face acest lucru, 632 00:33:25,290 --> 00:33:28,030 M-am așezat și gândit, ce vreau intr-un post. 633 00:33:28,030 --> 00:33:32,130 >> Deci, aici, avem aceeași structură că am fost menționat mai devreme, 634 00:33:32,130 --> 00:33:33,755 în cazul în care vom face db = Sqldatabase ('posts.db "). 635 00:33:33,755 --> 00:33:37,840 636 00:33:37,840 --> 00:33:40,980 În realitate, probabil că nu vreau Codul de greu în bazele de date numele dumneavoastră. 637 00:33:40,980 --> 00:33:43,730 Asta ar trebui să fie, probabil, un parametru care este stocat undeva, poate 638 00:33:43,730 --> 00:33:45,940 într-un fișier de configurare, dar în un mic exemplu de acest fel, 639 00:33:45,940 --> 00:33:48,310 e bine să cod greu faptul că, în. 640 00:33:48,310 --> 00:33:53,510 >> Deci, acum, avem această clasă Post, care moștenește de la modelul de bază. 641 00:33:53,510 --> 00:33:56,930 Și are, nou, ID = PrimaryKeyField. 642 00:33:56,930 --> 00:34:02,250 De fapt, dacă nu se specifică, dacă am de fapt scăpat de acest lucru, 643 00:34:02,250 --> 00:34:07,152 atunci pitic vom avea grijă de crearea în mod automat acest domeniu ID, 644 00:34:07,152 --> 00:34:09,360 și se va în mod automat fac din el un primaryKey, care 645 00:34:09,360 --> 00:34:12,485 Cred că este foarte frumos, pentru că de obicei, asta e ceva ce vrei sa ai, 646 00:34:12,485 --> 00:34:16,239 dar îmi place să-l pună în mod specific, doar așa îmi amintesc că este acolo. 647 00:34:16,239 --> 00:34:19,480 Dar, dacă nu se specifică faptul că, că va fi acolo în mod automat. 648 00:34:19,480 --> 00:34:22,198 >> Deci, am o dată care este un DateTimeField, și toate 649 00:34:22,198 --> 00:34:24,864 aceste domenii diferite, dacă uita-te la documentația pitic, 650 00:34:24,864 --> 00:34:28,920 o să vă oferi o listă de diferite tipuri de câmpuri pe care le puteți utiliza. 651 00:34:28,920 --> 00:34:34,440 Pentru cea mai mare parte, este analog a ceea ce ar vedea în SQL. 652 00:34:34,440 --> 00:34:37,699 Deci, există o CharField, un VarCharFields, casetele de text, 653 00:34:37,699 --> 00:34:40,550 care sunt pentru mult timp texte, cum ar fi un post pe blog 654 00:34:40,550 --> 00:34:44,460 potențial, DateTimeFields, DoubleFields, FloatFields, 655 00:34:44,460 --> 00:34:46,100 toate lucrurile de genul asta. 656 00:34:46,100 --> 00:34:51,570 >> Și vă puteți trece în alte argumente la ea, pe care eu nu a specificat aici. 657 00:34:51,570 --> 00:34:55,719 Spune, de exemplu, nu a vrut să permite două posturi să aibă același titlu, 658 00:34:55,719 --> 00:34:59,672 ai putea specificați ca unic ceva = Adevărat, 659 00:34:59,672 --> 00:35:02,880 Si acesta este doar un parametru suplimentar pentru domeniul că, atunci când se compilează jos 660 00:35:02,880 --> 00:35:06,865 în SQL, se va specifica care trebuie să fie unic. 661 00:35:06,865 --> 00:35:09,740 Asemenea, puteți specifica ceva de genul nu nul și toate celelalte lucruri 662 00:35:09,740 --> 00:35:11,750 ce faci în mod normal în SQL. 663 00:35:11,750 --> 00:35:16,020 Deci, aceasta este o destul de simplu model care are data. 664 00:35:16,020 --> 00:35:19,460 Observați aici, în cadrul DateTimeField, Am specificat ce implicit este. 665 00:35:19,460 --> 00:35:22,560 Am specificat să fie datetime.datetime.now, 666 00:35:22,560 --> 00:35:24,920 din cauza modului în care acest lucru este bine evaluată, 667 00:35:24,920 --> 00:35:28,750 evaluează de fapt datetime.now când 668 00:35:28,750 --> 00:35:32,110 acesta devine introdus în baza de date. 669 00:35:32,110 --> 00:35:34,760 >> Cred că, ar trebui să verificați acest lucru, 670 00:35:34,760 --> 00:35:38,222 dar dacă ai făcut ceva de genul asta, atunci ar evalua, de fapt că, odată, 671 00:35:38,222 --> 00:35:40,180 și apoi ora si data ar fi întotdeauna aceeași. 672 00:35:40,180 --> 00:35:44,240 Deci, doar dacă faci ceva cu datetimes, verificați 673 00:35:44,240 --> 00:35:47,080 că este evaluarea, atunci când de fapt devine introdus, sau 674 00:35:47,080 --> 00:35:48,780 s-ar putea fi confundat. 675 00:35:48,780 --> 00:35:51,221 >> Titlul este doar un CharField, care nu 676 00:35:51,221 --> 00:35:53,970 mai multe argumente puteți trece în specificând exact cât de mult vă 677 00:35:53,970 --> 00:35:56,170 vrea sa fie, dar aici, nu a prea contează. 678 00:35:56,170 --> 00:35:58,687 Și Text va fi textul întregii post, 679 00:35:58,687 --> 00:36:01,020 și care va fi un TextField doar pentru că vrei 680 00:36:01,020 --> 00:36:03,370 pentru a permite ca acesta să fie un șir destul de lung. 681 00:36:03,370 --> 00:36:05,970 >> Apoi, avem acest Meta subclasă care tocmai 682 00:36:05,970 --> 00:36:11,250 specifică faptul că ne-o dorim baza de date în cazul în care acest lucru este, de fapt deschis în 683 00:36:11,250 --> 00:36:14,267 să fie obiectul db pe care o avem aici. 684 00:36:14,267 --> 00:36:16,350 Și ultimul lucru, avem aici, este doar această funcție 685 00:36:16,350 --> 00:36:18,120 că vom utiliza din aplicația noastră principală 686 00:36:18,120 --> 00:36:23,970 pentru a inițializa baza de date pentru conectarea la l, și apoi pentru a crea tabelul Poștal. 687 00:36:23,970 --> 00:36:26,880 >> Acum, să ne uităm la aplicația principală în sine. 688 00:36:26,880 --> 00:36:30,800 Deci aceasta este destul de un pic mai mult decât cele 689 00:36:30,800 --> 00:36:34,840 pe care le-am văzut înainte, dar sperăm că nu prea rău. 690 00:36:34,840 --> 00:36:37,140 Deci, lasă-mă să extindă acest lucru. 691 00:36:37,140 --> 00:36:38,370 Bine. 692 00:36:38,370 --> 00:36:42,070 >> Deci, observați și în partea de sus am importat o grămadă de alte lucruri 693 00:36:42,070 --> 00:36:44,129 de la Flask că nu am într-adevăr văzut înainte. 694 00:36:44,129 --> 00:36:46,670 Și, sperăm, putem merge prin fiecăruia dintre aceste unul câte unul 695 00:36:46,670 --> 00:36:49,420 și vorbesc un pic mai mult despre le, de exemplu sortate. 696 00:36:49,420 --> 00:36:51,380 Deci, avem balonul, și render_template, 697 00:36:51,380 --> 00:36:54,370 pe care le-am văzut înainte, acest obiect cerere, 698 00:36:54,370 --> 00:37:00,400 care va veni atunci când ne uităm la modul în care forma pe care am fost de fapt arată 699 00:37:00,400 --> 00:37:01,170 fabrică. 700 00:37:01,170 --> 00:37:04,850 Redirect, care vă permite să redirecționați înapoi de la Create New Post, 701 00:37:04,850 --> 00:37:11,710 înapoi la pagina principală originală, și apoi URL-ul, care este ceva care vă permite să 702 00:37:11,710 --> 00:37:15,550 dau seama unde anume pe site-ul o anumită pagină este. 703 00:37:15,550 --> 00:37:17,810 >> Deci, în următorii lucru pe care îl fac este să import 704 00:37:17,810 --> 00:37:21,550 toate informațiile de la modelele fișierele care am fost doar uita la. 705 00:37:21,550 --> 00:37:23,140 Și, da. 706 00:37:23,140 --> 00:37:28,720 >> Deci, ceva nou care vine când ai de a face cu, 707 00:37:28,720 --> 00:37:31,850 în special baze de date, este că puteți specifica 708 00:37:31,850 --> 00:37:35,110 o funcție care este chemat în fața fiecare cerere, și funcția care devine 709 00:37:35,110 --> 00:37:39,690 numit după fiecare cerere, folosind acest Cererea funcție decorator app.before. 710 00:37:39,690 --> 00:37:42,324 >> Și așa va primi executat ori de câte ori aceasta functie este. 711 00:37:42,324 --> 00:37:44,240 Acest lucru nu trebuie să fie chemați în fața cerere, 712 00:37:44,240 --> 00:37:46,281 dar de obicei asta e ceva sensibil să-i spunem. 713 00:37:46,281 --> 00:37:48,580 714 00:37:48,580 --> 00:37:51,650 Puteți specifica orice funcție vrei să te chemat acolo, 715 00:37:51,650 --> 00:37:56,330 așa că am specificat acest initialize_db funcție care am avut din nou în modelele 716 00:37:56,330 --> 00:38:02,390 fișier, astfel încât înainte de fiecare cerere, vă doriți să vă conectați la baza de date. 717 00:38:02,390 --> 00:38:04,560 >> Există două diferite moduri în care puteți face acest lucru. 718 00:38:04,560 --> 00:38:10,830 Puteți faceapp., Am cred ca e after_request. 719 00:38:10,830 --> 00:38:13,800 Și diferența dintre after_request și teardown_request, 720 00:38:13,800 --> 00:38:17,590 este că se va întâmpla numai after_request în cazul în care cererea de fapt a fost valabil. 721 00:38:17,590 --> 00:38:20,440 Și astfel, numai în cazul în care cerere a fost de succes, 722 00:38:20,440 --> 00:38:22,490 dacă nimic nu a mers bine, dar teardown_request 723 00:38:22,490 --> 00:38:26,300 întâmplă în cazul unui succes cerere, sau în cazul unei erori. 724 00:38:26,300 --> 00:38:28,252 >> Deci, de obicei, pe care doriți de a utiliza teardown_request, 725 00:38:28,252 --> 00:38:30,460 dacă nu vrei să faci ceva, mai ales diferit 726 00:38:30,460 --> 00:38:31,470 în cazul unei erori. 727 00:38:31,470 --> 00:38:35,122 Dar doar pentru închiderea bazei de date, indiferent dacă reușește sau dacă nu, 728 00:38:35,122 --> 00:38:37,080 facem doriți să vă deconectați din baza de date. 729 00:38:37,080 --> 00:38:41,240 Deci se numește, db.close pe obiect db. 730 00:38:41,240 --> 00:38:43,740 >> Observați că teardown_request ia într-o excepție. 731 00:38:43,740 --> 00:38:46,781 Astfel, puteți verifica dacă există a fost de fapt o eroare când a fost închiderea, 732 00:38:46,781 --> 00:38:49,390 dar aici, sperăm, nu nu sunt o mulțime de erori, 733 00:38:49,390 --> 00:38:52,720 așa că doar un fel de a ignora acest lucru. 734 00:38:52,720 --> 00:38:55,990 >> Bine, iar restul de ea nu este prea rău. 735 00:38:55,990 --> 00:39:02,240 Deci, când vom merge la pagina de start, am făcut acest șablon home.html 736 00:39:02,240 --> 00:39:03,490 care se va deschide. 737 00:39:03,490 --> 00:39:06,240 Pasa este în post egal cu, și ceea ce acest 738 00:39:06,240 --> 00:39:10,260 nu este, amintiți-vă, avem acest post Modelul, asa ca am selecta toate posturile, 739 00:39:10,260 --> 00:39:13,890 și apoi un alt lucru pe care il poti face, puteți specifica clauza WHERE, 740 00:39:13,890 --> 00:39:16,910 aveți posibilitatea să specificați o comandă de, și așa vom lua 741 00:39:16,910 --> 00:39:18,820 toate posturile care obține selectat, și apoi 742 00:39:18,820 --> 00:39:22,590 le comanda de post.date.descending. 743 00:39:22,590 --> 00:39:25,030 Și care se va preciza, atunci când au venit efectiv, 744 00:39:25,030 --> 00:39:29,250 cel mai recent va fi foarte primul. 745 00:39:29,250 --> 00:39:31,420 >> Și apoi, vom trece că în șablonul home.html, 746 00:39:31,420 --> 00:39:34,240 Să fapt deschide că Format într-adevăr rapid, 747 00:39:34,240 --> 00:39:36,760 și să ia o privire la modul care este de lucru. 748 00:39:36,760 --> 00:39:42,130 Și acest lucru nu este mare HTML, dar sperăm, ne putem concentra pe Python. 749 00:39:42,130 --> 00:39:46,960 >> Deci, există o legătură către adăuga noi Post, și așa mai departe acest specifică ruta 750 00:39:46,960 --> 00:39:51,580 în vasul pe care le defini, care este chiar aici. 751 00:39:51,580 --> 00:39:56,310 Acesta este noul traseu poștă, și ne-am specifica faptul ca aici. 752 00:39:56,310 --> 00:40:00,450 Și așa că este un link care va merge apoi pentru că traseul în serverul Flask. 753 00:40:00,450 --> 00:40:03,820 >> Mai interesant lucru este acest lucru pentru bucla aici. 754 00:40:03,820 --> 00:40:07,685 Așa că am specifica faptul că acest parametru post care 755 00:40:07,685 --> 00:40:09,560 a fost trecut în Funcția render_template, 756 00:40:09,560 --> 00:40:13,550 pentru fiecare post în Post obiect care devine trecut în. 757 00:40:13,550 --> 00:40:16,600 Vrem să imprime titlul post, în H1, 758 00:40:16,600 --> 00:40:21,930 și apoi mai jos, dorim să imprime textul mesaj într-un paragraf. 759 00:40:21,930 --> 00:40:25,710 >> Si aici, putem de fapt apela o funcție Python, 760 00:40:25,710 --> 00:40:35,130 astfel încât să putem apela strftime, ST-RF-time, și puteți trece în șirul format 761 00:40:35,130 --> 00:40:37,064 pe care doriți să imprimați datele în. 762 00:40:37,064 --> 00:40:39,980 Deci, este destul de frumos pe care puteți numesc de fapt, această funcție Python 763 00:40:39,980 --> 00:40:41,090 din interior aici. 764 00:40:41,090 --> 00:40:44,370 Tu nu trebuie să faci formatarea pe partea controler, că într-adevăr, 765 00:40:44,370 --> 00:40:47,770 formatarea data este ceva care vrei să se ocupe în View. 766 00:40:47,770 --> 00:40:51,480 >> Și toate acestea la sută lucrurile nu este super important. 767 00:40:51,480 --> 00:40:55,270 Dacă te uiți în sus documentația pentru funcția strftime în Python, 768 00:40:55,270 --> 00:40:57,040 specifică toate acestea lucruri, dar asta e 769 00:40:57,040 --> 00:40:59,190 cum, atunci când am fost în căutarea la pagina de pornire aici, 770 00:40:59,190 --> 00:41:04,440 se formatează acest lucru cu un frumos data, si se specifică AM sau PM, 771 00:41:04,440 --> 00:41:09,410 dar în mod normal, dacă ne-am nu au avut acest aici, 772 00:41:09,410 --> 00:41:14,024 veți obține, probabil, unele de gunoi dată care nu arata foarte bine. 773 00:41:14,024 --> 00:41:15,940 Și apoi ne-am specifica post.text, și am putut 774 00:41:15,940 --> 00:41:19,460 au pus o pereche de linie sparge aici, doar 775 00:41:19,460 --> 00:41:21,820 pentru a pune niște spații între fiecare post. 776 00:41:21,820 --> 00:41:26,270 >> Deci, cred că cel mai important lucru în acest exemplu, 777 00:41:26,270 --> 00:41:28,697 este că puteți folosi acest lucru pentru bucla. 778 00:41:28,697 --> 00:41:30,780 Și acest lucru este analog lucruri pe care le puteți face în PHP. 779 00:41:30,780 --> 00:41:32,905 Puteți repeta prin, totul devine trecut în, 780 00:41:32,905 --> 00:41:36,719 și așa mai departe, în loc de a avea de a face copy / paste, copy / paste toate HTML, 781 00:41:36,719 --> 00:41:40,010 trebuie doar sa-l scrie o dată, și apoi puteti repeta peste toate posturile. 782 00:41:40,010 --> 00:41:41,510 >> Și acest lucru este ceva comun pe care doriți 783 00:41:41,510 --> 00:41:44,510 de a face, atunci când aveți o mulțime de date, este că, pentru tot ceea ce, în datele, 784 00:41:44,510 --> 00:41:48,370 vrei sa faci un lucru similar. 785 00:41:48,370 --> 00:41:51,690 Și apoi, doar amintiți-vă, că atunci când doriți să imprimați ceva în mod explicit 786 00:41:51,690 --> 00:41:54,780 în HTML, utilizați duble acolade aici, 787 00:41:54,780 --> 00:41:57,820 dar atunci când doriți să specificați unele informații cu privire la o stare, 788 00:41:57,820 --> 00:42:02,430 sau despre o pentru buclă, tine utilizați suportul la sută. 789 00:42:02,430 --> 00:42:08,730 >> Deci, merge înapoi la Python cod, astfel încât explică 790 00:42:08,730 --> 00:42:12,242 ceea ce se întâmplă în principal traseu, când vom merge acolo, 791 00:42:12,242 --> 00:42:14,450 doar afișează toate posturi, dar apoi problema 792 00:42:14,450 --> 00:42:17,440 este, cum putem obține de fapt, posturi în baza de date, care 793 00:42:17,440 --> 00:42:18,970 este un pic mai interesant. 794 00:42:18,970 --> 00:42:23,960 >> Deci, atunci când faceți clic pe Nou Mesaj link, pe care am văzut aici, 795 00:42:23,960 --> 00:42:26,000 te redirecționează la această formă. 796 00:42:26,000 --> 00:42:29,580 Si acesta este doar un simplu apel la Funcția render_template, care apoi 797 00:42:29,580 --> 00:42:32,110 trece în noul post în formă HTML. 798 00:42:32,110 --> 00:42:36,212 Deci, haideți să aruncăm o privire la asta. 799 00:42:36,212 --> 00:42:37,420 Deci aceasta este destul de simplu. 800 00:42:37,420 --> 00:42:45,110 Ea are o formă simplă HTML, care va arata un pic familiar, 801 00:42:45,110 --> 00:42:47,380 pe baza formularelor din CS50 finanțe. 802 00:42:47,380 --> 00:42:49,940 Și astfel, am specifica aici, acțiunea. 803 00:42:49,940 --> 00:42:52,435 Și aici, dacă sunteți de lucru cu PHP, în mod normal, 804 00:42:52,435 --> 00:42:55,930 ar fi ceva de genul, create.PHP, dar aici 805 00:42:55,930 --> 00:42:59,960 am specifica de fapt un traseu în cadrul serverului Flask. 806 00:42:59,960 --> 00:43:02,520 Și astfel, corespunde acest traseu pentru a crea traseul 807 00:43:02,520 --> 00:43:05,680 că avem aici, care vom intra în într-o secundă. 808 00:43:05,680 --> 00:43:07,630 >> Și astfel, facem precizarea că este o metoda POST, 809 00:43:07,630 --> 00:43:09,820 pentru că vrem să trimită aceste date formular, și, de obicei 810 00:43:09,820 --> 00:43:12,945 atunci când sunteți trimiterea datelor dintr-un formular, s-ar putea doriți să utilizați o cerere poștă, 811 00:43:12,945 --> 00:43:15,760 doar astfel încât să nu se termină cu acest mare URL, greoi. 812 00:43:15,760 --> 00:43:18,970 Dar ai putea folosi, de asemenea, o cerere GET, și-l trece cu rutare variabilă, 813 00:43:18,970 --> 00:43:21,170 dar pentru formulare, e frumos la o cerere post aici. 814 00:43:21,170 --> 00:43:24,620 Și așa, atunci, tu la fel ca ar face cu HTML și PHP, 815 00:43:24,620 --> 00:43:28,420 puteți specifica aceste intrări de text, și puteți să specificați numele lor, 816 00:43:28,420 --> 00:43:33,490 și asta e numele pe care vor fi trecut în obiectul cererii în Flask. 817 00:43:33,490 --> 00:43:36,960 >> Și apoi ne-am un Trimite buton pe care scrie mesaj. 818 00:43:36,960 --> 00:43:40,760 Și aici, Post este numele buton, pentru că este un post pe blog, 819 00:43:40,760 --> 00:43:42,700 dar aici, post-este metoda cerere. 820 00:43:42,700 --> 00:43:47,060 Deci acestea sunt același cuvânt dar de fapt nu au legatura. 821 00:43:47,060 --> 00:43:48,460 Da 822 00:43:48,460 --> 00:43:54,800 >> Revenind la codul Python, când am sunat la metoda a crea, 823 00:43:54,800 --> 00:43:57,702 observă aici că puteți specifica de fapt de pe ruta 824 00:43:57,702 --> 00:44:00,650 metodele cerere pe care doriți să acceptați, 825 00:44:00,650 --> 00:44:04,770 și așa aici, am specifica faptul că am doresc doar să accepte o metoda POST. 826 00:44:04,770 --> 00:44:09,800 Deci, dacă de fapt încerc să vizitați pagina direct, care utilizează o cerere GET, 827 00:44:09,800 --> 00:44:11,700 mă va spune "Metoda nu este permis." 828 00:44:11,700 --> 00:44:15,840 >> Și astfel, aveți pagini, un fel de aceasta creează pagină, pe care eu sunt doar 829 00:44:15,840 --> 00:44:20,192 într-adevăr, folosind ca mod de formularul pentru a obține depuse, 830 00:44:20,192 --> 00:44:22,900 puteți specifica că nu vrei ca oamenii să poată să meargă acolo 831 00:44:22,900 --> 00:44:25,650 direct prin cererea GET, sau dacă nu doriți, 832 00:44:25,650 --> 00:44:28,580 pentru un motiv oarecare, o cerere Post, ai putea preciza doar ajunge aici, 833 00:44:28,580 --> 00:44:32,720 dar în acest exemplu, ne-am doresc cerere Publicați să iasă. 834 00:44:32,720 --> 00:44:38,700 >> Deci, atunci când create_post este numit, atunci când vom vizita că prin cererea Post, 835 00:44:38,700 --> 00:44:43,600 ori de câte ori te duci la un anumit traseu, există acest obiect cerere, 836 00:44:43,600 --> 00:44:46,640 și a trebuit să importe solicitări la foarte de sus, 837 00:44:46,640 --> 00:44:49,640 dar nu e această cerere obiect care devine trecut în, 838 00:44:49,640 --> 00:44:53,210 și puteți accesa datele din formular, care vor fi completate în mod automat 839 00:44:53,210 --> 00:44:55,070 atunci când trimiteți o cerere de la un formular. 840 00:44:55,070 --> 00:44:56,990 >> Și apoi, ce cred este foarte cool, este 841 00:44:56,990 --> 00:45:02,840 că obiectul formular pentru a obține trecut in, este doar un dicționar Python care 842 00:45:02,840 --> 00:45:10,560 conține, dacă access-- așa aici, să mă trage HTML de lângă ea, doar 843 00:45:10,560 --> 00:45:17,670 astfel încât să puteți avea ca ca referință, da, așa 844 00:45:17,670 --> 00:45:21,060 Numele pe care le specifica aici pentru diferite domenii, astfel încât 845 00:45:21,060 --> 00:45:23,900 titlul și textul, am apoi utilizați doar cei de aici 846 00:45:23,900 --> 00:45:27,110 ca indici în datele din formular. 847 00:45:27,110 --> 00:45:28,950 Așa că e foarte convenabil. 848 00:45:28,950 --> 00:45:33,320 >> Deci noi numim post.create, care va crea și introduceți în mod automat 849 00:45:33,320 --> 00:45:36,850 acest nou obiect postare în baza de date. 850 00:45:36,850 --> 00:45:40,690 Și cred că această funcție a crea aici este un exemplu foarte misto de modul în care 851 00:45:40,690 --> 00:45:44,900 puternic Flask este și de lucru cu acest lucru, pentru că dacă făceai ceva 852 00:45:44,900 --> 00:45:48,660 in PHP, poate fi necesar să face o mulțime de validare, 853 00:45:48,660 --> 00:45:51,730 va trebui să atunci stabili o conexiune bază de date, 854 00:45:51,730 --> 00:45:55,210 va trebui să atunci executa interogarea SQL, 855 00:45:55,210 --> 00:45:59,550 dar aici doar avem acest frumos post.create, care putem apoi doar 856 00:45:59,550 --> 00:46:01,520 obține informații afară a obiectului cerere, 857 00:46:01,520 --> 00:46:05,370 și apoi trece într-o nouă posta pe care le creăm. 858 00:46:05,370 --> 00:46:07,850 >> Apoi, cel din urmă lucru pe care vrem să facem, 859 00:46:07,850 --> 00:46:09,630 este de a redirecționa utilizator înapoi la casa. 860 00:46:09,630 --> 00:46:13,020 Și așa vom folosi acest Flask redirecționare funcție. 861 00:46:13,020 --> 00:46:17,770 Și ceva ce nu a văzut înainte, a fost această funcție URL. 862 00:46:17,770 --> 00:46:21,970 Deci, URL-ul pentru funcția permite treci în fapt numele 863 00:46:21,970 --> 00:46:26,090 de o funcție în codul Python, mai degrabă decât calea particulară 864 00:46:26,090 --> 00:46:26,720 că este la. 865 00:46:26,720 --> 00:46:32,107 >> Așa că am putea avea la fel de ușor redirecționat un utilizator de a reduce, 866 00:46:32,107 --> 00:46:37,050 care l-ar trimite înapoi acasă, dar folosind URL-ul pentru funcția este frumos, 867 00:46:37,050 --> 00:46:39,990 pentru că dacă vă schimbați locație unde lucrurile sunt, 868 00:46:39,990 --> 00:46:44,080 Să spunem că am schimba acasă pentru a fi la / home schimb, 869 00:46:44,080 --> 00:46:47,040 acest lucru ar mai apoi să se întoarcă / home, pentru că de fapt, merge și se uită în sus 870 00:46:47,040 --> 00:46:50,770 numele funcției, și va da înapoi URL-ul pentru asta. 871 00:46:50,770 --> 00:46:52,490 >> Deci, un fel de pe presupunerea că ești 872 00:46:52,490 --> 00:46:55,489 mai multe sanse de a schimba lucrurile în cazul în care sunt, decât numele funcțiilor. 873 00:46:55,489 --> 00:46:58,840 Puteți utiliza acest într-adevăr URL frumos pentru funcție. 874 00:46:58,840 --> 00:47:02,470 Și un lucru să fie conștienți de care este un pic mai complicat, 875 00:47:02,470 --> 00:47:05,750 este că tu crezi că putea să apel redirecționa pe adresa URL pentru, 876 00:47:05,750 --> 00:47:10,600 dar de fapt toate rutele au pentru a reveni un fel de text și HTML, 877 00:47:10,600 --> 00:47:14,360 deci va trebui de fapt să a reveni la apel de redirecționare. 878 00:47:14,360 --> 00:47:18,379 În caz contrar, veți obține ceva invalid despre care nu se întoarce un șir de caractere, 879 00:47:18,379 --> 00:47:21,420 pentru că toate acestea trebuie să se întoarcă HTML chiar vrei să facă. 880 00:47:21,420 --> 00:47:26,980 >> Și așa, atunci când sunați la redirecționare, te redirecționează la pagina, 881 00:47:26,980 --> 00:47:30,270 dar se întoarce de fapt HTML aveți nevoie pentru a executa care redirecționează. 882 00:47:30,270 --> 00:47:34,430 883 00:47:34,430 --> 00:47:37,110 Du-te înapoi la pagina de start. 884 00:47:37,110 --> 00:47:39,200 Deci, avem aceste două puncte de vedere diferite. 885 00:47:39,200 --> 00:47:40,132 Avem vedere acasă. 886 00:47:40,132 --> 00:47:41,590 Sau, cred că ar trebui să spun șabloane. 887 00:47:41,590 --> 00:47:44,190 Avem aceste două modele, șablonul de origine, care 888 00:47:44,190 --> 00:47:48,500 afișează toate posturile noastre, și atunci avem acest lucru anunț, 889 00:47:48,500 --> 00:47:52,970 și când faceți clic pe post, merge la un nou traseu în vasul, 890 00:47:52,970 --> 00:47:55,920 dar această rută nu neapărat au un șablon corespunzător. 891 00:47:55,920 --> 00:47:59,290 892 00:47:59,290 --> 00:48:01,560 Nu trebuie să vedem nimic, dar poți încă 893 00:48:01,560 --> 00:48:04,090 au acest lucru se întâmplă în spatele scenei. 894 00:48:04,090 --> 00:48:07,450 Și apoi te redirecționat Înapoi la pagina de start. 895 00:48:07,450 --> 00:48:12,230 Și cu siguranță, este ușor de a lucra în unele CSS mai frumos în șablonul 896 00:48:12,230 --> 00:48:15,580 și să facă acest lucru arata mult mai frumos, dar toate logicii principal 897 00:48:15,580 --> 00:48:18,590 este acolo, în Python. 898 00:48:18,590 --> 00:48:20,020 >> Orice întrebări cu privire la acest exemplu? 899 00:48:20,020 --> 00:48:22,760 Știu că există o mulțime de lucruri diferite se întâmplă acolo, 900 00:48:22,760 --> 00:48:25,341 o mulțime de lucruri pe care nu a vazut înainte, dar, ca orice. 901 00:48:25,341 --> 00:48:25,840 Da. 902 00:48:25,840 --> 00:48:28,346 >> AUDIENTA 1: Nu trebuie să faci nimic special pentru a freca datele pe care este 903 00:48:28,346 --> 00:48:29,600 Venind din forma? 904 00:48:29,600 --> 00:48:31,109 Am observat doar ai spus "crea" 905 00:48:31,109 --> 00:48:33,900 EZRA Zigmond: Da, așa că e de fapt, asta e un punct foarte bun. 906 00:48:33,900 --> 00:48:36,350 Deci întrebarea a fost, nu-i nevoie pentru a verifica și asigurați-vă 907 00:48:36,350 --> 00:48:39,190 că datele sunt valabile, și face nici un fel de spălare 908 00:48:39,190 --> 00:48:41,840 pentru a vă asigura că acesta este valid, pentru că după cum puteți vedea aici, 909 00:48:41,840 --> 00:48:42,660 Nu fac asta. 910 00:48:42,660 --> 00:48:48,140 Deci, haideți să vedem ce se întâmplă dacă am posta ceva gol. 911 00:48:48,140 --> 00:48:51,190 Deci, acesta va face de fapt doar o după gol și completați ora si data. 912 00:48:51,190 --> 00:48:55,990 >> Deci, în realitate, ar fi, probabil vrei sa faci ceva de genul, 913 00:48:55,990 --> 00:49:04,749 poate preciza dacă titlul este egal cu șir gol, atunci nu face asta. 914 00:49:04,749 --> 00:49:07,290 Sau, numai că fac dacă titlul este nu este egal cu șir gol. 915 00:49:07,290 --> 00:49:10,330 Deci, de fapt, nu în mod automat avea grijă de asta spălarea 916 00:49:10,330 --> 00:49:12,820 pentru tine, asa ca încă mai trebuie să faci asta. 917 00:49:12,820 --> 00:49:14,330 Da, bine întrebarea. 918 00:49:14,330 --> 00:49:18,497 >> AUDIENTA 2: Are scrub pentru injecție sequel? 919 00:49:18,497 --> 00:49:19,890 Stii? 920 00:49:19,890 --> 00:49:22,830 >> EZRA Zigmond: Din fericire, pitic face asta. 921 00:49:22,830 --> 00:49:25,830 Cred că ar fi cu siguranță o destul de bibliotecă rău în cazul în care nu a făcut asta. 922 00:49:25,830 --> 00:49:29,511 923 00:49:29,511 --> 00:49:32,690 Nu știu exact. 924 00:49:32,690 --> 00:49:34,820 Mi-ar trebui să se uite la interogarea care a generat. 925 00:49:34,820 --> 00:49:38,980 Cred că, dacă am scris într-o blog la fel de uitat 926 00:49:38,980 --> 00:49:46,370 ca un atac injecție SQL, ceva de genul asta, în cazul în care acest lucru 927 00:49:46,370 --> 00:49:49,370 este ca un câmp parolă sau ceva, s-ar putea face așa ceva. 928 00:49:49,370 --> 00:49:53,410 >> Cred că va fi în continuare obține literalmente postat, 929 00:49:53,410 --> 00:49:59,200 dar cred că pitic face un fel de spălare a datelor 930 00:49:59,200 --> 00:50:01,680 înainte de a se execută de fapt. 931 00:50:01,680 --> 00:50:04,510 >> AUDIENTA 1: Aceasta câmp de text este concepute pentru a lua text simplu, nu? 932 00:50:04,510 --> 00:50:05,710 >> EZRA Zigmond: Da, este. 933 00:50:05,710 --> 00:50:06,465 Da. 934 00:50:06,465 --> 00:50:09,590 Deci, eu cred că toate, astfel încât acesta este comportament corect, care va face acest lucru, 935 00:50:09,590 --> 00:50:12,170 dar cred că pitic sperăm face 936 00:50:12,170 --> 00:50:13,780 un fel de protecție de-a rîndul lor. 937 00:50:13,780 --> 00:50:16,090 Și dacă ai vrut să verificați că există 938 00:50:16,090 --> 00:50:19,530 modalități de când genera o interogare. 939 00:50:19,530 --> 00:50:22,622 astfel încât să nu trebuie să executa direct. 940 00:50:22,622 --> 00:50:24,330 Ar trebui să ia o uita-te la documentație, 941 00:50:24,330 --> 00:50:27,930 dar puteți vizualiza, de fapt, SQL care este generatoare de, 942 00:50:27,930 --> 00:50:30,840 și să ia o privire la faptul că, și de a face vă că este scapă lucruri. 943 00:50:30,840 --> 00:50:33,700 >> Un alt motiv pentru care s-ar putea doresc să se uite la SQL 944 00:50:33,700 --> 00:50:37,920 care este pitic scoate, este în cazul în care Lucrurile par a fi într-adevăr lent merge, 945 00:50:37,920 --> 00:50:41,090 puteți să aruncați o privire și să vedem ce este de fapt face, pentru că uneori 946 00:50:41,090 --> 00:50:44,670 ușor să adăugați accidental în, modul în care-l scrie, 947 00:50:44,670 --> 00:50:47,880 puteți avea accidental selectați întreaga bază de date în primul rând, 948 00:50:47,880 --> 00:50:50,230 și apoi face o operație fel pe faptul că, atunci când într-adevăr 949 00:50:50,230 --> 00:50:51,320 menit pentru a selecta un subset. 950 00:50:51,320 --> 00:50:53,560 >> Și astfel, în cazul în care lucrurile nu sunt destul merg bine, 951 00:50:53,560 --> 00:50:57,300 e bine să aruncăm o privire la cererea Asta este de fapt obtinerea generat. 952 00:50:57,300 --> 00:50:57,800 Da. 953 00:50:57,800 --> 00:51:02,100 >> AUDIENTA 2: Când ai început în primul rând, ai pus în portul ca 5000. 954 00:51:02,100 --> 00:51:02,904 >> EZRA Zigmond: Da. 955 00:51:02,904 --> 00:51:06,070 AUDIENTA 2: Este implicit cu pitic, sau este că ceva se poate schimba? 956 00:51:06,070 --> 00:51:10,870 EZRA Zigmond: Da, astfel încât Portul este implicit cu Flask. 957 00:51:10,870 --> 00:51:13,061 Dacă-l ruleze fără specificând nimic, 958 00:51:13,061 --> 00:51:14,310 se va face în mod automat că. 959 00:51:14,310 --> 00:51:16,060 Cred, aș avea să verificați acest lucru, 960 00:51:16,060 --> 00:51:19,130 dar puteți specifica că în app.run, Cred că poți să faci ceva de genul, 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 Să dai o încerca foarte repede. 964 00:51:23,750 --> 00:51:29,100 965 00:51:29,100 --> 00:51:32,230 Da, astfel încât să puteți specifica doar port = 8080, și va rula acolo, 966 00:51:32,230 --> 00:51:36,130 care cred că, dacă ai vrut să-l rulați pe IDE, nu am încercat acest lucru, 967 00:51:36,130 --> 00:51:38,527 dar cred că, dacă primeste-l pe portul 8080, 968 00:51:38,527 --> 00:51:40,360 ai fi probabil în măsură pentru a accesa serverul, 969 00:51:40,360 --> 00:51:41,870 la fel ca ai fost pentru site-ul. 970 00:51:41,870 --> 00:51:44,390 >> Da, dar e ușor pentru a schimba că, dacă 971 00:51:44,390 --> 00:51:48,540 au nici un fel de port forwarding lucruri pe care trebuie să faci. 972 00:51:48,540 --> 00:51:50,410 >> Orice alte întrebări? 973 00:51:50,410 --> 00:51:50,916 Da? 974 00:51:50,916 --> 00:51:53,416 AUDIENTA 1: Deci, am văzut în ta modele care, după cum ați menționat, 975 00:51:53,416 --> 00:51:55,647 aveți pentru a specifica baza de date pentru fiecare obiect. 976 00:51:55,647 --> 00:51:58,105 Nu se întâmplă să știi, nu care fac într-adevăr ușor dacă 977 00:51:58,105 --> 00:52:03,210 au o mulțime de baze de date SQLite pe care le doriți să utilizați pentru un singur aplicație web, 978 00:52:03,210 --> 00:52:07,210 pe care le poate specifica doar o adunatura de cele diferite în modelul dumneavoastră? 979 00:52:07,210 --> 00:52:11,620 >> EZRA Zigmond: Da, lasă-mă să deschide asta foarte repede. 980 00:52:11,620 --> 00:52:17,570 Deci, vrei să spui că, dacă doriți să aveți o grămadă de diferite ceva, poate 981 00:52:17,570 --> 00:52:22,670 ca și elevii, pentru a putea motiv, ceva de genul asta? 982 00:52:22,670 --> 00:52:26,870 Da, așa cred că încă, fiecare model 983 00:52:26,870 --> 00:52:30,652 ar trebui să aibă doar încă o bază de date i sa atribuit, 984 00:52:30,652 --> 00:52:32,610 dar dacă ai vrut să aibă diferite modele care 985 00:52:32,610 --> 00:52:35,818 au diferite baze de date alocate obiecte să-l, ai putea face cu siguranta asta. 986 00:52:35,818 --> 00:52:43,070 Deci, dacă am creat un nou, ceva de genul, 987 00:52:43,070 --> 00:52:47,000 iar acum acest lucru este un elev care arata ciudat ca un post pe blog, 988 00:52:47,000 --> 00:52:49,390 Aș putea preciza că baza de date este egal cu db_2 aici. 989 00:52:49,390 --> 00:52:51,390 Deci, cred că asta e fel principal, puteți face acest lucru. 990 00:52:51,390 --> 00:52:54,560 991 00:52:54,560 --> 00:52:56,200 >> Misto. 992 00:52:56,200 --> 00:52:58,410 Orice alte întrebări? 993 00:52:58,410 --> 00:53:02,170 >> Deci, doar pentru a termina un pic bit, aici sunt unele resurse, 994 00:53:02,170 --> 00:53:06,030 iar aceste diapozitive vor fi postate online astfel încât să puteți obține de fapt, la aceste link-uri. 995 00:53:06,030 --> 00:53:08,500 Cele mai bune resurse sunt într-adevăr documentația pentru Flask 996 00:53:08,500 --> 00:53:09,930 și pitic ei înșiși. 997 00:53:09,930 --> 00:53:12,940 Ei scris foarte bine, cred. 998 00:53:12,940 --> 00:53:18,180 Deci, site-ul Flask este aici, și ei au un tutorial QuickStart care 999 00:53:18,180 --> 00:53:20,710 va merge prin similară lucruri la ceea ce am mers prin, 1000 00:53:20,710 --> 00:53:23,560 dar dacă doriți orice fel de comentariu din lucrurile pe care m-am dus, 1001 00:53:23,560 --> 00:53:26,200 sau te-ai gândit că i-am explicat ceva într-un mod confuz, 1002 00:53:26,200 --> 00:53:28,390 vor avea exemple similare acolo. 1003 00:53:28,390 --> 00:53:31,570 >> Pitic are documentație, și ei au un tutorial QuickStart 1004 00:53:31,570 --> 00:53:34,650 care merge de-a lungul principalilor parametri care le-ar dori să utilizați. 1005 00:53:34,650 --> 00:53:38,900 Deci, lucrurile pe care le-am vorbit despre cu unic, și precizează implicite, 1006 00:53:38,900 --> 00:53:42,710 diferitele tipuri de domenii care aveți posibilitatea să utilizați, acestea ar fi tot acolo. 1007 00:53:42,710 --> 00:53:44,690 >> De asemenea, dacă aveți întrebări despre pitic, 1008 00:53:44,690 --> 00:53:47,530 și le posta pe StackOverflow, tipul care a făcut de fapt pitic 1009 00:53:47,530 --> 00:53:49,500 merge mai departe și răspunde celor uneori. 1010 00:53:49,500 --> 00:53:53,200 Dacă aveți o întrebare, sperăm el va fi capabil să răspundă, 1011 00:53:53,200 --> 00:53:54,867 pentru că el a scris totul. 1012 00:53:54,867 --> 00:53:56,700 Cred că e totul Am vrut să le acopere. 1013 00:53:56,700 --> 00:53:58,930 Vă mulțumim pentru iese. 1014 00:53:58,930 --> 00:54:02,688