[Daqq tal-mużika] Ezra ZIGMOND: Hi, kulħadd. Grazzi għall ġejjin out illum. Dan is-seminar huwa "Python Web Apps ma Garafina. " Allura, jien ser jitkellem ftit dwar għaliex inti tista 'tixtieq li tuża Garafina li jagħmlu apps web bl Python, għall-kuntrarju għal xi oqfsa oħrajn hemmhekk, bħal Django, li hija l-aktar magħrufa. Il-sottotitolu hija "u peewee, "li hija xi ħaġa aħna qed tmur biex jitkellmu dwar kif li jinteraġixxu ma 'databases SQL. Dan jagħmilha tassew sbieħ. Allura, hawn biss telqa malajr ta 'dak I tixtieq li tmur fuq. Allura, l-ewwel, biss wieħed slide li għaddej biex tkun Quickstart, li huwa kif tikseb kollox stabbilit fuq il-kompjuter tiegħek. Jien ser jiġu juri dan fuq tiegħi magna Mac lokali, biss għaliex dan huwa fejn I ghamilt dan qabel, jien aktar komdu miegħu, iżda dan huwa definittivament possibbli fuq il-IDE CD50. Għalhekk, wara li, nixtieq li jintroduċu dak Garafina hi, u tikkonvinċi lilek għalfejn inti għandek jużawh fl-ewwel post. Imbagħad, I ser jagħtuk a quick eżempju ta 'dak li tista 'tagħmel Garafina, eżempju quick ta 'x'tista' tagħmel fil peewee, u mbagħad I ser nuruk aktar Eżempju applikazzjoni kompluta li nressaq flimkien inkunu jistgħu jimxu permezz flimkien. U mbagħad finalment, fil l-aħħar slide, għandi xi riżorsi li inti tfittex fil online għal aktar informazzjoni. Din mhix kompluta tutorja ta 'kif tuża Garafina. U jien ser nittama li jħallu xi żmien għall-mistoqsijiet. Kulħadd jaraw lokalment, just bħal, shout out fin-nofs jekk għandek xi mistoqsijiet. Allura Jittieħed installazzjoni ta 'malajr, jekk inti tixtieq li ssegwi tul, jew jekk inti tixtieq li tikseb dan up fuq il-kompjuter tiegħek, Jien ser tkun qed tuża Python 2.7.10. Garafina jaħdem ma ' Python 3, imma I simili użu Python 2, għaliex hemm xi pakketti Python li ma jaħdmux bi 3 s'issa. Jekk għandek pip installat, li hija ġestitur pakkett Python, Naħseb jekk Python tiegħek hija ikbar minn jew ugwali għal 2.7.9, ikollok installat diġà, huwa super faċli biex jiġu installati dawn il-pakketti. Inti tista 'tagħmel pip tinstalla Garafina, pip jinstallaw peewee, normalment għandek jiddekorri sudo biss b'tali mod li l-permessi xogħol barra. U, jekk inti qed tuża super verżjoni l-qadima tal Python, I jirrakkomandaw aġġornament Python tiegħek, jew bl-użu EasyInstall li jinstallaw pip. Għalhekk, il-mistoqsija li jmiss huwa, dak li huwa Garafina? UI raden, l-ewwel ta ' kwistjoni raġonevoli I CROWLEY għal żmien twil hija, dak li huwa app web? Minħabba li l-kelma li jien jaħsbu jintefa madwar lott li jien ma verament jafu. U naħseb li l-aħjar eżempju ta 'dak app web huwa, verament huwa CS50 Finanzi, fejn mhuwiex verament ftit websajt, imma hija xi ħaġa li inti tista tip ta jinteraġixxu ma '. Hemm kontijiet utent u kull xorta ta 'affarijiet differenti. Allura, fejn eżattament inti tiġbed l- linja bejn dak li huwa ta 'websajt, u dak li huwa app web, huwa tip ta ' arbitrarja, imma I raden l-idea, huwa xi ħaġa aktar minn website u huwa applikazzjoni utli. Allura, Garafina hija qafas għal jagħmlu apps web bl-użu Python. U wieħed jittama, sa l-aħħar ta 'dan, I se tikkonvinci lilek li inti tista 'attwalment tikteb xi ħaġa bħall CS50 Finanzi jużaw Python, li jiena simili ħafna aħjar minn PHP, personalment. Allura, Garafina huwa, li jsejjaħ microframework, li permezz tagħha, li jfisser li huwa ferm sempliċi, iżda extensible. Allura, hija għandha biss dak li għandek bżonn, imma jekk inti tixtieq aktar karatteristiċi, huwa faċli biex jinġiebu. Iżda biss għaliex dan huwa microframework, ma jfissru li huwa biss għal proġetti żgħar. I jkollhom rabta hawn li tgħid li Obama użat Garafina fl-2012 għall-kampanja tiegħu website, li wieħed jittama, hija xi ħaġa ta 'endorsement. Imma l-ħaġa li I verament simili dwar Garafina hija li, ma verament tagħmel kwalunkwe tip ta 'deċiżjonijiet għalik. Sempliċiment għax aħna qed jitkellem dwar apps web, Għandi li din titqabbel ma Ruby fuq Binarji u Django, it-tnejn li huma oqfsa kbira, iżda tnejn jagħmlu suppożizzjonijiet dwar kif inti tixtieq li jinteraġixxu ma 'databases, kif inti tixtieq li tippreżenta tiegħek fehmiet, u dawn qed definittivament aspetti tajba għal dan. Per eżempju, Ruby fuq binarji għandha din is-sistema rekord attiva, li hija tassew sbieħ mod biex jinteraġixxu ma 'data, imma jekk inti tixtieq li tuża Ruby fuq Binarji, int tip ta 'marbut fis dan. Iżda ma Garafina, kif I ser nuruk ma peewee, inti tista 'tuża x'ikun it-tip ta 'database li trid, u inti tista 'sempliċement pull li fil bħala estensjoni fil Garafina. Allura hu għalhekk li I really bħal Garafina, huwa li ma tagħmel suppożizzjonijiet għalik ibbażati fuq affarijiet li inti m'għandekx bżonn verament. Allura, għaliex għandek tuża Garafina? Il-vantaġġi huma, hija biss tkun verament-karatteristiċi ewlenin mibnija fih li għandek bżonn. Allura, inti ma għandekx għalfejn tinkwieta dwar fehim mazz sħiħ ta 'affarijiet li inti ma verament bżonn. Inti ma għandekx għalfejn tinkwieta dwar tidwir off karatteristiċi li inti ma verament bżonn. U, kif semmejt, huwa super faċli biex iżżid fil-estensjonijiet ta 'affarijiet li għandek bżonn. Xi wħud minnhom, Garafina għandha appoġġ tagħhom stess għal dan. Allura hemm xi ħaġa imsejħa Garafina admin, li tirrifletti li admin panel li Django jipprovdi, li tagħtik mod viżwali sabiħ li jamministra website tiegħek. Iżda għal darb'oħra, jekk int teħid xi ħaġa sempliċi, inti probabilment ma bżonn admin big panel, so I think thats super sbieħ. U l-iżvantaġġi huma, li għandek inqas poter barra mill-kaxxa. Allura, meta inti l-ewwel tiftaħ Garafina, u fil-programm Python tiegħek, inti biss tip minn Garafina importazzjoni *, jew kwalunkwe, inti ma eżattament tikseb kollha ta ' l-karatteristiċi inti tista 'tixtieq. U hekk ikollok biex b'mod aktar espliċitu telenka l-karatteristiċi trid. Allura dak żvantaġġ wieħed, imma jien jaħsbu li għall-bini web żgħar apps bħal jien ser tkun turi inti, li mhux verament problema. U dak l-aħħar ħaġa hija suppost li jgħidu, li huwa typo, hija li hemm inqas standardizzati konvenzjonijiet dwar kif tuża Garafina, biss minħabba li ma jkunx hemm daqs nies li jużawha professjonalment meta mqabbla ma 'Django. Għalhekk, jekk inti tfittex xi ħaġa simili, "kif nista 'nagħmlu x" fil Django, inti probabilment issib lilha. Hemm disinn tajjeb mudelli tista 'tuża, iżda ma Garafina, huwa tip ta 'jmorru mod tiegħek stess, biss għaliex dan huwa librerija pretty żgħar. Għalhekk dawn huma l- żvantaġġi, imma naħseb li huwa għadu librerija tajba għall-użu. Mela ejja biss jaqbżu d-dritt fis Garafina. Dan huwa żgur li mhux se li jkun komplet tutorja, iżda huwa li jagħti idea ta 'kif l-affarijiet għandhom jistrutturaw, u għalhekk tħossok komdu tmur off u tħares lejn id-dokumentazzjoni u jiskopru aktar. Allura, let me tiftaħ verament Eżempju sempliċi fl-ewwel, u jurik liema li Dehra, u allura aħna ser din tinqasam ftit aktar. Allura dan hawn, let me nikseb dan running. So, I issa għandhom applikazzjoni running tiegħi. Jien ser jiftħu Safari, u huwa taħdem fuq ospitanti lokali tiegħi. Hekk jien biss se tagħmel dan akbar. Iżda localhost: 5000 U għalhekk, id-dritt issa, dan kollu ma huwa, meta inti żżur il-websajt, prints out "Hello Garafina," li mhuwiex super utli, imma naħseb li huwa jibred li f'dan il-fajl ftit hawn, għandna web server running li huwa istampar out xi ħaġa. Allura, ejja fil-fatt tfittex lejn il-kodiċi għat-tieni, u din tinqasam ftit. Huwa d-daqs tajjeb għal kulħadd hawn? Allura, wieħed jittama, int kemmxejn komdu tuża Python. Jien wieħed jassumi li nistgħu nħarsu lejn l Python u tinqara permezz tiegħu. Jekk għandek xi mistoqsijiet dwar xejn, I tista 'wkoll tmur fuq dik. Allura l-ewwel linja hija, minn Garafina, aħna l-importazzjoni, Garafina bil-kapital "F" li huwa tip ta 'l- karatteristiċi ewlenin li għandek bżonn. Kull meta int bil-miktub fajl u l-użu Garafina, int tmur jridu li l-importazzjoni li, biss minħabba li għandu l-affarijiet kollha ewlenin. Il-ħaġa li jmiss li nagħmlu, hija aħna sejħa dan Garafina funzjoni, biss li toħloq oġġett app, u int dejjem tmur jridu jagħmlu dan. U mbagħad, jaqbeż l isfel għall- qiegħ malajr, din il-parti hawnhekk hija, "if_name _ ==" _ main_ "" li hija tip ta 'konvenzjoni Python. Allura dan se tesegwixxi biss jekk inti run dan il-fajl jużaw direttament Python. Imbagħad, nagħmlu sejħa app.run, li se attwalment tibda l-app għaddej. Allura, dak l-istruttura prinċipali li inti ser ikollok fi kwalunkwe applikazzjoni Garafina, huwa ser ikollok dan app = Garafina (_name_), u mbagħad app.run. Allura, iż-żewġ affarijiet li għandi fil hawn, huma nsejħu rotot. Allura, ejja nitkellmu dwar rotta ftit aktar. I ser imorru lura għall-slide. Allura l-aktar fundamentali kunċett Garafina hija rotta. U huwa l-idea li inti tassenja funzjonijiet Python indirizzi partikolari fuq il-paġna web tiegħek. Għalhekk, kull meta inti tixtieq biex tinħoloq rotta ġdida, tuża din @ app.route dekoratur funzjoni. Għalhekk, jekk inti ma jkunux familjari mal dekoraturi funzjoni fil Python, huwa dan il-kunċett li ihallik tieħu funzjoni u madwaru ma xi ħaġa oħra. Allura verament, dak li dan dekoratur ma, huwa li jieħu l-funzjoni taħtu, u żżid aktar informazzjoni lilha, imma dak Garafina attwalment ma naraw li dan iseħħ ma jkunx super kruċjali, imma dak li hu importanti, huwa li qabel l-rotta, inti tpoġġi din @ app.route, u mbagħad l-indirizz tar-rotta, sabiex il-slash huwa dak li aħna raw meta aħna biss tiftaħ il-paġna web. Allura dak l-homepage. Huwa biss ir-rotta mmejla. U allura inti għandek din il-funzjoni. L-isem tal-funzjoni jista 'jkun xi trid. Huwa ma jkollu neċessarjament għandhom x'jaqsmu ma 'l-rotta. U mbagħad, ikun x'ikun ritorn tal-funzjoni tal- il-funzjoni għandu jiġi lura bi string. U li string jista fihom HTML jew xejn, u li huwa attwalment dak li se tikseb lura għall-web browser tiegħek bħala HTML, u se jagħmel dan. Allura dan huwa l-istess kodiċi li kien mill-eżempju li jien biss dam, hekk meta aħna żjara mmejla, jitlob funzjoni Hello World, li jirritorna string, Hello Garafina, u li gets stampat fuq l-iskrin. Allura hemm eżempju ieħor, li huwa, meta inti żżur / hello, prints out Hello Word, li għandu attwalment tgħid, Hello World, imma ejja nippretendu li kien intenzjonali. Mela ejja pull li sa reali malajr. Mela jekk inti tmur biex localhost / hello, issa se print xi ħaġa oħra. Allura dan huwa biss eżempju ta 'malajr ta' kif inti tista 'toħloq żewġ rotot differenti. Allura, s'issa dan mhux super utli, ma jkunx hemm lott kollu li tista 'tagħmel, inti tista 'biss tagħmel dak kollu li ma li paġni HTML differenti, u meta inti żżur partikolari paġna hija biss tagħbijiet il-paġna. Mela ejja ara ftit aktar affarijiet utli li tista 'tagħmel. Allura, ħaġa waħda li inti jista 'jkollok ndunat fl-eżempju li I jinġibed up, hija li kelli app.run (debug = True). U iva, liema dan argument debug ma, huwa li meta inti tmexxi web server tiegħek, meta int fl-applikazzjoni tiegħek, jekk tibdel fajl, se awtomatikament rikarigu-server. U għalhekk inti ma attwalment ikollhom jistartja Python, li huwa super utli. I jista 'juri li. Let me pull up kodiċi tiegħi bl-typo fiha, u nippretendu li typo tqiegħed hemmhekk apposta għal skopijiet istruttivi. Mela ejja żid din lura fil. Allura issa jgħid Hello World. I se tiffranka. U jekk aħna iġbed lura up il terminal, inti ser jgħidu li huwa istartjar mill-ġdid, minħabba li sabet bidla, u hekk issa meta aħna Reload this Page, se jistampa l-ħaġa tajba. Allura debug huwa super utli għal dan. Ukoll, jekk għandek xi tip ta 'ħabta, hekk let me tagħmel dan crash applikazzjoni billi dan ma jirritornax string. Allura, ejja biss għandhom dan ritorn Xejn għal xi raġuni. U mbagħad meta I żjara dan paġna, hija biss se tiġrifa, iżda l-server ma biss tiġrifa, huwa attwalment jagħtik lura super utli traċċa ta 'dak kollu li marret ħażin. U x'hemm tassew sbieħ, huwa li fi kwalunkwe stadju ieħor f'dan traċċa lura, inti tista 'tiftaħ interattiv qoxra hawn, u tip ta 'jistampa dak varjabbli inti tixtieq li tagħti ħarsa lejn. U għalhekk debugging huwa verament utli għall jidhru dak li huwa għaddej ma tiegħek server, aktar milli biss jaraw xi ħaġa fil-PHP bħal 500 intern żball server, li huwa super inutli. Ħaġa waħda li jkun konxju ta ', huwa li jekk inti tpoġġi online app tiegħek hekk huwa viżibbli għall-pubbliku, inti qatt ma jridu jħallu modalità debug fuq, għaliex in-nies jistgħu attwalment użu li console li I urew li tesegwixxi kodiċi arbitrarju. Sabiex ikunu jistgħu jistampa bħal kull sigrieti kodiċijiet li għandek fil hemm, dawn tista 'tħares lejn eżattament kif website tiegħek qed jaħdem. Allura huwa verament utli għall-ittestjar, imma dejjem kun żgur li teħodha qabel inti tippubblika online xejn. Allura meta inti qed tuża xi ħaġa bħal PHP, hemm din l-idea li inti tista 'tgħaddi informazzjoni bejn paġni web billi l-informazzjoni attwalment fil-URL, li hija talba IKOLLOK, iżda fil Garafina, inti tista 'attwalment tagħmel xi ħaġa tip ta 'bħal dik, billi jkun hemm rotta li għandha varjabbli bħala parti minnu. Mela jekk inti tħares lejn din eżempju fuq l-iskrin hawn, għandna rotta li l- ("/ bonjour /"), u għalhekk, jekk inti żżur / Hello / xi ħaġa, xi ħaġa li se attwalment tikseb mimlija fil-varjabbli isem. U tinnota li l-funzjoni li jiġi ma dik ir-rotta għandu jieħu fil-parametru isem, b'tali mod li fil-fatt se jiksbu għadda fil-funzjoni. U allura, ladarba int ġewwa ta 'dik il-funzjoni, inti jista 'jikkura li bħal varjabbli Python normali, u hekk allura, se jistampa Hello, u se timla fl-isem bl-użu xi ifformattjar sekwenza. Allura biex iżżid partijiet varjabbli għal routing, tuża l-immarkar kategorija angolu. U b'għażla, tista 'tuża dak li sejjaħ konvertitur. U hekk, jekk inti tpoġġi dan annotazzjoni mal-kolon, inti tista 'tispeċifika li huwa l int, jew float, jew il-passaġġ, u se awtomatikament tikkonverti dak. Tista 'wkoll tagħmel l-konverżjoni fi ħdan il-funzjoni Python, biss bl-użu mitfugħa, imma xi kultant jekk inti tixtieq li tiżgura li huwa ta 'int, inti tista 'tpoġġi li regola ta 'konverżjoni fil hemmhekk. Mela ejja pull up eżempju ta 'xi regoli varjabbli. Allura hawnhekk, dan għandu l-istess karatteristiċi istruttura mal-importazzjoni minn Garafina Garafina, l-app = Garafina (_name_), u mbagħad huwa taħdem fl-aħħar. Għandna dawn iż-żewġ differenti rotot varjabbli hawn. U l-ewwel waħda, hija il-wieħed li I wera fil-slide, li kien dak hija biss tieħu fl-isem string u se jistampa Hello, Isem. U mbagħad, it-tieni wieħed juża l-konverżjoni. Allura dan awtomatikament se jaqilbu għal int, u mbagħad double-int, u jistampa li l-. U, aħna ma tagħmel xi tip tal-konverżjoni fi ħdanu minħabba Garafina jieħu ħsieb dan. Mela ejja nikseb dan running. Meta għandek Garafina applikazzjoni running, Inti tista 'tikkontrolla C minnha biex iwaqqaf il-server running. U mbagħad I ser jimxu l-varjabbli. Mela ejja mur localhost / bonjour / Ezra u Nisperaw, dan se ngħid bonjour lili. Allura huwa ħa f'ismi, fil-varjabbli rotta, u mimlija fil hawn. So I ser juru wkoll quick Eżempju ta 'l-irduppjar. Mela jekk inti tmur biex / doppju / 3, se jistampa 6. Allura dan ħadu kura ta ' il-konverżjoni għalina. Allura inti tista 'ukoll tagħmel dan ma float, u xi ħaġa speċjali, jekk għandek bżonn li jispeċifikaw xi ħaġa bħal triq, li tikri taċċetta slashes, iżda li m'għandux normalment tkun kwistjoni. S'issa aħna, ikunu għadhom kemm ġie lura kordi, li mhux interessanti ħafna. Nistgħu attwalment ritorn string HTML litterali. Allura fil-kodiċi nistgħu daħħal xi ħaġa bħall-b-tikketta li jagħmilha bold, imma ħafna l-ħin li inti ma attwalment jridu li jkun miktub HTML code fil-kodiċi Python tiegħek. Jiġrilha verament messy, u mhuwiex żmien tajjeb. Garafina jippermetti li tissepara l- HTML fis dak li sejjaħ l Template, u hekk jekk inti qed jaħsbu f'termini tal-mudell MVC li int familjari ma ', wieħed jittama, minn xogħol ma CS50 Finanzi ftit, inti tista 'taħseb l-fajls Python bħala aktar ta 'l-Kontrollur, fejn huma interazzjoni ma 'kwalunkwe mudell ta 'data inti jista' jkollok. U allura dawn qed jitolbu biex Views u li jgħaddi informazzjoni lil dak View timla l-informazzjoni fil HTML li hemm bżonn. U dak li nsejħu dawk Views huma Templates fil-klassi. Allura Garafina użi Python ieħor modulu li se awtomatikament jinstallaw meta inti jinstallaw Pip Garafina imsejħa Jinja, li ihallik żid dawn annotazzjonijiet għall-HTML li inti tara fuq l-iskrin, li tikri inti tpoġġi fl-affarijiet bħall conditionals, u loops fil-HTML. Hekk jidher ftit simili kif inti jistgħu jużaw PHP fi ħdan fajl HTML, iżda dan huwa biss meta l Garafina server jservi sa l-fajl HTML, se jimxu din il-magna templating u parse permezz ta 'dan u imla l-affarijiet in. Allura Garafina għandu funzjoni render_template li tista 'tara fil-qiegħ hawn. U hekk meta inti żżur din il-paġna, huwa jirrendi dan Template hello.html, u mbagħad timla din il-paġna HTML. Mela ejja biss run dan reali malajr, u ara dak li jidher qisu, u mbagħad I ser imorru permezz ta ' ftit f'aktar dettall. Allura, Templates tiegħek ser li jmorru fil-folder Templates. Hija se teżamina awtomatikament fil- Templates folder għal dak Template. Mela ejja tiftaħ dan up. So, I ser imexxu l-eżempju templating. Mela jekk mmur / bonjour / Ezra, dan ikollu din horrible, tag marquee obnoxious li nressaq fil. Sbieħ ħafna, dinamika ħafna. Jien fan kbir. Imma x'jiġri jekk I biss jmorru għall-/ bonjour? Allura hija biss jgħid Hello World. I ma tgħaddih isem, u mela fil awtomatikament. Mela ejja ara kif ma dan, u kif nistgħu jeħles ta 'dak marquee forsi. Allura hawnhekk, dan huwa tip ta ' eżempju interessanti ta ', jekk inti familjari mal-mod kif swiċċ dikjarazzjonijiet jaħdmu b'lingwa. Jgħidu dan huwa tip simili, dik it-tip ta 'waqgħa permezz, fejn inti fil-fatt mehmuża żewġ rotot differenti għall-istess funzjoni. Allura aħna nagħtu l / bonjour rotta u l / bonjour / isem rotta li Hello, u aħna jispeċifikaw using-- Python ihallik tispeċifika funzjoni default arguments-- hekk jekk ma jkollux isem, hekk jekk immorru ftit / hello, se awtomatikament filtru li isem huwa ugwali għal Xejn. Allura mbagħad, aħna jirrendu l Template bl-isem = isem, għalhekk se jgħaddu fil-parametru isem daqs dan il-parametru funzjoni isem, fil-Template. Li għadu ma tispjegax kif hija tiddeċiedi jekk jistampaw Hello World, jew jistampa l-isem tiegħi. Mela ejja fil-fatt tfittex fil-Template innifsu, u ara meta dak ikun ġej minn. Allura, fi ħdan dan Template, aħna fil-fatt ikollhom xi loġika kondizzjonali, li xi nies jargumentaw, inti fil-fatt m'għandux ikollhom ħafna ta 'kondizzjonali loġika fi ħdan Template tiegħek stess. Din għandha tkun aktar fil- Kontrollur, iżda għal dan l-eżempju huwa xi ħaġa pjuttost żgħir. Allura hawnhekk, aħna jiċċekkjaw, jekk l-isem, hekk jekk l-isem ma jkunx ugwali għal Xejn, jekk isem huwa attwalment għadda fi, allura aħna se jgħidu Hello, Isem mal- header u l-marquee, dan kollu HTML normali, inkella, aħna se jistampa Hello, World biss normalment. Allura ftit affarijiet li l-avviż hawn dwar kif inti format il-templating, hija li, dawn kollha dikjarazzjonijiet kondizzjonali, tip simili kif aħna PHP meta inti tixtieq li daħħal xi PHP, tuża l-inqas minn mistoqsija marka, huwa tip ta 'analogi hawn bl-{%. Allura hawnhekk, għandna kodiċi kondizzjonali tagħna. U mbagħad, meta inti fil-fatt tixtieq li litteralment jevalwaw xi ħaġa, u print it out għall-iskrin, inti tuża l-braces doppja. Allura hawn huma l-braces doppja, u allura aħna jagħti ismu, dan fi żmien dan, se tevalwa l-isem varjabbli, li kienet għaddiet mill- tirrendi funzjoni template, aktar milli biss istampar out, jekk aħna ħassar dawn, ikun biss jistampa l-kelma "name." Allura, dan huwa xi ħaġa li toqgħod attent għalihom. Allura ħaġa oħra li avviż huwa li, meta aħna tixtieq li tuża l funzjoni render_template, għandna attwalment ikollha timporta espliċitament mill Garafina. U dan huwa eżempju ta ' il-modularità tal Garafina, li inti ma għandekx li jimportaw affarijiet li inti m'għandekx bżonn. Tista 'biss ġġib fil- funzjonijiet inti fil-fatt do bżonn, li kultant sbieħ, sabiex inti ma għandhom ikollhom dawn il-funzjonijiet kollha seduta madwar li ma tkunx qed tużah, imma wkoll, jekk tinsa li inti bżonn li l-importazzjoni render_template, inti probabilment tikseb twissija li ser tavżak dwar dan. Allura, dan huwa templating. Allura, konna murija kif jagħmlu paġni web sempliċi, u żid ftit aktar loġika li dan, f'termini tal-routing varjabbli. Hija ihallik tagħmel affarijiet differenti bbażati fuq dak URL inti tmur, u wkoll mbagħad, jagħtu l-HTML ftit aktar sens f'termini ta 'kif inti tixtieq li tirrendi l-affarijiet. Inti ma għandekx ipoġġu l HTML tiegħek fil Python tiegħek, iżda għal pretty ħafna kull applikazzjoni web, int tmur jridu xi tip tal-mudell data assoċjata miegħu. U għalhekk tradizzjonalment, dan kieku tkun xi ħaġa bħal database SQL. U inti tista 'sempliċement jinteraġixxu direttament ma SQL. Python għandha, naħseb huwa msejjaħ. SQLite 3. Tista 'biss jimportaw SQLite 3 u tesegwixxi mistoqsijiet SQL direttament, imma jien ma nafx dwarek, imma I really ma simili, biss, kitba mistoqsijiet SQL. Hemm tendenza li jiksbu verament twil u kkumplikat. U għalhekk, xi ħaġa li I simili għall-użu huwa x'hemm magħrufa bħala ORM, li hija oġġett relazzjonali mapping. U l-punt ta ' oġġett relazzjonali mapping, hija li hemm żewġ differenti modi kif inti tista 'taħseb dwar databases. Allura l-eżempju li Professur Malan normalment użi fil-klassi, hija t-tabella Excel, fejn ikollok dawn ringieli u dawn il-kolonni, u li tassew utli għall kif ikun rappreżentat fil SQL u kif inti jinteraġixxu miegħu, iżda mod ieħor li huwa attwalment utli biex jaħsbu dwar dan kultant, huwa f'termini ta 'klassijiet u oġġetti. Allura minflok ta 'ħsieb ta 'kull tabella bħala li dan filliera li għandha ċerti informazzjoni, inti tista 'attwalment jaħsbu li bħala kull tabella hija ta 'klassi, u mbagħad kull każ ta 'l- klassi għandu ċerti proprjetajiet. Għalhekk, dan l-eżempju, il-każijiet ta ' il-klassi huma l-ringieli fit-tabella, u mbagħad kull proprjetà kieku tkun kolonna fit-tabella. Għalhekk, il-ORM li I simili għall-użu huwa msejjaħ peewee. Huwa tassew żgħar, tip simili Garafina. Naħseb li jmorru tajjeb flimkien, imma hemm ħafna ta 'orms oħra li tista 'tuża. A waħda aktar popolari huwa magħrufa bħala SQLAlchemy, u I ma tistax tiftakar għaliex I oriġinarjament għażlet peewee fuq SQLAlchemy, jew I se jgħidlek għaliex I naħsibx li huwa l-aħjar waħda, imma aħna qed biss ser tuża din waħda għaliex naf kif jużah. Allura, mistoqsija waħda hija, għaliex għandek jolqot tuża ORM, minflok sempliċiment direttament kitba mistoqsijiet SQL? U naħseb li l-aħjar każ, hija li inti ma attwalment għandek tikteb mistoqsijiet SQL. Huwa ħafna aktar faċli, kif jien ser nuruk, biex tagħmel affarijiet simili għażla, inserzjoni, tħassir, speċjalment il-ħolqien tabelli. Huwa ħafna aktar faċli li jiktbu struttura klassi, milli huwa li istruttura ta 'Oħloq Dikjarazzjoni Tabella, iżda ħaġa waħda li jkun konxju ta ', huwa li l ORM se tipprova almu tagħha ċifra barra dak l-aktar query SQL effikaċi jkun, imma xi kultant jiġrilha hija żbaljata. U speċjalment jekk int ħidma ma 'database big, inti tista 'avviż li query li għandha tkun qed taħdem malajr, effettivament ikun itwal. U jekk inti tfittex taħt il-barnuża lejn kif l-ORM qiegħda tinterpreta dan in SQL, dan jista 'jkun tagħmel xi ħaġa verament redikoli, biss għax tip ta ' gestured intenzjonijiet tiegħek ħażin. U, kien hemm żminijiet fejn I kellna li jwarrab dan, u biss tesegwixxi mistoqsijiet SQL tiegħi stess, just għaliex kien parsing b'mod stramba. Allura, hemm xi overhead, biss fil-mod li jikkompila tiegħek dikjarazzjonijiet isfel fil SQL. Allura, ejja nħarsu super malajr lejn eżempju sempliċi ta 'mudell tad-data li inti tista 'tuża. Allura, dan huwa kodiċi Python, u għalhekk il- ewwel ħaġa li trid tagħmel hu minn importazzjoni peewee *. Allura, b'differenza Garafina, fejn inti għandek kollha dawn il-moduli individwali, u inti tixtieq li l-importazzjoni Garafina, u jiktbu Template, u xi oħrajn li aħna ser tara wara, minn peewee, inti tista 'sempliċement importazzjoni kollox, għaliex dan huwa librerija pretty żgħar. Allura, l-ewwel ħaġa li trid tagħmel, hija fil-fatt joħolqu dan l-oġġett database. Allura, inti għandek db = SqliteDatabase, u allura l-isem ta 'database tiegħek. U dan se attwalment toħloq oġġett database li inti jistgħu jinteraġixxu ma ', bil peewee. U allura, aħna għandna l-attwali mudell li irridu noħolqu. Allura l-tabella irridu noħolqu. Allura, fi ħdan peewee, kull klassi jkollha tabella tagħha stess fi ħdan database tiegħek. Allura, kollha tal-klassijiet jirtu mill-bażi tal-mudell, u l-mudell kapital M hija xi ħaġa li iddefinit fl peewee. Allura, kollha ta 'mudelli tiegħek għandu jirtu kif għola Sopraklassi tagħhom, dawn għandhom jirtu mit- mudell, imma x'hemm verament jibred, hija li inti tista 'attwalment jkollhom tiegħek Mudelli jirtu minn xulxin. U ħafna mill-ħin, tiegħek mudelli ta 'data mhux bilfors jagħmlu ġerarkija wirt sabiħ, iżda żminijiet fejn jagħmlu dan, huwa verament sbieħ, għax għandek l-mudell inerenti minn xulxin. Allura, aħna definiti din il-klassi "student," li tiret mudell, u għandu tliet proprjetajiet. Hija għandha identità, li huwa a PrimaryKeyField, li hija xi ħaġa li l-provdut billi peewee, isem huwa CharField, u grad huwa IntegerField. Allura dan jista 'jew ma jistgħux ikunu kif CS50 fil-fatt ħażniet kollha gradi tal-istudenti. Mhuwiex, iżda dan huwa kif Jien kont nagħmel dan. U mbagħad hija għandha, fi żmien din il-klassi, u dan hija xi ħaġa li tista 'tagħmel ma' Python, inti jista 'jkollhom klassijiet nested. U din hija xi ħaġa li meħtieġa mill peewee. Allura, dan Meta klassi, inti għandek li jiġi speċifikat li d-database hija ugwali għall-oġġett li ħloqna hawn fuq. U dan jgħid dak il-fajl huwa din it-tabella fil-fatt se tkun inkluża fil. Allura din hija xi ħaġa li għandek li jagħmlu fil kollha ta 'mudelli tiegħek. Inti sempliċiment għandek tispeċifika f'din il-klassi Meta dik id-database hija ugwali għal db. Allura dak I normalment jagħmlu, jekk ikolli mazz ta 'mudelli differenti, hija li għandi bażi waħda mudell, li normalment I biss sejħa "bażi tal-mudell" li għandha l-klassi Meta, u hi tistipula l-database ugwali għal db. U allura kollha ta 'mudelli sussegwenti tiegħi se jirtu minn dik il-klassi bażi. U allura jien ma jkollhom għalfejn tinkwieta dwar it-twaqqif tal-klassi Meta. Allura, meta dan fil-fatt gets ikkumpilata l isfel fi stqarrija SQL, jidher qisu dan ħaġa diżgustanti isfel hawn, "Oħloq tabella numru sħiħ student ID, "Ikun x'ikun. U, naħseb li huwa iqsar, din il-mistoqsija SQL dritt hawn, imma jekk inti tħares lejn din il-klassi hawn inti tista 'tara eżattament x'inhu għaddej. Tista 'tara liema tipi ta' oqsma hemm, dak li qed jissejħu, u għalhekk, naħseb li tħares lejn dan il-kodiċi Python huwa ħafna aktar faċli biex jinqara minn tipprova tikteb din il-mistoqsija SQL. Għalhekk, sabiex effettivament tuża d-database, għandna biex jgħaqqdu lilu fil Python. So, I normalment jiktbu funzjoni msejħa initialize_db li ma żewġ affarijiet. Huwa jieħu fid-database oġġett db u jgħaqqad miegħu, li biss tiftaħ up taqsima għad-database. Jekk int biss running għalkemm websajt fuq magna lokali tiegħek, mhuwiex big deal super ninkwetaw dwar konnessjoni u jiskonnettjaw, imma jekk inti taħdem fuq websajt, inti jixtiequ jagħmlu ċert li, kull meta l-utent jgħaqqad miegħu, meta jagħlqu l il-websajt, huma skonnettja sabiex inti ma jkollhomx mazz ta 'nies konnessi għad-database tiegħek kollha f'daqqa. U mbagħad, meta inti jgħaqqdu l-database, inti tixtieq li sejħa db.create_tables, u jelenkaw il-mudelli għal dak li trid biex toħloq tabelli. So here, I biss jixtiequ joħolqu dan għal dan l-istudent. U mbagħad, x'inhu importanti, huwa li tispeċifika sikur = True aktar il-ħin. Allura dak li din id-dikjarazzjoni se tagħmel, huwa li toħloq tabelli għall- mudell student, iżda biss jekk dik it-tabella ma jkunx ġew diġà maħluqa. Dak hu l-jispeċifika sikuri. Għalhekk mhux se jissostitwixxu tabella eżistenti tiegħek, se joħloq biss ġdid tabella jekk ikun hemm mhux wieħed hemm. Allura, inti tista 'biss toħloq it-tabelli darba jużaw SQL. U mbagħad ikollhom dik is-seduta database hemm, u mbagħad qabbad lill kull darba, iżda huwa ġeneralment sbieħ biss biex jitqiegħdu f'din is-sejħa create_tables, sabiex, jekk inti qatt tħassar tiegħek meta database inti tmexxi web tiegħek app darb'oħra, se jirrikreaw dan. Allura, tagħmel ċert li siguri hija speċifikata biex ikunu vera, jew inti ser issib data tiegħek biss jkollna clobbered kull darba. U allura, inti tista 'biss sejħa initialize_db li jistabbilixxu konnessjoni, u joħolqu tabelli jekk meħtieġ. Allura, l-aktar ħaġa komuni li inti se tkun trid tagħmel, jew wieħed mill-aktar affarijiet komuni, huwa li attwalment daħħal affarijiet fis-database tiegħek. U għalhekk, iktar milli jkollu tikteb ddaħħal fil dikjarazzjoni kollha ta ' il-valuri speċifikati, inti tista 'attwalment sejħa funzjoni fuq il-klassi istudent. Allura, meta inti toħloq klassi li tiret minn mudell, dan ikollu din il toħloq metodu. Allura, inti tagħmel klassi name.create, u inti tispeċifika l-parametri li inti tixtieq li jgħaddu. Għalhekk, jekk I trid iżżid xi studenti għall-eżempju ktieb grad CS50 tagħna, I ser jitqiegħdu fis David, li għandu grad tajjeb ħafna, huwa għandu 95. U myself, li mhuwiex qed jagħmlu hekk ukoll fil CS50, I jkollhom 50. U għalhekk, il-ħaġa sbieħ dwar dak li dan joħloq funzjoni ma, huwa li dan jirritorna l-istanza, jew il- ringiela, li ħolqot fi ħdan il-mejda, u hekk allura int taħżen li fil- varjabbli, u jaħdmu magħha aktar tard. Tista 'tbiddel madwar, li I ser juru eżempju ta. Avviż li jien ma tispeċifika l-identità, għaliex peress li huwa l- PrimaryKeyField, se awtomatikament inkrement jekk inti ma jispeċifikawx dan. U, fil-fatt, inti probabilment ma għandhom jispeċifikawha, għax jista 'jkollok aċċidentalment clobber ID xi ħadd ieħor. U inti tixtieq li tagħmel ċert li huwa uniku. Allura, fil-fatt, l-aktar ħaġa komuni li trid tagħmel, huwa probabbilment tagħżel out tad-database ladarba inti għandhom ħafna ta 'informazzjoni fil hemmhekk. U hekk, jekk inti tixtieq li tikseb kollox, hekk l-ekwivalenti tal-istilla tagħżel minn studenti dikjarazzjoni, it ikun biss student.select. U li se jtik lura firxa kollha ta 'l-istudent oġġetti fiha li inti jtenni fuq trid. Tista 'tikseb l-affarijiet minnha. U ħafna mill-ħin, inti ma jridux biss li tagħmel tagħżel, inti fil-fatt tixtieq li tispeċifika xi ħaġa. U għalhekk, inti tista katina flimkien dawn is-sejħiet funzjoni, simili kif inti katina flimkien id-dikjarazzjonijiet fil SQL. Allura inti tista 'tagħmel student.select (). Fejn f'dan l-eżempju. U allura, inti tista ' tispeċifika l-kondizzjonijiet, biss bl-użu Python normali Booleans biex jiċċekkjaw affarijiet. Allura, f'dan il-każ, inti tixtieq li jillimitaw dak li qed tagħżel li, fejn student.grade hija ugwali għal 50, u student.name huwa ugwali għal Ezra, hekk li se tikseb biss me minnha. U avviż, wieħed verament ħaġa sottili hawnhekk hija li, jekk inti tixtieq li tispeċifika AN u / u jew jew / jew, fil Python, inti normalment tuża, Naħseb li l-kelma "u" fil-fatt, iżda hawnhekk inti tuża l-ampersand wieħed, li normalment operatur bitwise, imma f'dan il-każ speċjali, biss il-mod peewee ma dan, tuża l-uniku ampersand biex jispeċifikaw "u." Dik xi ħaġa li I ninfixlu ħafna, iżda dan ma jaqax up li ħafna fil-prattika. U allura, ladarba inti għandek kollha ta ' l-istudenti barra mill-database, ladarba inti għamlu int tagħżel u jilbsu tiegħek jew kwalunkwe, inti tista 'tuża loop foreach, bħad normali Python, ma 'kwalunkwe tip ta' iterator jew ma 'kwalunkwe tip ta' firxa. Allura inti tista 'tagħmel, għall-i fil student.select (). WHE ri (Student.grade <75), u għalhekk dan se jtenni fuq kull student fit-tabella li grad tkun inqas minn 75, li f'dan il-każ, għad biss lili. U allura inti tista 'tagħmel xi ħaġa ġewwa li loop, bħal tibgħatli email u tell me li fil-fatt jduru Settijiet Problema tiegħi. Allura, Ħaġa oħra li tista tagħmel, huwa verament faċli li taġġorna ringieli fi ħdan il-mejda. Allura, ftakar lura hawn, tiegħek I meta jiddaħħal, I ħa l-valur li kien lura mill student.create, u I assenjati lill isem imsejħa Ezra. U hekk issa, inti tista 'tibdel l- Valuri fi ħdan din l-istanza, bħall inti a klassi normali fil Python. Allura inti tista 'tistabbilixxi ezra.grade = 95 u li se taġġorna l-kopja lokali, imma jekk inti fil-fatt tixtieq li jimpenjaw li l-bidla għal database, inti għandek sejħa ezra.save, sabiex inti imsejħa l-metodu .save fuq l-istanza. U hekk issa, I inbidlu b'suċċess grad tiegħi stess fid-database. Iva, allura ejja ngħidu li jien nikseb maqbuda jinbidlu grad tiegħi fid-database. Professur Malan huwa probabbilment se li tixtieq li tħassar lili mill-klassi, u għalhekk inti tista 'sejħa-.delete Metodu eżempju biss fuq li ħaġa. Allura, jekk int riedu li jmorru lura fis dan loop hawn, u fil-fatt, minflok ta 'jibgħat emails kollha mill-istudenti li grad tkun inqas minn 75, inti riedu iħassruhom, fi ħdan dan loop inti tista sejħa s.delete eżempju. U l-ħafna aħħar ħaġa li trid tagħmel, huwa kull meta inti jistabbilixxu rabta, u qed isir bil-ħidma tiegħek, inti tixtieq li sejħa db.close, fejn db hija li database joġġezzjonaw li kellna qabel. U inti tixtieq li tagħmel ċert li kollox gets magħluqa mill. Kessaħ. Allura issa, għandi eżempju applikazzjoni. Stajt tip ta 'kollox qabel magħmula biss hekk li mhux se jkun hemm xi kodifikazzjoni live żbalji, iżda nistgħu jimxu permezz dan u tara kif inti tpoġġi Garafina u peewee flimkien, u jagħmlu app sempliċi. I call it arrest CS50, u huwa tip ta 'pjattaforma blog sempliċi. Allura, l-ewwel, I ser run u juru dak li jidher qisu, u mbagħad nistgħu nħarsu aktar fil-kodiċi. Okay, so ejja biss run dan. Kessaħ, jien ser jagħmlu dan ftit iżgħar. Mhuwiex pretty ħafna, sempliċement minħabba I ma jagħmlu ħafna ta 'CSS, iżda dak li tagħmel hi, hija għandha din id-database ta 'postijiet blog, u din tmur kollha permezz ta ' minnhom, u se jesponihom fuq il-paġna sabiex mill-aktar riċenti. U hekk dawn huma biss ftit postijiet I kien salva fid-database. Mela jekk irridu noħolqu ġdid post, nistgħu mmorru żid Post Ġdida, u nistgħu jidħol it-titolu tal- post, hekk xi ħaġa simili, seminar CS50. Ara naqra, verament jgawdu l-seminar. Kessaħ. Imbagħad inti istampa posta, u se idawwru inti lura għall-home page, u mbagħad tkun taf tara li l-aħħar post kien miżjud. U aħna xorta jkollhom dawk kollha hemmhekk. Allura issa, ejja pass permezz kollha tal- kodiċi u tara kif dan huwa implimentat. So, I think-ewwel ħaġa li ejja tagħti ħarsa lejn, huwa attwalment il-mudelli. A lott tal-ħin, meta int tfassil xi ħaġa, inti tixtieq li jaħsbu l-ewwel dwar kif int ser jirrapreżenta data tiegħek, u imbagħad jiddisinjawhom affarijiet madwar li, sabiex kollox jagħmel sens. U li huwa attwalment kif I ma kien I meta kienet qed tagħmel dan, I poġġa bilqiegħda u ħsibt, liema do Irrid fil-post. Allura, hawn, aħna għandna l-istess struttura li kien I isemmi qabel, fejn nagħmlu db = Sqldatabase ("posts.db"). Fir-realtà, inti probabilment ma tridx għall-kodiċi hard fid-databases isem tiegħek. Dan għandu probabbilment ikunu parametru li maħżun x'imkien, forsi fil-fajl konfigurazzjoni, iżda fil eżempju żgħir bħal dan, huwa okay għall-kodiċi iebes li fil. Allura issa, aħna għandna din il-klassi Post, li tiret mill-bażi tal-mudell. U għandu, għal darb'oħra, il- ID = PrimaryKeyField. Fil-fatt, jekk inti ma jispeċifikawx, jekk I attwalment ħassar dan, allura peewee aħna se jieħdu ħsieb ta ' awtomatikament ħolqien qasam ID, u se awtomatikament jagħmilha PrimaryKey, li Naħseb huwa tassew sbieħ, għaliex normalment, li xi ħaġa inti tixtieq li jkollok, imma I simili li tqiegħed fil speċifikament, biss hekk I ftakar li huwa fil hemmhekk. Imma jekk inti ma jispeċifikawx li, li se jkun hemm awtomatikament. Mela allura, I jkollhom data li huwa DateTimeField, u kollha f'dawn l-oqsma differenti, jekk inti tħares lejn id-dokumentazzjoni peewee, dan ser jagħtuk lista tad-diversi tipi ta 'oqsma li tista' tuża. Għall-parti l-kbira, huwa analoga għal dak li inti tara fil SQL. Allura hemm CharField, a VarCharFields, TextFields, li huma għal żmien twil testi, bħal blog post potenzjalment, DateTimeFields, DoubleFields, FloatFields, affarijiet kollha bħal dik. U inti tista 'tgħaddi fil argumenti l-oħra lilha, li jiena ma speċifikatx hawn. Say, per eżempju, inti ma tridx li jippermettu żewġ postijiet li għandhom l-istess titolu, inti tista 'tispeċifika xi ħaġa bħal unika = Veru, u li jinsab biss parametru extra biex qasam li meta jikkompila l-isfel fil-SQL, se tispeċifika li għandu jkun uniku. Tista 'wkoll tispeċifika xi ħaġa bħal mhux null u l-affarijiet l-oħra inti normalment tagħmel fil SQL. Allura, dan huwa pjuttost sempliċi mudell li għandu l--data. Avviż hawnhekk, fi ħdan il-DateTimeField, I speċifikat liema l default. I speċifikat li din tkun datetime.datetime.now, minħabba l-mod li dan gets evalwati, fil-fatt tevalwa l datetime.now meta jiġrilha mdaħħla fid-database. Naħseb li, I d jkollhom li doppju jiċċekkja dan, imma jekk inti għamilt xi ħaġa bħal din, imbagħad ikun fil-fatt tevalwa li ladarba, u allura l-DateTime ikun dejjem l-istess. Għalhekk, biss jekk inti qed tagħmel xi ħaġa ma datetimes, double check li huwa jevalwa meta attwalment gets mdaħħla, jew inkella inti tista 'titħawwad. It-titolu huwa biss CharField, li hemm huma argumenti aktar tista 'tgħaddi u jispeċifikaw eżattament kemm inti tixtieq li tkun, iżda hawnhekk, hija ma verament kwistjoni. U Test se tkun it-test tal-post kollu, u li għaddej biex tkun TextField sempliċiment għaliex inti tixtieq biex ikun jista 'jkun string pretty twil. Imbagħad għandna dan Meta subclass li ftit jispeċifika li rridu d-database fejn dan huwa attwalment fetaħ fis ikun is-suġġett db li għandna hawnhekk. U l-aħħar ħaġa li għandna hawnhekk, huwa biss din il-funzjoni li aħna qed tmur biex użu mill app prinċipali tagħna initialize-database li jgħaqqdu l dan, u mbagħad biex jinħolqu l-tabella Post. Issa, ejja nħarsu lejn l-app prinċipali innifsu. Allura dan huwa wieħed pjuttost ftit itwal minn dawk li konna rajna qabel, iżda nisperaw mhux wisq ħażina. Allura, let me testendi dan out. Okay. Allura, avviż u l-quċċata I importat mazz sħiħ ta 'affarijiet oħra minn Garafina li għandna ma verament osservata qabel. U wieħed jittama, nistgħu jgħaddu kull waħda minn dawn wieħed wieħed u jitkellmu ftit aktar dwar minnhom, magħżula bl-eżempju. Allura, aħna għandna l-Garafina, u l render_template, li konna rajna qabel, din it-talba oġġett, li se toħroġ meta nħarsu lejn kif il-formola li I kien juri attwalment xogħlijiet. Idawwru, li ihallik idawwru lura mill-Oħloq New Post Lura għall-paġna ewlenija oriġinali, u mbagħad URL, li hija xi ħaġa li ihallik figura fejn fuq il- website paġna partikolari hija. Allura mbagħad, il-li jmiss ħaġa I do, huwa I-importazzjoni l-informazzjoni kollha mill-mudelli fajls li konna biss tħares lejn. U, yeah. Allura, xi ħaġa oħra ġdida li taqa ' up meta inti qed jittrattaw ma ', speċjalment databases, hija li inti tista 'tispeċifika funzjoni li gets jissejħu aktar qabel kull talba, u l-funzjoni li gets imsejħa wara kull talba, jużaw dan funzjoni dekoratur app.before talba. U hekk dan se tikseb eżegwit kull fejn din il-funzjoni huwa. Dan ma għandhom ikunu jissejħu aktar qabel talba, iżda ġeneralment dan huwa xi ħaġa sensibbli li hija sejħa. Tista 'tispeċifika x'ikun funzjoni inti tixtieq li tikseb hemm imsejħa, so I speċifikat din initialize_db funzjoni li kellna lura fil-Mudelli fajl, hekk qabel kull talba, inti tixtieq li jgħaqqdu l-database. Hemm żewġ differenti modi kif inti tista 'tagħmel dan. Tista 'tagħmelapp., I jemmnu huwa after_request. U d-differenza bejn after_request u teardown_request, hija li after_request se jiġri biss jekk fil-fatt it-talba kinitx valida. U għalhekk, biss jekk il- talba kienet ta 'suċċess, jekk xejn marret ħażin, iżda teardown_request jiġri fil-każ ta 'suċċess talba, jew fil-każ ta 'żball. Allura, normalment, inti tixtieq għall-użu teardown_request, jekk inti tixtieq li tagħmel xi ħaġa, speċjalment differenti fil-każ ta 'żball. Iżda biss għall-għeluq tal-database, jekk tirbaħ jew jekk tonqos, nagħmlu inti tixtieq li jiskonnettja mid-database. Allura huwa msejjaħ, db.close fuq l-oġġett db. Avviż li l-teardown_request jieħu fil eċċezzjoni. Allura inti tista 'tivverifika jekk kienx hemm fil-fatt żball meta kien għeluq, iżda hawnhekk, wieħed jittama, hemm huma mhux lott kollu ta 'żbalji, hekk aħna qed biss tip ta 'jinjora dak. Okay, u l-bqija ta 'dan ma jkunx wisq ħażina. Allura, meta immorru l-home page, aħna mogħtija dan Template home.html li se jiftħu. Pass fit ikun fil-post daqs, u dak li dan ma huwa, ftakar għandna din il-kariga mudell, hekk aħna tagħżel l-postijiet, u mbagħad ħaġa oħra li tista 'tagħmel, inti tista 'tispeċifika l-klawsola FEJN, inti tista 'tispeċifika l- jordna, u hekk aħna jieħdu kollha tal-postijiet li nikseb magħżula, u mbagħad aħna tordna mill- post.date.descending. U li ser tispeċifika, meta huma attwalment toħroġ, l-aktar wieħed reċenti se jkun ħafna ewwel wieħed. U allura, aħna jgħaddu dan in l-template home.html, so ejja fil-fatt jiftħu li Template tassew mgħaġġla, u tagħti ħarsa lejn kif dan ta 'ħidma. U dan mhux HTML kbira, iżda wieħed jittama, nistgħu niffukaw fuq il-Python. Allura hemm link għall-Żid New Post, u għalhekk dan jispeċifika r-rotta fi ħdan il Garafina li aħna jiddefinixxu, li huwa dritt hawn. Dan hija r-rotta kariga ġdida, u aħna jispeċifikaw li sa hawn. U hekk dan huwa rabta li mbagħad se jmorru li dik ir-rotta fil-server Garafina. Il-ħaġa aktar interessanti huwa dan għal loop hawn. Allura aħna jispeċifikaw li din parametru post li għaddiet fil- funzjoni render_template, għal kull post fil-post tal oġġett li gets għadda in. Aħna rridu li jistampa it-titolu post, fil H1, u mbagħad hawn taħt, irridu li jistampa it-test post fi paragrafu. U hawn, nistgħu attwalment sejħa funzjoni Python, hekk nistgħu sejħa strftime, ST-RF-time, u inti tista 'tgħaddi fil-format sekwenza li inti tixtieq li jistampaw l-informazzjoni fir. Allura huwa huwa pjuttost sbieħ li inti tista attwalment sejħa din il-funzjoni Python minn ġewwa hawn. Inti ma għandekx tagħmel l-ifformattjar fuq in-naħa kontrollur, għaliex verament, ifformattjar data hija xi ħaġa li inti tixtieq li jittrattaw fi ħdan il-View. U dawn kollha mija affarijiet mhux super importanti. Jekk inti tfittex l-dokumentazzjoni għall-funzjoni strftime fil Python, tispeċifika dawn kollha affarijiet, iżda li kif, meta aħna kienu qed ifittxu fil-home page hawn, dan formati dan ma 'sbieħ data, u jispeċifika AM jew PM, imma normalment, jekk aħna ma kellhomx din hawn, inti probabilment tikseb xi żibel data li ma ħarsa tajba ħafna. U allura aħna jispeċifikaw l- post.text, u I jistgħu poġġew koppja ta ' linja pawżi hawn, just li jqajjem xi spazji bejn kull post. So, I think l-aktar importanti ħaġa f'dan l-eżempju, hija li inti tista 'tuża dan għal loop. U dan huwa analogu għal affarijiet li tista 'tagħmel fil-PHP. Tista 'jtenni permezz, kollox gets għadda fi, u għalhekk, minflok ma jkollhom jagħmlu kopja / paste, kopja / paste l-HTML, inti biss għandek tikteb darba, u mbagħad inti tista 'jtenni fuq kollha tal-postijiet. U din hija xi ħaġa komuni li inti tixtieq li tagħmel, meta ikollok ħafna ta 'data, hija li għal kollox fid-data tiegħek, inti tixtieq li tagħmel xi ħaġa simili. U mbagħad, biss ftakar, li meta inti tixtieq li jistampaw xi ħaġa espliċitu fil-HTML, tuża l braces doppja hawn, iżda mbagħad meta inti tixtieq li tispeċifika xi informazzjoni dwar il-kundizzjoni, jew dwar għall loop, inti uża l-parentesi fil-mija. Allura, tmur lura għall-Python kodiċi, sabiex jispjega dak li qed jiġri fil-prinċipali rotta, meta aħna jmorru hemm, hija biss juri l- postijiet, iżda allura l-kwistjoni huwa, kif nistgħu fil-fatt tikseb postijiet fid-database, li huwa ftit aktar interessanti. Allura, meta inti ikklikkja fuq il-New Link Post, li rajna hawn, redirects inti din il-formola. U dan huwa biss sejħa sempliċi għall- funzjoni render_template, li mbagħad jgħaddi fil-post ġdid fil-forma HTML. Mela ejja tagħti ħarsa lejn dak. Allura dan huwa wieħed pjuttost sempliċi. Hija għandha forma HTML sempliċi, li se tħares ftit familjari, ibbażata fuq il-formoli fil CS50 Finanzi. U hekk, aħna jispeċifikaw hawn, l-azzjoni. U hawn, jekk inti qed jaħdmu ma PHP, normalment, huwa tkun xi ħaġa simili, create.PHP, iżda hawnhekk aħna fil-fatt tispeċifika rotta fi ħdan il-server Garafina. U għalhekk, tikkorrispondi din ir-rotta għall-ħolqien ta rotta li għandna hawnhekk, li aħna ser jmorru fil fit-tieni. U hekk, aħna jispeċifikaw li huwa metodu post, għaliex irridu li tibgħat din il-formola tad-data, u normalment meta int tibgħat data minn forma, inti tista 'tixtieq li tuża talba posta, biss sabiex inti ma jispiċċawx ma 'dan big, URL dens. Iżda int tista 'wkoll tuża talba IKOLLOK, u tgħaddih ma routing varjabbli, iżda għal forom, huwa sabiħ għal talba kariga hawn. U hekk allura, bħad inti kont nagħmel ma HTML u PHP, inti tista 'tispeċifika dawn l-inputs test, u inti tista 'tispeċifika l-isem tagħhom, u dak l-isem li se tikseb għadda fil-rikjesta oġġett fi ħdan Garafina. U allura għandna Issottometti buttuna li tgħid Post. U hawn, Post huwa l-isem tal- buttuna, għaliex dan huwa blog post, iżda hawnhekk, post huwa l-metodu talba. Għalhekk dawn huma l-istess kelma imma attwalment mhux relatati. Yeah Li jmorru lura għall-kodiċi Python, meta aħna imsejjaħ il-metodu joħolqu, Avviż hawnhekk li inti tista attwalment tispeċifika fi ħdan ir-rotta il-metodi talba li inti tixtieq li taċċetta, u hekk hawn, I jispeċifikaw li I biss tixtieq li jaċċettaw metodu Post. Għalhekk, jekk I attwalment jippruvaw jżuru il-paġna direttament, li qed tuża talba IKOLLOK, se tell me "Metodu mhux permess." U għalhekk, inti għandek paġni, tip simili dan toħloq il-paġna, li jien biss verament użu bħala mod għall il-formola biex tikseb sottomessa, inti tista 'tispeċifika li inti ma li n-nies ikunu jistgħu jmorru hemm direttament permezz ta 'talba IKOLLOK, jew jekk inti ma tridx, għal xi raġuni, talba Post, inti tista 'biss tispeċifika IKOLLOK hawn, iżda f'dan l-eżempju, aħna biss tixtieq talba Post li jmorru barra. Allura, meta create_post tissejjaħ, meta aħna żjara li permezz t-talba Post, kull meta inti tmur lil partikolari rotta, hemm din it-talba oġġett, u kellna l-importazzjoni talbiet fil-quċċata ħafna, imma hemm din it-talba oġġett li gets għadda fi, u inti tista 'aċċess għad-data forma, li se tikseb awtomatikament mimlija meta inti tibgħat talba minn forma. U mbagħad, dak li naħseb huwa verament jibred, huwa li l-formola oġġett li tikseb għadda fil, huwa biss dizzjunarju Python li fih, jekk inti access-- hekk hawn, let me pull up l-HTML li jmiss lilu, biss sabiex inti tista 'jkollha dak bħala referenza, iva, so l-ismijiet li aħna jispeċifikaw hawn għall-oqsma differenti, so it-titolu u t-test, aħna allura biss użu dawk minn hawn kif indiċijiet fl-dejta formola. Allura dak super konvenjenti. Mela allura nitolbu post.create, li se toħloq u daħħal awtomatikament dan l-oġġett kariga ġdida fid-database. U jien naħseb li din toħloq il-funzjoni hawnhekk huwa eżempju verament jibred ta 'kif qawwija Garafina qed taħdem u ma 'dan, għaliex jekk inti kienu qed jagħmlu xi ħaġa fil-PHP, inti jista 'jkollok jagħmlu ħafna ta 'validazzjoni, inti għandek mbagħad jistabbilixxu rabta database, inti għandek mbagħad tesegwixxi l-mistoqsija SQL, iżda hawnhekk aħna biss għandhom dan sbieħ post.create, li nistgħu mbagħad biss jiksbu l-informazzjoni out tat-talba oġġett, u mbagħad tgħaddiha fi ġdid post li aħna qed jinħolqu. U mbagħad, l-aħħar ħafna ħaġa li rridu nagħmlu, huwa biex idawwru l- utent lura lill-dar. U hekk aħna jużaw dan Garafina idawwru funzjoni. U xi ħaġa li aħna ma kinux jidhru qabel, kienet din il-funzjoni URL. Allura l-URL għall-funzjoni tikri inti tgħaddi fil-fatt l-isem ta 'funzjoni fil-kodiċi Python tiegħek, minflok ir-rotta partikolari li huwa fuq. So I jista 'jkollhom daqstant faċilment dirottati utent li mmejla, li tibgħatha lura d-dar, iżda tuża l-URL għall-funzjoni huwa sabiħ, għaliex jekk inti tbiddel il- post fejn l-affarijiet huma, so ejja ngħidu li nibdel l- home li tkun fil / home minflok, dan xorta mbagħad jirritornaw / home, għaliex fil-fatt tmur u jistenna sa l-isem tal-funzjoni, u se jagħtik lura l-URL għal dan. Allura, tip ta 'fuq il- suppożizzjoni li int aktar probabbli li tinbidel fejn l-affarijiet huma, minn-ismijiet tal-funzjonijiet. Tista 'tuża dan verament URL sbieħ għall-funzjoni. U ħaġa waħda li jkun konxju ta li huwa ftit delikata, hija li inti taħseb li inti tista 'biss sejħa idawwru fuq il-URL għall-, imma attwalment kollha mir-rotot għandhom li jirritornaw xi tip ta 'test u HTML, sabiex inti attwalment ikollhom jirritorna l-sejħa direzzjoni ġdida. Inkella, int ser tingħata xi ħaġa invalidu dwar li ma jirritornaw string, minħabba dawn kollha jkollhom jirritornaw l-HTML inti fil-fatt tixtieq li jagħti. U hekk, meta inti sejħa-direzzjoni ġdida, redirects inti l-paġna, iżda fil-fatt jirritorna l-HTML għandek bżonn biex tesegwixxi dik direzzjoni ġdida. Mur lura għall-home page. Allura aħna għandna dawn iż-żewġ fehmiet differenti. Għandna l-ħsieb dar. Or, I raden I għandha tgħid templates. Għandna dawn iż-żewġ mudelli, l-mudell dar li displays kollha ta 'postijiet tagħna, u allura għandna dan il-ħaġa ad, u meta inti ikklikkja l-post, din tmur għal rotta ġdida fi ħdan il-Garafina, iżda dik ir-rotta ma neċessarjament jkollhom template korrispondenti. Inti ma għandekx biex tara xejn, imma inti xorta tista jkollhom dan ix-xogħol għaddej wara l-kwinti. U allura ikollok dirottati Lura għall-home page. U definittivament, huwa faċli li taħdem f'xi CSS nicer fil-mudell u jagħmlu dan tfittex ħafna nicer, iżda kollha tal-loġika ewlenija hemm fil-Python. Kwalunkwe mistoqsijiet dwar dan leżempju? Naf li hemm ħafna ta ' affarijiet differenti għaddejjin hemmhekk, ħafna affarijiet aħna ma kinux jidhru qabel, iżda bħal kull ħaġa. Yeah. UDJENZA 1: Do għandek tagħmel xejn speċjali li Scrub l-informazzjoni li l- li wasal minn fuq formola? I ndunat inti biss qal "joħolqu," Ezra ZIGMOND: Yeah, b'tali mod li fil-fatt, li l-punt verament tajba. Għalhekk il-kwistjoni kienet, do you bżonn li jiċċekkja u kun żgur li d-data tkun valida, u tagħmel xi tip ta 'scrubbing biex tiżgura li jkun validu, għaliex kif tistgħu taraw hawn, Jien ma tagħmel dan. Mela ejja ara dak li jiġri jekk I post xi ħaġa vojta. Allura, dan ser attwalment biss tagħmel post vojt u imla l-DateTime. Allura fir-realtà, inti probabilment trid tagħmel xi ħaġa simili, forsi tispeċifika jekk it-titolu huwa daqs il string vojta, allura ma tagħmel dan. Or, biss tagħmel dan jekk it-titolu huwa mhux ugwali għall-string vojta. Għalhekk ma attwalment awtomatikament jieħdu ħsieb il-iscrubbing għalik, sabiex inti xorta jkollok bżonn biex tagħmel dan. Yeah, mistoqsija tajba. UDJENZA 2: Does hija Scrub għall-injezzjoni segwiment? Taf li? Ezra ZIGMOND: Nisperaw, peewee ma dan. Naħseb ċertament ikun pretty librerija ħażin jekk ma tagħmel dan. I do not know eżattament. I d jkollhom li tħares lejn l- mistoqsija li hija ġġenerat. Naħseb li, jekk I ittajpjat fil- blog post li tip ta 'ħares bħal attakk injezzjoni SQL, xi ħaġa bħal din, jekk dan huwa bħal qasam password jew xi ħaġa, inti tista 'tagħmel xi ħaġa bħal din. Naħseb li xorta se tikseb litteralment stazzjonati, imma naħseb li peewee ma tagħmel xi tip ta 'scrubbing tad-data qabel ma attwalment tesegwixxi dan. UDJENZA 1: Dak il-kamp test huwa maħsuba biex jieħdu test sempliċi, id-dritt? Ezra ZIGMOND: Yeah, huwa. Yeah. So I think li kollha ta 'l-, għalhekk dan huwa imġieba korretta, li se tagħmel dan, imma naħseb li peewee nisperaw ma tagħmel xi tip ta 'protezzjoni fuq il-għan tagħhom. U jekk int riedu double check li, hemm huma modi meta inti jiġġeneraw mistoqsija. sabiex inti ma għandekx esegwit direttament. I d jkollhom jieħdu tħares lejn dokumentazzjoni, imma int tista 'attwalment tara l- SQL li qed jiġġenera, u tagħti ħarsa lejn dan, u jagħmlu żgur li hija jaħrab affarijiet. Raġuni oħra għaliex inti tista tixtieq li tħares lejn l-SQL li peewee huwa outputting, huwa jekk affarijiet jidhru li jkunu għaddejjin verament bil-mod, inti tista 'tagħti ħarsa u ara dak li huwa fil-fatt tagħmel, għaliex dan huwa xi kultant faċli biex iżżid aċċidentalment fil, il-mod inti tikteb, inti tista 'aċċidentalment jkollhom dan tagħżel l-database kollu ewwel, u mbagħad jagħmlu xi operazzjoni tip fuq li, meta int verament maħsuba biex tagħżel subsett. U hekk, jekk l-affarijiet ma jkunux pjuttost jmorru dritt, huwa tajjeb li tagħti ħarsa fuq talba Li l-fatt jkollna iġġenerat. Yeah. UDJENZA 2: Meta inti l-ewwel beda, inti tpoġġi fil-port bħala 5000. Ezra ZIGMOND: Yeah. UDJENZA 2: L-default ma peewee, jew hija li xi ħaġa inti tista 'tibdel? Ezra ZIGMOND: Iva, sabiex il- port huwa default ma Garafina. Jekk inti tmexxi mingħajr li tispeċifika xejn, se awtomatikament tagħmel dan. Nemmen, I d jkollhom li doppju jiċċekkja dan, imma int tista 'tispeċifika li fil-app.run, Naħseb li inti tista 'tagħmel xi ħaġa simili, port = 8080. Ejjew nagħtu li jipprova reali malajr. Yeah, sabiex inti tista 'sempliċement tispeċifika port = 8080, u se jimxu hemmhekk, li naħseb, jekk int riedu run fuq il-IDE, I ma ppruvaw dan out, imma naħseb li jekk inti dam fuq il-port 8080, youd probabilment tkun kapaċi aċċess għall-server, bħad inti kienu għall-websajt. Yeah, imma hija faċli għall-bidla li jekk inti xi tip simili port forwarding affarijiet li għandek bżonn tagħmel. Kwalunkwe mistoqsijiet oħra? Yeah? UDJENZA 1: So, I raw fil tiegħek mudelli li, kif inti msemmija, għandek tispeċifika l- database għal kull oġġett. Do you jiġri li tkun taf, ma li jagħmilha verament faċli jekk inti jkollhom lottijiet ta 'databases SQLite li inti tixtieq li tuża għal wieħed app web wieħed, li inti tista 'sempliċement tispeċifika mazz dawk ta 'differenti fil-mudell tiegħek? Ezra ZIGMOND: Yeah, let me miftuħa li sa reali malajr. Allura, inti qed tgħid, jekk inti tixtieq li jkollok mazz ta 'xi ħaġa differenti, forsi simili u l-istudenti, għal xi raġuni, xi ħaġa bħal dik? Yeah, so I jaħsbu li inti xorta, kull mudell jkollhom għad għandhom ftit database waħda assenjat lilha, imma jekk int riedu li jkollhom mudelli differenti li jkunu oġġetti database differenti assenjati lilha, inti tista 'definittivament tagħmel dan. Għalhekk, jekk I ħolqot ġdida, xi ħaġa bħal din, u issa dan huwa student li jistenna oddly bħal blog post, I jistgħu jispeċifikaw li l- database hija ugwali għal db_2 hawn. Allura, naħseb li l- mod prinċipali inti tista 'tagħmel dan. Kessaħ. Kwalunkwe mistoqsijiet oħra? Hekk biss biex jintemm sa ftit bit, hawn huma xi riżorsi, u dawn slides se jkunu stazzjonati online sabiex inti tista 'attwalment tikseb għal dawn ir-rabtiet. Ir-riżorsi aħjar huma verament id-dokumentazzjoni għall Garafina u peewee infushom. Huma qed miktub verament tajjeb, I think. Allura, il-websajt Garafina hija hawnhekk, u dawn ikollhom Quickstart tutorja li se jimxu permezz simili affarijiet li dak I mixi permezz, imma jekk inti tixtieq xi tip ta 'reviżjoni mill-affarijiet li I marru fuq, jew int ħsibt li I spjegat xi ħaġa b'mod konfużjoni, dawn ser ikollhom eżempji simili hemmhekk. Peewee għandu dokumentazzjoni, u dawn ikollhom Quickstart tutorja li tmur fuq il-parametri ewlenin li inti tixtieq li tuża. Allura, l-affarijiet I tkellmu dwar ma l-uniku, u jispeċifikaw nuqqasijiet, t-tipi differenti ta 'oqsma li inti tista 'tuża, dawk kollha ikun hemm. Ukoll, jekk għandek mistoqsijiet dwar peewee, u inti post minnhom fuq stackoverflow, il-Guy li għamel peewee attwalment tkompli u tweġibiet dawk kultant. Jekk għandek xi mistoqsija, wieħed jittama hu ser tkun kapaċi twieġeb għaliha, għaliex huwa kiteb il-ħaġa sħiħa. Naħseb li dak kollu Jien ridt li tkopri. Grazzi għall ġejjin out.