[Mūzikas atskaņošanai] EZRA ZIGMOND: Sveiki, visiem. Paldies par iznāks šodien. Šis seminārs ir "Python Web Apps ar kolbā. " Tātad, es esmu gatavojas runāt mazliet par to, kāpēc jūs varētu vēlēties izmantot kolbā, lai padarītu tīmekļa lietotnes ar Python, pretstatā uz dažām citām sistēmām, kas pastāv, piemēram, Django, kas ir visvairāk labi zināms. Apakšvirsraksts ir "un peewee ", kas ir kaut kas mēs runāsim par to, kā mijiedarboties ar SQL datu bāzēm. Tas padara to patiešām jauki. Tātad, šeit ir tikai ātrs nolietota par to, ko es gribu iet pāri. Tātad, pirmkārt, tikai viens slaids kas būs QUICKSTART, kas ir, kā iegūt visu izveidot datorā. Es esmu būs demonstrējot šo par manu vietējo Mac mašīna, tikai tāpēc, ka tas ir, ja es esmu darījis pirms, es esmu visērtāk ar to, bet tas noteikti iespējams uz CD50 IDE. Tātad, pēc tam, es gribu ieviest ko kolba ir, un pārliecināt, kāpēc jums vajadzētu izmantot to pirmajā vietā. Tad, es došu ātrs piemērs tam, ko jums var darīt kolbā, ātri piemērs par to, ko jūs varat darīt, peewee, un tad es jums parādīs vairāk pilnīgs piemērs pieteikums ka man kopā, mēs var staigāt pa kopā. Un tad visbeidzot, pēdējais slaids, man ir daži resursi, kas jums izskatās at tiešsaistē vairāk informācijas. Tas nav pilnīgs apmācība par to, kā izmantot kolbā. Un es ceru, ka atstāt kādu laiku uz jautājumiem. Ikviens skatoties uz vietas, vienkārši piemēram, bļāviens vidū Ja jums ir kādi jautājumi. Tik ātra uzstādīšana sīkumi, ja jūs vēlaties sekot līdzi, vai, ja jūs vēlaties, lai iegūtu šo līdzi savu mašīnu, Es esmu būs izmantojot Python 2.7.10. Kolba strādā ar Python 3, bet man patīk izmantojot Python 2, jo tur ir daži Python paketes, kas nestrādā ar 3 vēl. Ja jums ir pip instalēta, kas ir Python paketes vadītājs, Es domāju, ka, ja jūsu Python ir lielāks par vai vienāds ar 2.7.9, jums ir tā uzstādīta jau, tas ir super viegli uzstādīt šos iepakojumus. Jūs varat darīt pip instalēt Kolba, pip instalēt peewee, Parasti jums jāskrien sudo vienkārši lai atļaujas izstrādāt. Un, ja jūs izmantojat super vecā versija Python, Es ieteiktu atjaunināt savu Python, vai izmantojot EasyInstall uzstādīt PIP. Tātad, nākamais jautājums ir, kāda ir kolba? Un es domāju, vispirms pamatots ir jautājums es prātoju uz ilgu laiku ir, kāda ir web app? Jo tas ir vārds, kas man domāju, ka ir izmests pa daudz ka man nav īsti zināms. Un es domāju, ka labākais piemērs tam, ko web app ir, tiešām ir CS50 Finance, kur tas nav īsti tikai mājas lapā, bet tas ir kaut kas jums varētu kārtot mijiedarboties ar. Ir lietotāju kontus un visu veidu dažādas lietas. Tātad, kur tieši jūs izdarīt līnija starp to, kas ir mājas lapā, un kāda ir web app, ir sava veida patvaļīga, bet es domāju, ka ideja, tas ir kaut kas vairāk nekā mājas lapā un tas ir noderīgs pieteikumu. Tātad, kolba ir pamats padarot tīmekļa lietotnes, izmantojot Python. Un cerams, līdz gada beigām Tas, es būs pārliecināt jūs, ka jūs tiešām varētu uzrakstīt kaut ko tāpat CS50 Finance izmantojot Python, ko es patīk daudz labāk nekā PHP, personīgi. Tātad, kolba ir, viņi zvans microframework, ar kuru, viņi domā, tas ir ļoti vienkāršs, bet paplašināms. Tātad, tas ir tieši tas, kas jums ir nepieciešams, bet, ja jūs vēlaties vairāk funkcijas, tas ir viegli, lai tos. Bet tikai tāpēc, ka tas ir microframework, nav nozīmē, ka tas ir tikai uz maziem projektiem. Man ir saite šeit, kas saka ka Obama izmanto kolbu 2012. gadā viņa kampaņai mājas lapa, kas, cerams, ir kaut kas no apstiprinājuma. Bet lieta, kas man tiešām patīk kolba ir tā, ka tas nav īsti darīt jebkāda veida lēmumus par jums. Tikai tāpēc, ka mēs esam runājot par tīmekļa lietotnēm, Man ir salīdzināt to ar Ruby on Sliedes un Django, kas abi ir liels sistēmas, bet viņi abi izteikt pieņēmumus par to, kā jūs vēlaties mijiedarbojas ar datu bāzēm, kā jūs vēlaties prezentēt savu uzskati, un viņi noteikti labi aspekti, kas. Piemēram, Ruby on Rails ir minētā aktīvā ieraksta sistēmu, kas ir tiešām jauks veids, lai mijiedarbotos ar datiem, bet, ja jūs vēlaties izmantot Ruby on Sliedes, jūs veida saistīts vērā, ka. Bet ar kolba, kā es ņemšu parādīs, ar peewee, Jūs varat izmantot Jebkāda veida datubāzes jūs vēlaties, un jūs varat vienkārši velciet, ka kā pagarinājumu kolbā. Tātad, tāpēc es patiešām tāpat kolba, tas ir, ka tā nepadara pieņēmumus par jums pamatojoties uz lietām, jums nav nepieciešams īsti. Tātad, kāpēc jūs izmantojat kolbā? Priekšrocības ir, tas vienkārši ir patiešām galvenās iezīmes iebūvēts tā, ka jums ir nepieciešams. Tātad, jums nav jāuztraucas par izprast visu ķekars lietas ka jums nav tiešām ir nepieciešams. Jums nav jāuztraucas Par izslēgšanas funkcijas ka jums nav tiešām ir nepieciešams. Un, kā jau minēju, tas ir super viegli pievienot pagarinājumi lietas kas jums nepieciešams. Dažas no tām, kolba ir savu atbalstu to. Tātad tur ir kaut kas ko sauc kolba admin, kas atspoguļo šo admin panelis, kas Django nodrošina, kas dod jums jauku vizuālu veidu administrēt jūsu mājas lapā. Bet atkal, ja jūs esat padarot kaut kas vienkāršs, Jūs, iespējams, nav nepieciešams liels admin panelis, tāpēc es domāju, ka ir super jauki. Un trūkumi ir, ka Jums ir mazāk enerģijas no kastes. Tātad, kad jūs pirmo reizi atvērt kolbā, un jūsu Python programmu, jūs vienkārši ierakstiet no kolba Importa *, vai kāds, Jums nav īsti iegūt visu iezīmes jūs varētu vēlēties. Un tāpēc jums ir daudz skaidrāk uzskaitīt funkcijas vēlaties. Tātad tas ir viens trūkums, bet es domāju, ka, lai izveidotu nelielu tīmeklī apps, piemēram, es esmu gatavojas rāda tu, tas nav īsti problēma. Un ko pēdējā lieta ir vajadzēja pateikt, kas ir typo, ir tā, ka ir mazāk ir standartizēts konvencijas par to, kā izmantot kolbā, tikai tāpēc, ka tur nav tik daudz cilvēki, kas to izmanto profesionāli salīdzinot ar Django. Tātad, ja jums izskatīties kaut kā, "kā es varu darīt X" Django, jūs, iespējams atrast. Tur ir labs dizains modeļi, jūs varat izmantot, bet ar kolbu, tas ir kārtot iet savu ceļu, tikai tāpēc, ka tas ir diezgan neliela bibliotēka. Tātad tie ir trūkumi, bet es domāju, ka ka tas joprojām ir laba bibliotēka, lai izmantotu. Tātad pieņemsim tikai lēkt pa labi kolbā. Tas noteikti nenāks būt pilnīga apmācība, bet tas ir, lai dotu jums priekšstatu par to, kā strukturēt lietas, un lai jūs justos ērti iet off un apskatot dokumentācijā un uzzināt vairāk. Tātad, ļaujiet man atvērt patiešām Vienkāršs piemērs sākumā, un parādīs, ko tas izskatās, un tad mēs sadalīs to mazliet vairāk. Tātad šis šeit, ļaujiet man iegūt to darboties. Tātad, man tagad ir mans pieteikums darbojas. Es esmu gatavojas atvērt Safari, un tas darbojas uz manu vietējā uzņēmēja. Tāpēc es esmu tikai gatavojas, lai padarītu šo lielāks. Bet localhost: 5000 Un tā, tieši tagad, tas viss dara ir, kad jūs apmeklējat tīmekļa vietni, tas izdrukā "Hello kolba," kas nav super noderīgs, bet es domāju, ka tas ir forši, ka šajā maz failu šeit, mums ir web serveris kas drukā kaut ko. Tātad, pieņemsim tiešām izskatās pēc koda uz otru, un sadalīs to mazliet. Vai izmērs labs ikvienam šeit? Tātad, cerams, jūs esat nedaudz ērti, izmantojot Python. Es esmu pieņemot, ka mēs varam apskatīt Python un lasīt caur to. Ja Jums ir kādi jautājumi par kaut kas, es varētu arī iet pa to. Tātad pirmā līnija ir, no kolba, mēs importējam, kolba ar kapitālu "F" kas ir sava veida visu galvenās iezīmes, kas jums nepieciešams. Ikreiz, kad jūs esat rakstiski failu un izmantojot kolba, jūs gatavojas vēlaties importēt, ka, tikai tāpēc, ka ir visas galvenās lietas. Nākamā lieta, ko mēs darām, ir mums nosaukt šo funkciju kolbā, vienkārši izveidot app objektu, un jūs esat vienmēr gatavojas vēlaties darīt. Un tad, lekt uz leju, lai bottom ātri, šī daļa šeit ir, "if_name _ ==" _ main_ "", kas ir sava veida Python konvenciju. Tātad šis būs tikai izpildīt, ja jums palaist šo failu tieši, izmantojot Python. Tad mēs aicinām app.run, kas faktiski sākt app iet. Tātad, tas ir galvenā struktūra, kas jums ir jebkurā kolba pieteikumu, ir jums būs šī app = kolba (_name_), un pēc tam app.run. Tātad, divas lietas, kas man ir šeit, ir tas, ko mēs saucam maršrutus. Tātad, parunāsim par maršrutēšanas mazliet vairāk. Es iešu atpakaļ uz slaidu. Tātad visbūtiskākā jēdziens kolbā maršrutēšanas. Un tā ir ideja, ka jūs nodot funkcijas Python konkrētām adresēm uz jūsu mājas lapā. Tātad, ja jūs vēlaties lai izveidotu jaunu maršrutu, Jūs izmantot šo @ app.route funkcija krāsotājs. Tātad, ja jums ir svešs ar funkcija dekoratori Python, tas ir šis jēdziens, kas ļauj jums veikt funkciju un surround to ar kaut ko citu. Tik tiešām, ko tas dara dekorators, ir tas, ka tā veic funkciju zem tā, un tā piebilst, vairāk informācijas uz to, bet to, kas patiesībā kolba tas padara šo notikt nav super izšķiroša nozīme, bet to, kas ir svarīgi, tas, ka pirms maršruta, jūs nodot šo @ app.route, un pēc tam adrese maršrutā, tāpēc slash ir tas, ko mēs redzēju, kad mēs vienkārši atvērt tīmekļa lapu. Tātad tas ir mājas lapa. Tas ir tikai slash maršruts. Un tad jums ir šo funkciju. No funkciju nosaukums var būt neatkarīgi vēlaties. Tas nav obligāti ir sakars ar trasi. Un tad, neatkarīgi Funkcija atgriešanās, funkcija vajadzētu atgriezties virkni. Un tas string var saturēt HTML vai kaut ko, un tas ir faktiski ko saņems atgriezās savā interneta pārlūkā, kā HTML, un tas padara to. Tāpēc tas ir tas pats kods tas bija no piemēra ka man tikko bija, tad, kad mēs apmeklēt slīpsvītra, tas izsauc Hello World funkcija, kas tikai atgriež string, Hello kolba, un kas izpaužas uzdrukāts uz ekrāna. Tātad tur ir vēl viens piemērs, kas ir, kad jūs apmeklējat / sveiki, tas izdrukā Sveiki Word, kas faktiski būtu teikt, Hello World, bet pieņemsim izlikties, ka bija tīša. Tātad pieņemsim pull, ka līdz nekustamo ātri. Tātad, ja jums iet uz localhost / sveiki, tas tagad būs drukāt kaut ko citu. Tātad tas ir tikai ātrs piemērs tam, kā Jūs varat izveidot divus dažādus maršrutus. Tātad, līdz šim nav super noderīgs, nav visai daudz jūs varat darīt, jūs varētu tikai darīt visu, kas ar ir dažādas HTML lapas, un, kad jūs apmeklējat īpaši lapa tā vienkārši ielādē lapu. Tātad, pieņemsim redzēt dažas vairāk noderīgas lietas jūs varat darīt. Tātad, viena lieta, ka Jums varētu būt pamanīju, piemērā, ka man velk up, ir tas, ka man bija app.run (atkļūdot = True). Un tā, ko tas atkļūdošanas arguments nav, ir ka tad, kad jūs vadīt savu web serveri, kad tu esi savā pieteikumā, ja jūs maināt failu, tas būs automātiski pārlādēt serveri. Un tāpēc jums nav faktiski ir restart Python, kas ir super noderīga. Es varu pierādīt, ka. Ļaujiet man uzvilkt manu kodu ar typo tajā, un izlikties, ka typo tika likts tur tīši par pamācošs mērķiem. Tātad pieņemsim pievienot šo muguru. Tāpēc tagad tā saka Hello World. Es to saglabāt. Un, ja mēs pull atpakaļ uz augšu termināla, jūs saka, ka tas ir atkārtota, jo tā atklāti izmaiņas, un tāpēc tagad, kad mēs pārlādē šo lapu, tas būs izdrukāt pareizo lieta. Tātad atkļūdot ir super noderīga kas. Arī tad, ja jums ir kāds veida sadursmes, tāpēc ļaujiet man šo pieteikumu crash , kam tas neatgriežas virkni. Tātad, pieņemsim vienkārši ir to atgriezties Nav kāda iemesla dēļ. Un tad, kad es apmeklēju šo lapas, tas būs tikai crash, bet serveris nav tikai crash, to faktiski dod jums super noderīgu atpakaļ izsekot visam, kas nogāja greizi. Un, kas ir patiešām jauki, ir tas, ka jebkurā soli šajā atpakaļ pēdām, jūs varētu atvērt interaktīvs apvalks šeit, un veida izdrukāt ko mainīgie jūs vēlaties to apskatīt. Un tā atkļūdošana ir patiešām noderīgi norādītas kas notiek ar jūsu servera, nevis tikai redzēt kaut kas līdzīgs PHP 500 iekšējais servera kļūda, kas ir super bezjēdzīgi. Viena lieta ir jāapzinās, ir ka, ja jūs nodot savu app online tāpēc tas ir redzams sabiedrībai, jūs nekad vēlaties atstāt atkļūdošanas režīmu, jo cilvēki faktiski var lietot šo konsoli, ka es uzrādīja jums izpildīt patvaļīgu kodu. Tātad viņi var izdrukāt kā jebkurš slepenie kodi jums ir tur, viņi var apskatīt tieši kā jūsu mājas lapā darbojas. Tātad, tas ir patiešām noderīga testēšanai, bet vienmēr pārliecinieties, lai ņemtu to ārā pirms jūs publicēt kaut ko internetā. Tātad, ja jūs izmantojat kaut ko piemēram, PHP, tur ir šī ideja ka jūs varat pāriet informācijas apmaiņu starp tīmekļa lapām , ievietojot informāciju faktiski URL, kas ir GET pieprasījums, bet kolbā, jūs faktiski var darīt kaut ko kārtot, piemēram, ka, Ar kuru maršruta dēļ mainīgs kā daļa no tā. Tātad, ja paskatās šo piemērs uz ekrāna šeit, mums ir ceļš, kas ir ('/ sveiki / "), un tādēļ, ja jūs apmeklējat / sveiki / kaut, ka kaut kas gatavojas faktiski saņemtu piepildīta uz vārda mainīgo. Un paziņojums, ka funkcija kas nāk ar šo maršrutu ir veikt parametru nosaukt, lai tas patiešām get pārgāja funkciju. Un tad, kad jūs esat iekšpusē šo funkciju, Jūs var ārstēt, ka, piemēram, normāls Python mainīgs, un tā tam, tā būs izdrukāt Sveiki, un tas aizpildīs nosaukumu, izmantojot daži string formatējumu. Tad, lai pievienotu mainīgās daļas maršrutēšanas, Jūs izmantojat leņķa kronšteinu marķējumu. Un pēc izvēles, jūs varat izmantot ko sauc pārveidotāju. Un tā, ja jūs nodot šo anotācija ar kolu, Jūs varat norādīt, ka tā ir int, vai pludiņš, vai ceļš, un tas automātiski konvertēt to. Jūs varat arī darīt konversijas ietvaros Python funkciju, tikai, izmantojot vairākumu, bet dažreiz, ja Jūs vēlaties, lai pārliecinātos, ka tas ir int, Jūs varat nodot, ka konversija noteikums tur. Tātad pieņemsim uzvilkt piemēru dažu mainīgo noteikumiem. Tātad šeit, tas ir vienas un tās pašas struktūra ar no kolba importu Kolba, app = kolba (_name_), un tad tas darbojas beigās. Mums ir šie divi atšķirīgi mainīgās maršruti šeit. Un pirmais, ir viens, ka es parādīja slaidu, kas bija kas tā vienkārši notiek kādā String nosaukums un tas būs izdrukāt Sveiki, nosaukums. Un pēc tam, otrais viena izmanto konversiju. Tātad tas automātiski konvertēt to uz int, un pēc tam dubultot int, un izdrukāt ka out. Un, mēs nedarām jebkādu pārveidošanas laikā tā jo kolba rūpējas par to. Tātad, pieņemsim iegūt šo darbību. Ja jums ir kolbā pieteikumu darbojas, Jūs varat kontrolēt-C no tā pārtraukt servera darbību. Un tad es darbosies mainīgos. So iesim uz localhost / sveiki / Ezras un cerams, tas būs sasveicināties ar mani. Tātad tas bija manā vārdā, jo mainīgā maršruts, un tas piepilda to šeit. Tāpēc es arī parādīt ātrs piemērs dubultošanu. Tātad, ja jums iet uz / double / 3, tas būs izdrukāt 6. Tātad šis rūpējās pārvēršanas par mums. Tātad jūs varat arī darīt to ar peldēt, un kaut kas īpašs, ja jums ir nepieciešams norādīt kaut ko līdzīgu ceļš, kas ļauj tai pieņemt slashes, bet tas nedrīkst parasti ir problēma. Līdz šim mēs, joprojām ir tikko atgriežoties virknes, kas nav ļoti interesants. Mēs patiešām varētu atgriezties burtiskā HTML string. Tātad kodu mēs varam ievietot kaut ko tāpat kā b-tag, lai padarītu to treknrakstā, bet lielāko daļu laika jums nav tiešām vēlaties būt rakstot HTML kodu Jūsu Python kodu. Tas kļūst patiešām netīrs, un tas nav labs laiks. Kolba ļauj nodalīt out HTML vērā to, ko sauc par Template, un tāpēc, ja jūs domājat ziņā MVC modeļa ka jūs esat iepazinušies ar, cerams, no darba ar CS50 Finance mazliet, Jūs varat domāt par Python failiem kā vairāk no kontroliera, kur tie mijiedarbojas ar kāda datu modelis jums varētu būt. Un tad tie prasa, lai Skatīts un iet informāciju šajā View aizpildīt informāciju HTML, ka tai ir nepieciešama. Un tas, ko mēs saucam šo viedokli ir Veidnes klasē. Tātad kolba izmanto citu Python modulis, kas tas automātiski instalēt, ja jūs VIP instalēt Kolba sauc Jinja, kas ļauj jums pievienot šos anotācijas uz HTML ka jūs redzēt uz ekrāna, kas ļauj jūs nodot lietas, piemēram conditionals, un cilpas uz HTML. Tātad, tas izskatās mazliet tāpat kā jūs varētu izmantot PHP ietvaros HTML failu, bet tas ir tikai tad, kad kolba serveris kalpo up HTML failu, tas darbosies šo šablonu dzinēju un apstrādāt ar šo un aizpildīt lietas. Tātad kolba ir render_template funkcija ka jūs varat redzēt apakšā šeit. Un tad, kad jūs apmeklējat šo lapu, to padarītu šo hello.html veidni, un tad aizpildiet šo HTML lapā. Tātad pieņemsim vienkārši palaist šo nekustamo ātri, un redzēt, kā tas izskatās, un tad es iešu caur nedaudz sīkāk. Tātad, jūsu Veidnes gatavojas doties kādā mapē Veidnes. Tas automātiski izskatīsies laikā pēc Veidnes mapi šo veidni. Tātad pieņemsim atvērt šo augšu. Tātad, es palaist šablonu piemēru. Tātad, ja es eju uz / sveiki / Ezra, tas ir tas briesmīgs, nepatīkams telts tag, ka man ir. Ļoti jauki, ļoti dinamiska. Es esmu liels ventilators. Bet kas notiek, ja Es tikai iet uz, / sveiki? Tātad tas vienkārši saka Hello World. Es neizturēja tā nosaukumu, un piepildīja to automātiski. Tātad, pieņemsim redzēt, kā tas bija, ka, un, kā mēs varam atbrīvoties no šīs telts varbūt. Tātad šeit, tas ir sava veida interesants piemērs, ja jums ir pazīstami ar to, kā slēdzis paziņojumi strādāt valodā. Saka, tas ir veida, piemēram, ka sava veida izkrist pa, kur jūs faktiski pievienoti divi dažādi ceļi uz to pašu funkciju. Tātad mēs pievienot / sveiks maršrutu un uz / sveiki / vārds ceļš uz Sveiki, un mēs norādīt using-- Python ļauj jums norādīt noklusējuma funkcija arguments-- Tātad, ja nav vārds, tā ja mēs ejam uz tikko / sveiki, tas automātiski filtrēt nosaukt ir vienāds nevienam. Tātad, mēs padarītu Template ar nosaukumu = nosaukums, lai tā iet ar nosaukumu parametrs vienādam ar šo vārdu funkciju parametru, veidni. Tas joprojām nav izskaidrots, kā ir izlemt, vai drukāt Hello World, vai izdrukāt manu vārdu. Tātad pieņemsim tiešām izskatās uz pašu veidni, un redzēt, ja tas nāk no. Tātad, šajā veidnes, mēs tiešām ir dažas nosacītu loģika, ko daži cilvēki apgalvo, jūs faktiski nevajadzētu būt daudz nosacīta loģika jūsu veidni pati. Tas būtu vairāk laikā pēc Kontrolieris, bet šajā piemērā tas ir kaut kas diezgan maza. Tātad šeit, mēs pārbaudām, vai nosaukums, tāpēc ja nosaukums nav vienāds ar Nav, ja nosaukums ir faktiski pieņemts, tad mēs saka Hello, vārdu ar header un telts, viss tas ir normāli HTML, pretējā gadījumā, mēs izdrukāt Hello, World tikai normāli. Tātad pāris lietas, lai paziņojuma šeit par to, kā jūs formatēt šablonu, ir tā, ka tie visi nosacītie apzīmējumi, veida, piemēram, to, kā mēs PHP, kad vēlaties ievietot kādu PHP, jūs izmantojat mazāk nekā jautājumu zīmi, tas ir sava veida analogs šeit Ar {%. Tātad šeit, mums ir mūsu nosacītu kodu. Un tad, kad jūs tiešām vēlaties burtiski novērtēt kaut ko, un drukāt tā, lai uz ekrāna, jūs izmantojiet dubultās lencēm. Tātad, šeit ir dubultā bikšturi, un tad mēs norādīt vārdu, tā, lai tas, ka tas tiks novērtēt ar mainīgo nosaukumu, kas tika pieņemts no padarīt veidņu funkciju, nevis tikai drukāšanai ārā, ja mēs tikām vaļā no tiem, tas vienkārši izdrukāt vārdu "vārdu." Tātad, tas ir kaut kas, lai noskatītos, kas paredzēti. Tātad vēl viena lieta paziņojums ir tas, ka tad, kad mēs vēlas izmantot render_template funkcija, mums tiešām ir importēt tas nepārprotami no kolbā. Un šis ir piemērs modularitāti kolbas, ka jums nav, lai importētu lietas, kas jums nav nepieciešams. Jūs varat vienkārši ienest funkcijas jūs faktiski ir nepieciešams, kas dažkārt jauki, tāpēc jums nav ir ir visas šīs funkcijas sēž, ka jūs nelietojat, bet arī, ja esat aizmirsis, ka jums nepieciešams importēt render_template, jūs, iespējams iegūt brīdinājumu kas ļaus jums zināt par to. Tā, ka ir šablonu. Tātad, mēs esam parādījuši, cik to veikt vienkāršas web lapas, un pievienot mazliet vairāk loģika tā, runājot par mainīgo maršrutu. Tas ļauj jums darīt dažādas lietas, pamatojoties uz ko URL jums iet uz, un arī tad, sniedz HTML mazliet vairāk jēgas par to, kā jūs vēlaties, lai padarītu lietas. Jums nav, lai visi Jūsu HTML jūsu Python, bet diezgan daudz katrs interneta lietojumprogrammu, jūs gatavojas vēlaties kaut kāda datu modelis, kas saistītas ar to. Un tā tradicionāli, tas kaut kas līdzīgs SQL datu bāzi. Un jūs varat vienkārši mijiedarboties tieši ar SQL. Python ir, es domāju, ka tā sauc. SQLite 3. Jūs varat vienkārši importēt SQLite 3 un izpildīt SQL vaicājumus tieši, bet es nezinu par jums, bet es tiešām nepatīk, vienkārši, rakstot out SQL vaicājumus. Tā ir tendence iegūt patiešām garš un sarežģīts. Un tā, kaut kas Man patīk izmantot, ir to, kas ir pazīstams kā ORM, kas ir objektu relāciju kartēšanu. Un punkts objektu relāciju kartēšanu, ir tas, ka pastāv divi atšķirīgi veidi, kā jūs varat domāt par datu bāzēm. Tātad, piemēram, ka Profesors Malan parasti izmanto klasē, ir Excel tabula, kur jums ir šīs rindas un šīs kolonnas, un tas ir patiešām noderīga kā tā ir pārstāvēta SQL un kā jūs sazināties ar to, bet vēl viens veids, ka tas ir faktiski lietderīgi domāt par to dažreiz, ir attiecībā uz klasēm un objektiem. Tā vietā, domāšanas Katras tabulas tādu, kam Šī rinda, kas ir pārliecināti, informāciju, jūs faktiski var domā par to kā Katrā tabulā ir klases, un tad katrs gadījums klase ir noteiktas īpašības. Tātad, šajā piemērā, tad gadījumi klase ir rindas tabulā, un tad katrs īpašums būtu būt kolonna tabulā. Tātad, ORM ka man patīk izmantot sauc peewee. Tas ir patiešām maza, kārtot līdzīgu kolbā. Es domāju, ka viņi iet labi kopā, bet ir daudz citu ORMS ka jūs varat izmantot. Vairāk populārs viens ir pazīstams kā SQLAlchemy, un es nevaru atcerēties, kāpēc es sākotnēji izvēlējās peewee pār SQLAlchemy, vai es varētu pateikt, kāpēc es domāju, ka tas ir labākais, bet mēs esam tikai gatavojas izmantot šo viens, jo es zinu, kā to izmantot. Tātad, viens jautājums ir, kāpēc Jums vajadzētu uztraukties izmantojot ORM, nevis tikai tieši rakstot SQL vaicājumus? Un es domāju, ka labākajā gadījumā ir tas, ka jums nav faktiski rakstīt SQL vaicājumu. Tas ir daudz vieglāk, jo es jums parādīs, uz darīt lietas, piemēram, atlases, ievietošanas, dzēšanu, jo īpaši veidojot tabulas. Tas ir daudz vieglāk rakstīt klases struktūru, nekā tas ir strukturēt Izveidot Galda apgalvojums, bet viena lieta jāapzinās, ka ORM centīsies visu izdomāt, ko visvairāk efektīva SQL vaicājums būtu, bet dažreiz tas izpaužas tā nepareizi. Un jo īpaši, ja esat strādājot ar lielu datu bāzi, Jūs varat pamanīt, ka vaicājumu kas būtu darbojas ātri, faktiski ilgāks. Un, ja paskatās ar kapuci, kā ORM tiek interpretējot ka uz SQL, tas varētu darīt kaut ko tiešām smieklīgi, tikai tāpēc, ka sava veida gestured jūsu nodomi nepareizi. Un ir bijuši reizes, kad Man nācās ignorēt to, un tikai izpildīt pats savus SQL vaicājumus, vienkārši jo tā bija analizējot kādā dīvainā veidā. Tātad, ir daži virs galvas, tikai tādā veidā ka tā apkopo jūsu paziņojumi leju SQL. Tātad, aplūkosim super ātri at vienkāršs piemērs datu modelis ka jūs varētu izmantot. Tātad, tas ir Python kods, un tā Pirmā lieta, ko jūs vēlaties darīt, ir no peewee imports *. Tātad, atšķirībā no kolba, kur jums ir Visi šie atsevišķie moduļi, un jūs vēlaties importēt kolbā, un uzrakstīt veidni, un daži citi ka mēs redzēsim vēlāk, no peewee, Jūs varat vienkārši importēt visu, jo tas ir diezgan neliela bibliotēka. Tātad, pirmā lieta, ko jūs vēlaties darīt, ir faktiski izveidot šo datu bāzi objektu. Tātad, jums ir db = SqliteDatabase, un tad nosaukums jūsu datu bāzē. Un tas patiešām izveidot datu bāzi objektu ka jūs var mijiedarboties ar, ar peewee. Un tad mums ir faktiskais modelis, mēs vēlamies izveidot. Tātad galds mēs vēlamies izveidot. Tātad, laikā peewee, katrā klasē ir pati tabula jūsu datu bāzē. Tātad, visi no klasēm mantot no bāzes modeļa, un kapitāla M modelis ir kaut kas ir noteikts peewee. Tātad, visi jūsu modeļiem vajadzētu mantot kā savu augstāko superclass, viņiem vajadzētu mantot no modelis, bet to, kas ir patiešām atdzist, ir tas, ka jūs faktiski var būt jūsu modeļi mantot viena no otras. Un daudz laika, jūsu datu modeļi ne vienmēr veikt jauku mantojuma hierarhiju, bet reizes, kad viņi dara, tas ir patiešām jauki, jo jums ir modelis raksturīgi viens no otra. Tātad, mēs definēts šīs klases "students", kas pārmanto modeli, un tas ir trīs īpašības. Tas ir ID, kas ir PrimaryKeyField, kas ir kaut kas, kas ir paredzēta pēc peewee, vārds ir CharField, un pakāpe ir IntegerField. Tātad, tas var būt vai var nebūt cik CS50 faktiski uzglabā visus studentu pakāpēs. Tas nav, bet tas ir, kā es varētu darīt to. Un tad tas ir, laikā šajā klasē, un tas ir kaut kas jūs varat darīt ar Python, jūs varat būt ligzdotu nodarbības. Un tas ir kaut kas kas ir vajadzīgs, ko peewee. Tātad, šī klase Meta, jums ir noteikt, ka datu bāze ir vienāds ar objekta ka mēs izveidojām iepriekš. Un tas saka, ko fails ir šī tabula faktiski tiks ietverti. Tātad tas ir kaut kas jums ir darīt laikā visiem saviem modeļiem. Jums vienkārši ir, lai precizētu šajā Meta klasē ka datu bāze ir vienāda ar db. Tātad, ko es parasti daru, ja man ir ķekars dažādu modeļu, ir tā, ka man ir viena bāze modelis, ka es parasti zvaniet "bāzes modelis" kas ir Meta klasi, un tā nosaka datubāzi vienāds ar db. Un tad visas manas turpmākiem modeļiem mantos no šīs bāzes klase. Un tad man nav jāuztraucas par to, kurā Meta klasi. Tātad, ja tas patiesībā izpaužas apkopoti lejup stājas SQL, izskatās, ka šī lieta šķebinošs leju šeit, "Izveidot tabulu students ID skaitlim, "Neatkarīgi. Un, es domāju, ka tas ir īsāks, šis SQL vaicājumu tieši šeit, bet, ja paskatās šajā klasē šeit jūs varat redzēt, tieši to, kas notiek. Jūs varat redzēt, ko veidu jomās tur ir, ko viņi sauc par, un jā, es domāju, ka Aplūkojot šo Python kodu ir daudz vairāk lasāms nekā cenšos rakstīt šo SQL vaicājumu. Tā, lai faktiski izmantot datu bāzi, mums ir savienot ar to, Python. Tātad, es parasti uzrakstīt funkciju sauc initialize_db ka dara divas lietas. Tā veic datu bāzē objekts db un tas savieno ar to, kas tikko atver līdz iedaļā datu bāzē. Ja jūs vienkārši darbojas gan mājaslapa uz jūsu vietējo mašīna, tas nav super liels galā jāuztraucas par savieno un atvienojot, bet, ja jūs izmantojat tā mājas lapā, jūs vēlaties pārliecināties, ka, ikreiz, kad lietotājs savieno ar to, kad tie noslēguma mājas lapā, tās atvienot, lai jūs nav ķekars cilvēku, kas saistīti ar savu datu bāzi visu uzreiz. Un tad, kad jūs savienojumu ar datu bāzi, jūs vēlaties, lai izsauktu db.create_tables, un uzskaitīt modeļus, ko vēlaties izveidot tabulas. Tātad šeit, es tikai vēlos, lai izveidot to par šo students. Un tad, kas ir svarīgi, ir precizēt drošu = True visvairāk laika. Tātad, ko šis apgalvojums darīs, ir tas, ka rada tabulās studenta modelis, bet tikai ja šī tabula ir ne jau ir izveidots. Tas ko drošas precizēts. Tātad tas nav pārrakstīt savu esošo galds, tas būs tikai izveidot jaunu tabula, ja nav viens tur. Tātad, jūs varētu vienkārši radīt tabulas reizi izmantojot SQL. Un tad ir šīs datubāzes sēde tur, un pēc tam izveidot savienojumu ar katru reizi, bet tas parasti ir jauki, tikai, lai likt šajā create_tables zvanu, tā ka, ja jūs kādreiz izdzēst savu datubāze, palaižot savu web app atkal, tā būs jauna to. Tātad, tikai pārliecinieties, ka droša ir norādīts, ka True, vai jūs atradīsiet savus datus tieši kļūst clobbered katru reizi. Un tad, jūs varat vienkārši piezvanīt initialize_db izveidot savienojums, un izveidot galdi, ja nepieciešams. Tātad, visbiežāk lieta ka jūs vēlaties darīt, vai viens no visbiežāk lietām, ir faktiski ievietot lietas savā datu bāzē. Un tā, nevis ņemot rakstīt ievietot paziņojums ar visiem noteikts vērtības, jūs faktiski var zvanīt funkcija uz studentu klasē. Tātad, ja jums izveidot klasi kas manto no modeļa, tas ir tas radītu metodi. Tātad, jūs klases name.create, un norādāt parametrus ka jūs vēlaties, lai iet ar. Tātad, ja es gribu pievienot dažas studentus mūsu CS50 grade grāmata piemēram, Es nolikšu Dāvidu, kurš ir ļoti labs rādītājs, viņam ir 95. Un pats, kurš nedara tik labi CS50, man ir 50. Un tā, jauka lieta par ko tas rada funkcija dara, ir tā, ka tas atgriež gadījums, vai rinda, ka tas izveidots galda, un tā, tad jums uzglabāt, ka pēc mainīgs, un darbs ar to vēlāk. Jūs varat mainīt apkārt, kas Es rādām piemēru. Ievērojiet, ka man nav ir jānorāda ID, jo tā tas ir PrimaryKeyField, tas automātiski pieauguma, ja jums nav jānorāda to. Un, patiesībā, jūs, iespējams, nedrīkst norādīt to, tāpēc, ka jūs varētu nejauši clobber kāds cits ID. Un jūs vēlaties, lai pārliecināts, ka tas ir unikāls. Tātad, faktiski, visvairāk kopīga lieta, ko vēlaties darīt, ir iespējams izvēlēties out Datubāzes, kad jūs ir daudz informācijas tur. Un tā, ja jūs vēlaties, lai iegūtu visu, tā ekvivalents izvēlieties zvaigzne no studentiem paziņojumu, to būtu vienkārši student.select. Un tas dos jums atpakaļ masīvs ar visiem students objekti tajā ka jūs atkārtot pār vēlaties. Jūs varat iegūt lietas no tā. Un lielāko daļu laika, jūs ne tikai gribu darīt izvēlēties, jūs tiešām vēlaties, lai norādītu kaut ko. Un tā, jūs varat ķēde Kopā šie funkcija zvani, tāpat kā jūs varētu ķēde kopā apgalvojumi SQL. Tātad jūs varat darīt student.select (). Kur šajā piemērā. Un tad, jūs varat precizētu nosacījumus, tikai izmantojot parasto Python Booleans pārbaudīt lietas. Tātad, šajā gadījumā, jūs vēlaties ierobežot to, ko jūs izvēlētos, lai, kur student.grade ir vienāds ar 50, un student.name ir vienāds ar Ezra, tā ka būs tikai iegūt mani no tā. Un paziņojums, kādu patiešām smalks lieta šeit ir ka, ja jūs vēlaties, lai precizētu un / un vai vai / vai, Python, jūs parasti izmantojat, Es domāju, ka vārds "un" faktiski, bet šeit jūs izmantojat vienu aizvieto & zīmes, kas parasti ir Bitu līmeņa uzņēmējs, bet šajā īpašajā gadījumā, tikai veids peewee to dara, Jūs lietojat vienotais Ampersand precizēt "un". Tas ir kaut kas, Es jauc daudz, bet tas nenāk klajā ka daudz praksē. Un tad, kad jums ir visas studenti izrakstās no datubāzes, pēc tam, kad tas ir izdarīts jūs izvēlieties un jūsu apģērbs vai kāds, Jūs varat izmantot foreach cilpu, tāpat kā normāli Python, ar jebkāda veida iterator vai ar jebkāda veida masīvu. Tātad jūs varat darīt, lai s in student.select (. whe) re (Student.grade <75), un tāpēc tas būs atkārtot pār katru studentu tabulā kuru rādītājs ir mazāks par 75, kas Šajā gadījumā, joprojām ir tikai man. Un tad jūs varētu darīt kaut ko laikā ka cilpa, piemēram, sūtīt man e-pastu un man tiešām pateikt vērsties manu problēmu kopas. Tātad, vēl viena lieta, jūs varat darīt, tas ir patiešām viegli atjaunināt rindas ietvaros tabulā. Tātad, atcerieties atpakaļ šeit, Jūsu kad es ievietota, Paņēmu vērtību, kas bija atpakaļ student.create, un es piešķir tai nosaukumu sauc Ezra. Un tāpēc tagad, jūs varat mainīt vērtībām, kas šajā gadījumā, tāpat kā jūs būtu normāla klase Python. Tātad jūs varat iestatīt ezra.grade = 95 un kas atjaunina lokālo kopiju, bet, ja jūs patiešām vēlaties apņemties šīm izmaiņām datu bāzē, Jums ir, lai izsauktu ezra.save, lai jūs sauc .save metode uz instancē. Un tāpēc tagad, esmu veiksmīgi mainījušies mana klases ietvaros datubāzē. Tātad, tad pieņemsim, ka es saņemt nozvejotas mainīt manu pakāpes ietvaros datubāzē. Profesors Malan, iespējams, gatavojas vēlaties dzēst mani no klases, un lai jūs varat zvanīt .delete instance metode tikai par šo lietu. Tātad, ja jūs vēlaties, lai iet atpakaļ šīs cilpas šeit, un patiesībā, tā vietā nosūtot e-pastu visu no studentiem, kuru pakāpe ir mazāka nekā 75, tu gribēji, lai tos dzēstu, Šajā cilpa jūs varētu zvaniet s.delete instancē. Un ļoti pēdējā lieta, ko vēlaties darīt, ir, kad jūs izveidot savienojumu, un esat pabeidzis ar savu darbu, jūs vēlaties, lai izsauktu db.close, kur db ir tas, ka datu bāze iebilst, ka mums bija pirms tam. Un jūs vēlaties, lai pārliecinātos, ka viss tiek slēgts no. Cool. Tāpēc tagad, man ir piemērs pieteikumu. Es esmu veida pre-made viss vienkārši tā, ka nebūs jebkuru dzīvu kodēšanas kļūdas, bet mēs varam iet cauri tas un redzēt, kā jūs varētu likt kolbā un peewee kopā, un veikt vienkāršu app. Es aicinu to CS50 skaļas frāzes, un tas ir veida vienkāršu blogu platforma. Tātad, pirmkārt, es palaist to un parādīt, kā tas izskatās, un tad mēs varam skatīties vairāk uz kodu. Labi, tāpēc pieņemsim tikai palaist to. Cool, es ņemšu veikt šo nedaudz mazāks. Tas nav ļoti skaista, tikai tāpēc, ka Man nebija darīt daudz CSS, bet ko tas ir, tā ir Šī datu bāze blog posts, un tas iet cauri visiem viņiem, un tas viņiem parādīt lapā, lai uz jaunāko. Un tā tie ir tikai daži amati ka man bija saglabāti datu bāzē. Tātad, ja mēs gribam, lai radītu jaunu post, mēs varam doties uz Pievienot jaunu ziņu, un mēs varam ieiet nosaukumā post, tāpēc kaut kā, CS50 seminārs. Wow, tiešām bauda semināru. Cool. Tad jūs nospiežat amatu, un tas būs novirzīt jūs atpakaļ uz mājas lapu, un tad jūs redzēsiet, ka jaunākā ziņa tika pievienots. Un mums vēl ir visi tie, kas tur. Tāpēc tagad, pieņemsim soli pa visi kods un redzēt, kā tas tiek īstenots. Tātad, es domāju, ka pirmā lieta, ka pieņemsim ieskatieties, ir faktiski modeļi. Vairāki laika daudz, kad jūs projektēšana kaut ko, Jūs vēlaties, lai padomātu vispirms par to, kā jūs gatavojas pārstāvēt savus datus, un tad dizains lietas ap ka, tā ka viss ir jēga. Un tas ir patiesībā, kā es darīja to, kad man bija padarīt šo, Es apsēdos un domāju, Ko es gribu kādā amatā. Tātad, šeit, mums ir tāda pati struktūra ka man bija minēts iepriekš, kur mēs db = Sqldatabase ("posts.db"). Patiesībā, jūs, iespējams, nevēlaties uz cietā koda savu vārdu datubāzēs. Tas būtu iespējams, būtu parametrs kas ir glabāti kaut kur, varbūt ar config failu, bet neliels piemērs, piemēram, tas, tas ir labi, lai cieto kods, kas. Tāpēc tagad mums ir šis amats klasē, kas pārmanto no bāzes modeli. Un tas atkal ir,, tad ID = PrimaryKeyField. Patiesībā, ja jums nav jānorāda, ja es tiešām got atbrīvoties no šī, tad peewee mēs parūpēsimies par automātiski radot šo ID lauku, un tas automātiski padarītu to PrimaryKey, kas Es domāju, ka ir ļoti jauki, jo parasti, tas ir kaut kas jūs vēlaties, lai būtu, bet es gribētu likt to konkrēti, tieši tāpēc es atceros, ka tas ir tur. Bet, ja jums nav jānorāda, ka, ka būs tur automātiski. Tātad, man ir datums, kurā ir DateTimeField, un visi Šie dažādie lauki, ja jums apskatīt peewee dokumentāciju, tā došu jums sarakstu ar dažādu lauku tipi, ko var izmantot. Attiecībā uz lielāko daļu, tas ir analogs to, ko jūs varētu redzēt SQL. Tātad ir CharField A VarCharFields, TextFields, kas ir ļoti ilgi teksti, piemēram, blog post potenciāli, DateTimeFields, DoubleFields, FloatFields, visas lietas, piemēram, ka. Un jūs varat pāriet uz citu argumentu uz to, ko es neprecizēja šeit. Say, piemēram, jūs nevēlējās ļauj divas amata vietas, ir pats nosaukums, jūs varētu norādīt kaut kas līdzīgs unikāls = True, un tas ir tikai papildus parametrs lauks, ka tad, kad tā apkopo to uz leju uz SQL, tas norādīs ka tas ir unikāls. Jūs varat arī norādīt kaut ko līdzīgu nav spēkā visas citas lietas jūs parasti darīt SQL. Tātad, tas ir diezgan vienkāršs modelis, kas ir datumu. Ievērojiet šeit, ietvaros DateTimeField, Es norādīts, kāda noklusējuma ir. Es norādīts, ka tas ir datetime.datetime.now, jo no tā, ka Tas izpaužas novērtēts, tas tiešām novērtē datetime.now kad tā izpaužas ievietota datu bāzē. Es domāju, ka man ir divkāršot to pārbaudītu, bet, ja jūs kaut kas līdzīgs šim, tad tas tiešām novērtē, ka reiz, un pēc tam datetime vienmēr ir tāds pats. Tātad, tikai tad, ja jūs darāt kaut ko ar datetimes, vēlreiz pārbaudiet ka tas izvērtētu, kad faktiski izpaužas ievietota, vai cits jūs varētu sajaukt. Nosaukums ir tikai CharField, kas tur Ir vairāk argumenti jūs varat iet precizējot, tieši cik ilgi jūs vēlaties, lai to, bet šeit, tas nav īsti jautājums. Un teksts būs teksts visa pastu un kas notiek, lai būtu Teksta lauks tikai tāpēc, ka jūs vēlaties lai tā varētu būt diezgan garš virkne. Tad mums ir šī Meta apakšklase ka tikko precizēts, ka mēs gribam datubāzē ja tas ir faktiski atvērta augšup būt BP objekts, kas mums ir šeit. Un pēdējā lieta, mums ir šeit, ir tikai šī funkcija ka mēs ejam izmantot no mūsu galvenajiem app inicializēt datu bāzi, lai izveidotu savienojumu ar tā, un pēc tam, lai izveidotu Post tabulu. Tagad aplūkosim galvenās app pati. Tātad šī ir diezgan mazliet ilgāk nekā tie, ka mēs esam redzējuši iepriekš, bet, cerams, ne pārāk slikti. Tātad, ļaujiet man paplašināt šo out. Labi. Tātad, paziņojums un top es ievesti visu ķekars citas lietas no kolba, ka mums ir ne tiešām redzējis. Un, cerams, mēs varam iet cauri katrs no tiem viens ar vienu un runāt mazliet vairāk par tos, sakārtoti pēc piemēru. Tātad, mums ir kolbas, un render_template, ko mēs esam redzējuši iepriekš, Šis pieprasījums objekts, kas nāks klajā, kad mēs skatāmies uz to, kā forma, kas man rādīja patiešām darbojas. Novirzīt, kas ļauj novirzīt atpakaļ no Create New Post atpakaļ uz sākotnējo mājas lapā, un pēc tam URL, kas ir kaut kas, kas ļauj jums izrēķināt kur uz mājas lapa konkrētais lapa. Tātad, nākamais lieta, ko es daru, ir man imports visu informāciju no modeļiem faili, kas mums bija tikai meklē. Un, jā. Tātad, kaut kas cits, kas jauns, kas nāk up, kad jūs nodarbojas ar, īpaši datu bāzes, ir tas, ka jūs varat norādīt funkcija, kas izpaužas sauc pirms katru pieprasījumu, un funkcija, kas izpaužas sauc pēc katras pieprasījuma, izmantojot šo funkcijai dekorators app.before pieprasījums. Un tā tas saņems izpildīts kur šī funkcija ir. Šis nav jābūt izsaukts pirms pieprasījuma bet parasti tas ir kaut kas saprātīgi, lai izsauktu to. Jūs varat norādīt neatkarīgi funkciju Jūs vēlaties saņemt sauc tur, tāpēc esmu norādījis šo initialize_db funkcija, kas mums bija atpakaļ modeļiem fails, tāpēc pirms katras pieprasījuma jums vēlas, lai izveidotu savienojumu ar datu bāzi. Ir divi dažādi veidi, kā jūs varat darīt. Jūs varat darītapp., I uzskatu, ka tas ir after_request. Un starpība starp after_request un teardown_request, ir tas, ka after_request notiks tikai ja pieprasījums faktiski bija spēkā. Un tā, tikai tad, ja pieprasījums bija veiksmīga, ja nekas nogāja greizi, bet teardown_request notiek gadījumā veiksmīgs pieprasījums, vai gadījumā, ja kļūdu. Tātad, parasti, jūs vēlaties izmantot teardown_request, ja jūs vēlaties darīt kaut kas, jo īpaši atšķirīgs gadījumā, ja kļūdu. Bet tikai par datu bāzē slēgšanu, vai tas izdodas, vai, ja tas neizdodas, mēs jūs vēlaties atvienot no datu bāzes. Tā to sauc, db.close uz db objektu. Ievērojiet, ka teardown_request uzņem izņēmums. Tātad jūs varat pārbaudīt, ja tur bija patiesībā kļūda, kad tā tika slēgtas, bet šeit, cerams, tur nav visai daudz kļūdu, tāpēc mēs esam tikai veida ignorējot to. Labi, bet pārējie no tā nav pārāk slikti. Tātad, kad mēs ejam uz mājas lapā, mēs padarīti šo home.html Template kas pavērs. Caurlaide ir amatā vienāds ar, un ko tas tas ir, atcerieties, mēs esam šo ziņu modelis, lai mēs izvēlētos visus amatus, un tad cita lieta, jūs varat darīt, Jūs varat norādīt, ja klauzulas, Jūs varat norādīt pasūtīt ar, un tāpēc mēs ņemam visi no stabiem, kas iegūt atlasīts, un pēc tam mēs pasūtīt tos ar post.date.descending. Un tas norādīs, kad tie faktiski nāk ārā, visjaunāko būs ļoti pirmais. Un tad mēs iet, kas stājas home.html veidni, tāpēc pieņemsim faktiski atvērt ka Template tiešām ātri, un to apskatīt, kā tas strādā. Un tas nav liels HTML, bet cerams, mēs varam koncentrēties uz Python. Tātad tur ir saite uz pievienot jaunu Post, un tāpēc tas norāda ceļu ietvaros kolbas, ka mēs definēt, kas ir tepat. Tas ir jauns amats maršruts, un mēs norādīt, ka šeit. Un tā tas ir saite, kas būs pēc tam iet lai šajā maršrutā ietvaros kolbas serveri. Jo vairāk interesanta lieta tas ir par cilpu šeit. Tātad mēs norādīt, ka šis post parametrs, kas tika pārgāja render_template funkcija, katram amatam Post objekts, kas izpaužas pieņemts. Mēs vēlamies, lai izdrukātu amata nosaukums, H1, un tad tālāk, mēs vēlamies, lai izdrukātu post tekstu ietvaros punktu. Un šeit mēs varam faktiski zvanīt Python funkciju, tāpēc mēs varam zvanīt strftime, ST-RF-laiks, un jūs varat pāriet formāta virknes ka jūs vēlaties izdrukāt datus izklāstīti. Tātad tas ir diezgan jauki, ka jūs varat tiešām aicinu šo Python funkciju no iekšienes šeit. Jums nav jādara formatējumu uz kontrolieris pusē, jo tiešām, formatējumu datumu ir kaut kas Jūs vēlaties, lai risinātu ietvaros View. Un visi no šiem procentiem lietas nav super svarīgs. Ja paskatās uz augšu dokumentāciju par strftime funkciju Python, tas nosaka visus šos lietas, bet tas ir kā, kad mēs meklējām pie mājas lapā šeit, tas formāti to ar jauku datumu, un tas nosaka, AM vai PM, bet normāli, ja mēs nebija tas šeit, jūs, iespējams iegūt kādu atkritumu datums, kas nav izskatās ļoti labi. Un tad mēs precizētu post.text, un es varētu ir izveidojuši pāris line pārtraukumiem šeit, tāpat nodot dažas atstarpes starp katru post. Tātad, es domāju, ka vissvarīgākais lieta šajā piemērā, ir tas, ka jūs varat izmantot šo cilpu. Un tas ir analogs lietas, jūs varat darīt PHP. Jūs varat atkārtot, izmantojot, viss tiek pieņemts, un jā, tā vietā, lai darīt copy / paste, copy / paste visu HTML, Jums vienkārši ir rakstīt to vienu reizi, un pēc tam Jūs varat atkārtot pār visiem amatiem. Un tas ir kaut kas kopējā ka jūs vēlaties ko darīt, ja jums ir daudz datu, ir tā, ka viss jūsu datiem, jūs vēlaties darīt līdzīga lieta. Un tad, tikai atcerieties, ka tad, kad jūs vēlas izdrukāt kaut ko skaidri HTML, jūs izmantojat dubultā bikšturi šeit, bet tad, kad jūs vēlaties, lai precizētu daži informāciju par nosacījumu, vai apmēram uz cilpas, jūs izmantot procentu kronšteinu. Tātad, dodas atpakaļ uz Python kodu, lai izskaidro kas notiek galvenā maršruts, kad mēs ejam uz turieni, tas tikai parāda visu posts, bet tad jautājums ir, kā mēs faktiski nokļūt amati datu bāzē, kas ir nedaudz vairāk interesants. Tātad, kad jūs noklikšķiniet uz New Post saite, ko mēs šeit redzējām, tas novirza jūs uz šo formu. Un tas ir tikai vienkāršs aicinājums uz render_template funkcija, kas pēc tam iet jaunajā amatā HTML formā. Tātad, pieņemsim to apskatīt, kas. Tātad šis viens ir diezgan vienkāršs. Tā ir vienkārša HTML formu, kas izskatīsies mazliet pazīstami, pamatojoties uz formām CS50 Finance. Un tā, mēs norādiet šeit, darbību. Un šeit, ja jūs strādājat ar PHP, parasti, to būtu kaut kas līdzīgs, create.PHP, bet šeit mēs faktiski norādīt ceļu ietvaros kolbā serveri. Un tā, šajā maršrutā Atbilst uz radītu maršrutam ka mēs esam šeit, kas mēs iedziļināties sekundē. Un tā, mēs norādīt, ka tas ir post metode, jo mēs vēlamies, lai nosūtītu šo veidlapu datus, un parasti kad sūtāt datus no veidlapas, jūs varētu vēlēties izmantot post pieprasījumu, tikai tāpēc jums nav galu galā ar šo lielo, smagnēja URL. Bet jūs varētu izmantot arī GET pieprasījumu, un nodot to ar mainīgo maršrutēšanu, bet formās, tas ir jauki amatā pieprasījumu šeit. Un tā, tad, tāpat kā jūs darītu ar HTML un PHP, Jūs varat norādīt šīs teksta ievadi, un jūs varat norādīt vārdu tiem, un tas ir vārds, kas saņems pagājis uz pieprasījuma objektu robežās kolbā. Un tad mums ir Iesniegt poga, kas saka Post. Un šeit, Post ir nosaukums no poga, jo tas ir blog post, bet šeit, amats ir pieprasījums metode. Tāpēc tie ir vienādi vārds bet patiesībā nesaistīti. Yeah Atgriežoties pie Python kodu, kad mēs sauc izveidot metodi, ievērosiet šeit, ka jūs varat faktiski norādīt ietvaros maršrutā ka pieprasījums metodes ka jūs vēlaties pieņemt, un tāpēc šeit, varu norādīt, ka es tikai vēlas pieņemt Post metodi. Tātad, ja es tiešām cenšos apmeklēt lapu tieši, kas ir, izmantojot GET pieprasījumu, tas man pateikt, "metode nav atļauta." Un tā, jums ir lapas, kārtot līdzīgu Tas radītu lapas, kuras es esmu tikai tiešām izmanto kā veids šo veidlapu, lai iesniegts, Jūs varat norādīt, ka jums nav gribu, lai cilvēki varētu doties uz turieni tieši caur GET pieprasījumu, vai arī, ja jūs nevēlaties, kādu iemeslu dēļ, Pasta pieprasījums, jūs varētu vienkārši norādīt GET šeit, bet šajā piemērā, mēs tikko vēlas, lai Post pieprasījums iet ārā. Tātad, kad create_post sauc, kad mēs apmeklēt ka caur Post pieprasījuma kad jūs iet uz konkrētu maršruts, tur ir šis pieprasījums objekts, un mums bija, lai importētu pieprasījumi pašā augšā, bet tur ir šis pieprasījums objekts, kas izpaužas pieņemts, un jūs varat piekļūt veidlapu datus, kas automātiski saņemt piepildīts kad jūs sūtīt lūgumu no formas. Un tad, ko es domāju, ka ir tiešām foršs, tiek ka veidlapa mērķi, lai saņemtu pagājis in, ir tikai Python vārdnīcu, kas satur, ja jūs access-- tāpēc šeit, ļaujiet man uzvilkt HTML blakus tai, vienkārši lai jūs varētu būt, ka kā atsauci, jā, tāpēc nosaukumus, kas mums norādīt šeit par dažādām jomām, lai nosaukumu un tekstu, mēs tad tikai izmantot tiem vairāk šeit kā indeksiem šo veidlapu datus. Tātad tas ir super ērts. Tātad mēs saucam post.create, kas radīs un automātiski ievietot šis jaunais amats objektu datu bāzē. Un es domāju, ka tas radītu funkciju šeit ir patiešām foršs piemērs tam, kā spēcīgs kolba ir un strādā ar to, jo, ja jūs darījāt kaut ko PHP, jums varētu būt darīt daudz validācijas, jums būtu tad izveidotu datu bāzi savienojumu, jums būtu tad izpildīt SQL vaicājumu, bet šeit mums vienkārši ir šī jauki post.create, ko mēs varam, tad tikai iegūt informāciju no Pieprasījuma mērķis, un pēc tam nodot to jaunu post, ka mēs esam radot. Un tad, ļoti pēdējā lieta, ko mēs vēlamies darīt, ir novirzīt lietotājs atpakaļ uz mājām. Un tāpēc mēs izmantojam šo Kolba novirzīt funkciju. Un kaut kas mums nebija redzējis pirms, bija šī URL funkcija. Tātad URL funkcija ļauj jums iet uz faktiski nosaukums par funkciju jūsu Python kodu, nevis konkrētajā maršrutā ka tas ir pie. Lai es varētu būt tikpat viegli novirzīts lietotājam slīpsvītra, kas to nosūtīt atpakaļ uz mājām, bet izmantojot URL funkcija ir jauki, jo, ja jūs mainīt vieta, kur lietas ir, tāpēc pieņemsim, ka es mainīt mājvieta būt / mājās, nevis, tas vēl tad atgriezties / home, jo faktiski iet un uzmeklē nosaukums funkciju, un tas dos jums atpakaļ URL par to. Tātad, sava veida uz pieņēmums, ka tu esi visticamāk, mainīt, kur lietas ir, nekā vārdiem funkcijām. Jūs varat izmantot šo patiešām jauks URL funkciju. Un viena lieta ir apzināties ka ir mazliet viltīgs, ir tas, ka jūs domājat, ka jūs varētu vienkārši aicināt novirzīt uz URL, bet patiesībā visi maršruti atgriezt kādu no teksta un HTML veida, tāpēc jums tiešām ir atgriezties novirzīt zvanu. Pretējā gadījumā jūs saņemsiet kaut ko nederīgs par neatgriezīsies virkne, jo visi šie ir jāatgriežas HTML jūs tiešām vēlaties, lai padarītu. Un tā, kad jūs izsauktu novirzīšanu, tas novirza jūs uz lapas, bet tas tiešām atgriež HTML Jums ir nepieciešams, lai izpildītu šo novirzīšanu. Iet atpakaļ uz mājas lapu. Tāpēc mums ir šie divi atšķirīgi viedokļi. Mums ir mājas skats. Vai, es domāju, man vajadzētu teikt veidnes. Mums ir šīs divas veidnes, mājas veidnes, kas parāda visas mūsu amatu, un tad mums ir šī reklāmas lieta, un, kad jūs noklikšķiniet uz amatu, tā iet lai jaunā maršruta garumā kolbas, bet ka maršruts nav obligāti ir atbilstošu veidni. Jums nav, lai redzētu kaut kas, bet jūs joprojām varat ir šis darbs turpinās aiz ainas. Un tad jums novirzīts atpakaļ uz mājas lapu. Un noteikti, tas ir viegli strādāt kaut nicer CSS veidni un padarīt šo izskatās daudz nicer, bet visas galvenās loģikas ir tur Python. Kādi jautājumi par šo piemēru? Es zinu, ka ir daudz dažādas lietas notiek tur, daudzas lietas mums nebija redzējis agrāk, bet, piemēram, neko. Jā. AUDITORIJA 1: Vai jums ir kaut ko darīt īpašs skrubis datus, kas ir nāk no formas? Es pamanīju, jūs tikko teica "radīt," EZRA ZIGMOND: Jā, tā tas ir patiesībā, tas ir patiešām labs punkts. Tātad jautājums bija, vai ne nepieciešams pārbaudīt un pārliecināties, ka dati ir derīgs, un darīt jebkādu beršanu pārliecināties, ka tas ir derīgs, jo, kā jūs varat redzēt šeit, Es nedaru to. Tātad, pieņemsim redzēt, kas notiek ja es post kaut ko tukša. Tātad, tas būs faktiski tikai veikt tukšs post un aizpildīt DateTime. Tātad patiesībā, jūs, iespējams, vēlas kaut ko darīt, piemēram, varbūt precizēt, vai nosaukums ir vienāds ar tukša virkne, tad nedariet to. Vai, darīt tikai to, ja nosaukums ir nav vienāds ar tukšu virkni. Tātad tas nav reāli automātiski rūpēties par šo attīrīšana jums, lai jūs joprojām ir nepieciešams, lai to izdarītu. Jā, labs jautājums. AUDITORIJA 2: vai tas skrubis par turpinājumu injekcijas? Vai Tu zini? EZRA ZIGMOND: Cerams, peewee dara to. Es domāju, ka tas noteikti būtu diezgan slikti bibliotēka ja tā nav darīt. Es precīzi nezinu. Man ir apskatīt vaicājuma ka tas radīts. Es domāju, ka, ja es drukāti blog post, ka sava veida izskatījās kā SQL injekcijas uzbrukumu, kaut kas līdzīgs šim, ja tas ir kā paroles laukā vai kaut ko, jūs varētu darīt kaut kas līdzīgs šim. Es domāju, ka būs vēl nokļūt burtiski rakstīja, bet es domāju, ka peewee tas jādara daži attīrīšana no datu veida pirms tas faktiski izpilda to. AUDITORIJA 1: Šis teksts lauks ir paredzēts veikt vienkāršu tekstu, vai ne? EZRA ZIGMOND: Jā, tā ir. Jā. Tāpēc es domāju, ka visi, tāpēc tas ir pareiza uzvedība, kas būs jādara, bet es domāju, ka peewee cerams, tas jādara sava veida aizsardzība to galā. Un, ja jūs vēlaties, lai vēlreiz pārbaudiet, ka tur Ir veidi, kad jums radīt vaicājumu. tāpēc jums nav izpildīt tieši. Man ir veikt apskatīt dokumentāciju, bet jūs faktiski var apskatīt SQL, ka tā ir radīt, un to apskatīt to, un padarīt pārliecināts, ka tas ir bēgšanu lietas. Vēl viens iemesls, kāpēc jūs varētu vēlaties apskatīt SQL ka peewee ir outputting, ir, ja lietas, šķiet, iet tiešām lēni, Jūs varat to apskatīt un redzēt, kas tas ir faktiski dara, jo tas ir dažreiz viegli nejauši pievienot jo, kā jūs rakstīt to, Jūs varat nejauši būt tā atlasiet visas datubāzes, pirmkārt, un pēc tam darīt kaut kāda darbība par to, kad jūs patiešām domāts, lai izvēlētos apakškopu. Un tā, ja lietas nav gluži iet labi, tas ir labi, lai to apskatīt pieprasījuma kas ir faktiski kļūst radīts. Jā. AUDITORIJA 2: Kad jūs pirmo reizi sāka, jūs likts ostā kā 5000. EZRA ZIGMOND: Jā. AUDITORIJA 2: Vai default ar peewee, vai arī tas ir kaut kas jūs varat mainīt? EZRA ZIGMOND: Jā, tā osta ir noklusējuma ar kolbā. Ja jūs palaist to bez norādot neko, tas automātiski darīt. Es uzskatu, ka man ir divkāršot to pārbaudītu, bet jūs varat norādīt, ka app.run, Es domāju, ka jūs varat darīt, kaut ko līdzīgu, ostas = 8080. Pieņemsim, ka dot izmēģināt nekustamo ātri. Jā, lai jūs varat vienkārši norādīt ostas = 8080, un tas darbosies tur, ko es domāju, ka, ja jūs vēlaties, lai palaistu to uz IDE, es neesmu mēģinājis šo, bet es domāju, ka, ja jūs vadīja to uz ostu 8080, jūs, iespējams, varētu lai piekļūtu serverim, tāpat kā jums bija, lai mājas lapā. Jā, bet tas ir viegli mainīt, ka, ja jums ir jebkāda veida, piemēram, ostas ekspedīcija lietas, kas jums jādara. Jebkuri citi jautājumi? Yeah? AUDITORIJA 1: Tātad, es redzēju jūsu modeļi, kas, kā jūs minējāt, Jums ir, lai precizētu datubāzi par katru objektu. Vai jūs notikt zināt, vai kas padara to ļoti viegli, ja jums ir daudz SQLite datubāzes, kas jums vēlas izmantot vienu web app, ka jūs varat norādīt ķekars dažādu tiem, kas savu modeli? EZRA ZIGMOND: Jā, let me atvērt ka līdz nekustamo ātri. Tātad, jūs sakāt, ja jūs vēlaties, lai būtu ķekars dažādu kaut ko, varbūt patīk un studenti, dažiem iemesls, kaut kas tamlīdzīgs? Jā, tāpēc es domāju, ka jūs joprojām, katrs modelis būtu vēl tikko viena datu bāze tai piešķirtas, bet, ja jūs vēlētos, lai būtu dažādi modeļi, kas ir dažādas datu bāzes objektus piešķirts uz to, jūs varētu noteikti darīt. Tātad, ja es izveidojis jaunu, kaut kas tamlīdzīgs, un tagad tas ir students, kas izskatās savādi kā blog post, Es varētu norādīt, ka Datu bāze ir vienāda ar db_2 šeit. Tātad, es domāju, ka ir Galvenais veids, kā jūs varat darīt. Cool. Jebkuri citi jautājumi? Tik vienkārši pabeigt līdz maz bit, šeit ir daži resursi, un šie slaidi tiks publicēta internetā lai jūs faktiski var iegūt līdz šīm saitēm. Labākais resursi ir patiešām dokumentāciju par kolba un peewee sevi. Viņi rakstīts tiešām labi, es domāju. Tātad, kolbu mājas lapa ir šeit, un viņiem ir QuickStart apmācība, kas būs staigāt pa līdzīgs lietas, ko es gāju cauri, bet, ja jūs vēlaties, jebkādu pārskatīšanu no lietām, ko es devos pāri, vai tu domā, ka es paskaidroju kaut kādā veidā mulsinoši, tie būs līdzīgi piemēri tur. Peewee ir dokumentācija, un tie ir QuickStart apmācība ka iet pa galvenajiem parametriem ka jūs vēlaties izmantot. Tātad, lietas, es runāju par to ar unikālās, un norādot saistību nepildīšanu, dažādu veidu jomās, kas jūs varat izmantot, tie visi būtu tur. Arī tad, ja jums ir jautājumi par peewee, un tu pēc tās par stackoverflow, puisis, kurš izgatavots peewee faktiski tālāk un atbild tiem reizēm. Ja jums ir jautājums, cerams viņš būs spējīgs atbildēt uz to, jo viņš rakstīja viss. Es domāju, ka tas viss Es gribēju, lai segtu. Paldies par iznāks.