[Muzikos grojimo] EZRA ZIGMOND: Sveiki, visi. Ačiū už išeina šiandien. Šis seminaras yra "Python" Web Apps "su matavimo kolbą." Taigi, aš ruošiuosi kalbėti šiek tiek apie tai, kodėl Jūs galbūt norėsite naudoti kolbą padaryti Web Apps Python, o ne kai kurių kitų sistemų ten, kaip Django, kuri yra labiausiai gerai žinomi. Subtitrų yra ", ir Peewee ", kuris yra kažkas, mes ketiname kalbėti apie tai, kaip bendrauti su SQL duomenų bazėmis. Ji daro tai tikrai gražus. Taigi, čia tik trumpas sąrašas ką aš noriu eiti per. Taigi, pirma, tik vienas Pristatymas kad tai bus quickstart, kuris yra kaip gauti viską įsteigti savo kompiuteryje. Aš ruošiuosi būti įrodoma tai mano vietos Mac mašina, tik todėl, kad ten aš padariau tai prieš, aš patogiausia su juo, bet tai tikrai galima ant CD50 IDE. Taigi, po to, noriu pristatyti tai, ką kolba, ir įtikinti jus, kodėl jums reikia naudoti jį į pirmąją vietą. Tada Aš duosiu greitas pavyzdys, ką jūs gali daryti kolbą, greitai pavyzdžiui ką galite padaryti Peewee, ir tada aš jums parodysiu daugiau pilnas pavyzdys taikymas kad aš kartu sudėjus, kad mes gali vaikščioti per kartu. Ir tada galiausiai, paskutinė skaidrė, turiu keletas išteklių, kad jums atrodo ne internete daugiau informacijos. Tai nėra visiškai pamoka kaip naudotis kolbą. Ir aš tikiuosi, kad palikti kai kurie klausimai laiką. Kiekvienas žiūri lokaliai, tik kaip, šaukti viduryje jei turite kokių nors klausimų. Taigi greitas montavimas dalykų, Jeigu norite sekti kartu, arba jei norite gauti šio ant savo mašina, Aš ruošiuosi būti naudojant Python 2.7.10. Gertuvės daro darbą Python 3, bet man patinka naudojant Python 2, nes ten kai Python paketai, neveikia su 3 dar. Jei turite PIP įrengtas, kuris yra Python paketų tvarkyklė, Manau, kad jei jūsų Python yra didesnis nei arba lygus 2.7.9, turite tai jau įdiegta, tai super lengva įdiegti šiuos paketus. Jūs galite tai padaryti PIP įdiegti Kolbą, pip įdiegti Peewee, Paprastai jūs turite paleisti sudo tik taip, kad leidimai dirbti. Ir, jei esate naudojant Super senos versijos Python, Aš rekomenduoju atnaujinti savo Python, arba naudojant EasyInstall įdiegti pip. Taigi, kitas klausimas yra, kas yra kolba? Ir aš manau, pirmiausia pagrįstas klausimas man buvo įdomu ilgą laiką yra, kas yra Web App "? Nes tai žodis, kuris man nuomone, yra įmestas aplink daug kad aš tikrai nežino. Ir aš manau, kad geriausias pavyzdys, ką interneto app yra, tikrai yra CS50 Finansai, kur tai tikrai ne tik svetainė, bet tai kažkas, kad jūs gali rūšiuoti bendrauti su. Yra vartotojo sąskaitų ir Visi skirtingų dalykų rūšių. Taigi, kur tiksliai piešiama linija tarp to, kas yra svetainė, o kas yra Web App ", yra tarsi savavališkas, bet aš manau, idėja, tai kažkas daugiau nei svetainėje ir tai naudinga programa. Taigi, kolbos yra už sistema priėmimo žiniatinklio programas, naudojant Python. Ir tikiuosi, iki pabaigos tai aš įtikinti jus kad jūs iš tiesų gali rašyti kažką kaip CS50 Finansų naudojant Python, kurį aš kaip daug geriau nei PHP, asmeniškai. Taigi, kolba, jie vadina microframework, pagal kurį, jie reiškia tai labai paprasta, bet pailginamas. Taigi, tai yra būtent tai, ko jums reikia, bet jei norite daugiau funkcijų, tai lengva juos į. Bet tik todėl, kad tai microframework, ar ne reiškia, kad tai tik mažiems projektams. Turiu nuorodą čia, kad sako kad B. Obama naudojama kolba 2012 jo kampanijos svetainė, kuri tikiuosi, yra kažkas patvirtinimu. Bet dalykas, kad aš tikrai patinka apie kolbą yra tai, kad tai tikrai ne padaryti bet sprendimus už jus rūšiuoti. Tiesiog todėl, kad mes kalbame apie interneto apps, Turiu palyginti ją su Ruby on Bėgiai ir Django, kurie abu yra puikus sistemos, tačiau jie abu daryti prielaidas apie tai, kaip norite bendrauti su duomenų bazėmis, kaip norite pristatyti savo peržiūros, ir jie tikrai geri aspektai, kad. Pavyzdžiui, Ruby on Rails turi šios veikliosios rekordinį sistemą, kuris yra tikrai gražus būdas sąveikauti su duomenimis, bet jei norite naudoti Ruby on Bėgiai, jūs tarsi surišti į tai. Bet su kolbą, kaip aš parodyti jums Peewee, galite naudoti bet rūšiuoti Duomenų bazės norite, ir jūs galite tiesiog patraukite, kad kaip į a kolbą pratęsimo. Štai kodėl aš tikrai kaip kolbą, tai, kad ji neturi daryti prielaidas jums remiantis dalykų jums nereikia tikrai. Taigi, kodėl jūs turėtumėte naudoti kolbą? Pranašumai yra, jis tiesiog tikrai pagrindines funkcijas pastatytas į jį, kad jums reikia. Taigi, jūs neturite jaudintis suprasti visa krūva daiktų kad jums nereikia tikrai reikia. Jūs neturite jaudintis apie išjungdami funkcijas kad jums nereikia tikrai reikia. Ir, kaip jau minėjau, tai super lengva pridėti plėtinius dalykų kad jums reikia. Kai kurie iš jų, kolba turi savo paramą. Taigi kažkas vadinamas kolba Administratorius, kuris atspindi tą admin panelė, kad Django suteikia, kuri suteikia jums gražus vizualinis būdas administruoti savo svetainę. Bet vėl, jei esate priėmimo kažkas paprasta, Jums tikriausiai nereikia didelių admin panelė, todėl manau, kad super gražus. Ir trūkumai, kad jūs turite mažiau energijos out of the box. Taigi, kai jūs pirmą kartą atverti kolbą, ir jūsų Python programa, Jums tiesiog įveskite nuo kolbą importas *, ar kas, Jums nereikia tiksliai gauti visus funkcijos galbūt norėsite. Ir taip, jūs turite daugiau aiškiai sąrašą funkcijų norite. Štai vienas trūkumas, bet aš manau, kad statyti nedidelį internete programos, kaip aš ruošiuosi būti rodomas Jūs, tai tikrai ne problema. Ir kas paskutinis dalykas yra turėtų pasakyti, kuris yra klaidos, tai, kad yra mažiau standartizuotas konvencijos dėl kaip naudotis kolbą, tik todėl, kad nėra tiek daug žmonės, kurie naudoja jį profesionaliai palyginti su Django. Taigi, jei jums atrodo kažką panašaus, "Kaip aš galiu padaryti X" Django, jums tikriausiai jį rasti. Yra geras dizainas modeliai, kuriuos galite naudoti, bet su kolbą, tai rūšiuoti eiti savo keliu, tik todėl, kad tai yra gana nedidelė biblioteka. Taigi tie yra trūkumų, tačiau aš manau, kad kad ji vis dar gera biblioteka naudoti. Taigi tegul tiesiog peršokti į dešinę kolbą. Tai tikrai nesiruošia būti baigtas pamoka, bet tai suteikti jums idėja kaip struktūruoti dalykus, ir todėl jums jaustis patogiai vyksta išjungti ir žiūri į dokumentus ir daugiau sužinoti. Taigi, leiskite man atverti tikrai paprastas pavyzdys, pirmiausia, ir parodyti jums, kas tai atrodo, ir tada mes ją padalyti šiek tiek daugiau. Taigi, tai čia, leiskite man gauti jį veikia. Taigi, dabar aš turiu mano prašymas veikia. Aš ruošiuosi atverti Safari ir jis veikia ant mano vietos adresas. Taigi, aš tik ketina padaryti tai didesni. Bet localhost: 5000 Ir taip, dabar, visa tai daro yra, kai Jūs lankotės svetainėje, jis išspausdina "Labas kolbą," kuris yra ne super naudinga, bet aš manau, kad tai kietas, kad šioje mažoje failą čia mes turime interneto serverio, kuriame veikia kad spausdina kažką. Taigi, galime iš tikrųjų atrodo ne už antrą kodo, ir ją padalyti truputį. Ar dydis geras visiems čia? Taigi, tikiuosi, jūs esate šiek tiek patogiai naudojant Python. Aš darant prielaidą, kad mes galime pažvelgti į Python ir skaityti per ją. Jei turite kokių nors klausimų apie nieko, aš taip pat galite eiti per tai. Taigi pirmoji eilutė yra iš kolbą, mes importuojame, kolba su kapitalo "F" kuris yra rūšiuoti visi Pagrindinės funkcijos, kad jums reikia. Kai rašote failą ir naudojant kolbą, jūs ketinate norite importuoti, kad tik todėl, kad turi visus pagrindinius dalykus. Kitas dalykas, mes darome, yra mūsų skambinti Ši funkcija kolbą, tiesiog sukurti app objektą, ir jūs visada norės tai padaryti. Ir tada, šokinėja žemyn į dugnas greitai, ši dalis čia yra, "if_name _ ==" _ main_ "", kuri yra rūšiuoti Python'o konvencijos. Taigi tai atliks tik tada, jei paleisti šį failą tiesiogiai, naudojant Python. Tada mes vadiname app.run, kuris bus iš tikrųjų pradėti app vyksta. Taigi, tai pagrindinė struktūra, jūs turite bet Flask taikymo, yra turėsite tai App = kolba (_NAME_), tada app.run. Taigi, du dalykai, kad turiu čia yra tai, ką mes vadiname maršrutus. Taigi, pakalbėkime apie maršruto šiek tiek daugiau. Aš eisiu atgal į skaidrę. Taigi svarbiausias sąvoka kolba maršruto. Ir tai idėja, kad jums priskirti funkcijas Python konkrečias adresų Jūsų interneto puslapyje. Taigi, jei norite sukurti naują maršrutą, Jums naudoti šį @ app.route funkcija dekoratorius. Taigi, jei esate susipažinę su funkcija dekoratoriai Python, tai tik koncepcija, kuri leidžia jums imtis funkciją ir aplink jį su kažkuo kitu. Taigi tikrai, ką šis dekoratorius daro, yra tai, kad ji užima funkciją žemiau jo, ir tai prideda daugiau informacijos jai, bet kas iš tiesų kolba tikrai daro, kad taip atsitiktų nėra super svarbus, tačiau, kas yra svarbu, yra tai, kad prieš maršrutu, galite įdėti šią @ app.route, tada Maršruto adresas todėl velniop tai, ką mes mačiau, kai mes tiesiog atverti tinklalapį. Taigi, kad pagrindiniame puslapyje. Tai tiesiog velniop maršrutas. Ir tada jūs turite šią funkciją. Iš pavadinimas funkcijų gali būti, ką norite. Ji neturi būtinai daryti su maršrute. Ir tada, nepriklausomai nuo Funkcija grąža, funkcija turi grąžinti eilutę. Ir tai eilutė gali yra HTML arba nieko, ir tai yra iš tikrųjų, kas gaus grįžo į savo naršykles, kaip HTML, ir jis teiks, kad. Taigi, tai yra tas pats kodas tai buvo iš Pavyzdžiui kad aš tiesiog pritrūko, todėl, kai mes aplankyti velniop, jis vadina Sveiki Pasaulio funkciją, kuri tiesiog grąžina eilutę, Sveiki kolbą, ir, kad gauna spausdinami ant ekrano. Taigi dar vienas pavyzdys, kuris yra, kai Jūs lankotės / Sveiki, jis spausdina Hello žodį, kuris turėtų iš tikrųjų pasakyti, Hello World, bet tegul apsimesti, kad buvo tyčinis. Taigi leiskite traukti, kad iki realaus greitai. Taigi, jei jūs einate į localhost / Sveiki, dabar jis bus atspausdinti ką nors kita. Taigi tai tik greitas pavyzdys, kaip galite sukurti du skirtingus kelius. Taigi, tiek, kiek tai yra ne super naudinga, yra ne visai daug galite padaryti, galima tiesiog padaryti viską, kad su turi skirtingus HTML puslapius, ir kai apsilankote tam tikras puslapis tai tiesiog įkelia puslapį. Taigi pažiūrėkime, kai daugiau naudingų dalykų, kuriuos galite padaryti. Taigi, vienas dalykas, kad jums gali tekti pastebėjau pavyzdyje kad aš iškedentas iki, yra tai, kad aš app.run (debug = true). Ir taip, kas tai debug argumentas daro, yra kad, kai jūs paleisti savo interneto serverį, kai esate savo prašymą, jei pakeisite failo, ji bus automatiškai perkraukite serverį. Ir todėl jūs neturite iš tikrųjų turi restartas Python, kuris yra super naudingas. Galiu parodyti, kad. Leiskite atsigriebti savo kodą su jame rašybos, ir apsimesti, kad klaidos buvo įdėti ten apgalvotai pamokantis tikslais. Taigi leiskite pridėti šį nugarą. Taigi, dabar ji sako Hello World ". Aš išsaugokite jį. Ir jei mes traukti atgal į viršų terminalas, jums pasakyti, kad jis iš naujo, nes jis aptiko kaita, ir todėl dabar, kai mes iš naujo įkelkite šį puslapį, ji bus išspausdinti teisingą dalyką. Taigi derinti yra super naudinga, kad. Taip pat, jei turite kokių nors rūšiuoti avariją, todėl leiskite man padaryti šį prašymą avariją turėdami tai negrįžta eilutę. Taigi, leiskite tiesiog turite jį grįžti Nieko kažkodėl. Ir tada, kai grįžtu tai puslapis, tai bus tik katastrofos, bet serveris ne tik avarijos, ją faktiškai suteikia jums super naudingos atgal pėdsakas viską, kad negerai. Ir kas tikrai gražus, yra tai, kad bet kuriuo metu šio nugaros pėdsakų žingsnio, jums gali atverti interaktyvus Mokėti čia, ir tarsi atsispausdinti, ką kintamieji norite pažvelgti. Ir taip derinimo tikrai naudinga suprasti, kas vyksta su jūsų serveris, o ne tik pamatyti kažkas PHP kaip 500 vidaus serverio klaida, kuri yra super nenaudingas. Vienas dalykas žinoti, yra kad jei jūs įtraukėte savo programą internete todėl matomi visuomenei, jums niekada nori palikti derinimo režimą, nes žmonės gali realiai naudoti šią konsolę, kad aš parodė jums vykdyti pasirinktą kodą. Taigi jie gali atsispausdinti kaip ir bet kuris slapti kodai turite ten, jie gali pažvelgti, kaip jūsų svetainė veikia. Taigi, tai tikrai naudinga testavimui, bet visada įsitikinkite, kad imtis jį prieš publikuoti ką nors internete. Taigi, kai jūs naudojate kažką kaip PHP, ten ši idėja kad galite pereiti informacija tarp tinklalapių išleidimą informaciją tikrųjų URL, kuris yra GET prašymas, bet kolbą, jūs iš tikrųjų galite padaryti kažką tarsi panašaus, turėdami maršrutą, kuris turi kintamasis kaip jo dalis. Taigi, jei jums pažvelgti į tai pavyzdys ekrane čia turime maršrutą, kad yra ('/ Hello / "), ir taip, jei lankotės / Hello / kažkas, kad kažkas ketina faktiškai gauti įdaryti į vardo kintamasis. Ir pastebėti, kad funkcija kuris ateina su šio maršruto turi atsižvelgti į parametro pavadinimą, kad jis bus iš tikrųjų gauti išlaikė į funkciją. Ir tada, kai jūs viduje tą funkciją, galite elgtis, kad kaip normalus Python kintamasis, ir taip, tada, ji bus spausdinti Sveiki, ir jis bus užpildyti pavadinimo, naudojant kai styginių formatavimas. Taigi, norint pridėti kintamą dalių frezavimo, jūs naudojate skliaustų ženklu. Ir pasirinktinai, galite naudoti tai, kas vadinama konverteris. Ir taip, jei jūs įtraukėte tai Anotacija su dvitaškiu, galite nustatyti, kad jis int arba plūdės, arba kelias, ir ji bus automatiškai konvertuoti, kad. Jūs taip pat gali tai padaryti konversiją per Python funkcija, tik naudojant mesti, bet kartais, jei Jūs norite įsitikinti, kad tai int, galite įdėti, kad perskaičiavimo taisyklė ten. Taigi leiskite atsigriebti pavyzdį Kai kurių kintamųjų taisykles. Taigi čia, tai turi tą pačią pagrindinę konstrukcija su nuo Flask importo Gertuvės, app = kolbą (_NAME_) ir tada jis veikia pabaigoje. Mes turime šias dvi skirtingas kintamos maršrutai čia. Ir pirmasis, yra vienas, kad aš parodžiau skaidrių, kuris buvo, kad jis tiesiog trunka styginių pavadinimas ir jis bus išspausdinti Sveiki, vardą. Ir tada, antrasis vienas naudoja konversiją. Taigi, tai bus automatiškai konvertuoti jį į int, tada dvigubai int, ir spausdinti, kad iš. Ir mes nedarome jokios rūšies atsivertimo joje nes kolba rūpinasi, kad. Taigi galime gauti šioje bėgiojimą. Jei turite kolbą taikymas veikia, Jūs galite kontroliuoti-C iš jo sustabdyti serverį, kuriame veikia. Ir tada aš bėgsiu kintamuosius. Taigi eikime į localhost / Hello / Ezra ir Tikimės, kad tai bus pasakyti labas man. Taigi jis paėmė mano vardu, pagal kintamąjį rodiklį maršrutas, ir jis užpildytas jį čia. Taigi aš taip pat rodo, greitas pavyzdys dvigubai. Taigi, jei jūs einate į / double / 3, ji bus išspausdinti 6. Taigi, šis rūpinosi už mus konversijos. Taigi jūs taip pat gali tai padaryti su plūdė, ir kažkas ypatingo, jei jums reikia nurodyti kažką panašaus kelias, kuris leidžia jį priimti slešų bet paprastai nėra problema. Iki šiol mes vis dar turime tik buvo grąžinti įsipareigojimų, kurie nėra labai įdomūs. Mes iš tikrųjų gali grįžti pažodinis HTML eilutė. Taigi kodas galime įterpti kažką kaip B-žymė, kad ji drąsus, bet dauguma to laiko, kai ne iš tikrųjų nori būti raštu HTML kodą Jūsų Python kodą. Tai bus tikrai nepatogus, ir tai nėra geras laikas. Gertuvės leidžia mums atskirti out HTML į tai, kas vadinama Šablonas, ir todėl, jei jūs galvojate kalbant apie MVC modelį kad esate susipažinę su, Tikimės, kad iš darbo su CS50 Finansų šiek tiek, Jūs galite galvoti apie Python'o failai kaip daugiau kontrolieriaus, kur jie bendrauja su kokia duomenų modelis jums gali turėti. Ir tada jie skambina dėmesį į Peržiūrų ir pakeleivingi informaciją šiai Peržiūrėti užpildyti informacijos HTML, kad ji turi. Ir ką mes vadiname tuos Peržiūrėjo yra šablonai klasėje. Taigi kolba naudoja kitą Python modulis, kuris jis bus automatiškai įdiegti kai PIP įdiegti Gertuvės vadinamas Jinja, kuris leidžia jums pridėti tai anotacijos į HTML kad jūs matote ekrane, kuris leidžia jūs įtraukėte į tokius dalykus kaip sąlyginių, ir kilpos į HTML. Taigi atrodo šiek tiek panašus, kaip jūs gali naudoti PHP per HTML failą, tačiau tai yra tik tada, kai kolbos serveris aptarnauja HTML failą, jis bus rodomas šį šablonų variklį ir išanalizuoti per tai ir užpildyti dalykų. Taigi kolba turi render_template funkciją kad jūs galite pamatyti apačioje čia. Ir todėl, kai jūs lankotės šį puslapį, ją taptų šį hello.html šabloną, ir tada užpildyti šią HTML puslapyje. Taigi tegul tiesiog paleisti šią realus greitai, ir pamatyti, kaip jis atrodo, ir tada aš eiti per šiek tiek išsamiau. Taigi, jūsų Šablonai vyksta eiti į Templates aplanką. Jis bus automatiškai ieškoti per Šablonai už tą šabloną. Taigi leiskite atidaryti tai padaryti. Taigi, aš paleisti šablonų pavyzdys. Taigi, jei aš einu į / Hello / Ezra, ji turi tai siaubinga, nemalonus markę žymė, kad aš įdėti. Labai gražus, labai dinamiška. Aš esu didelis gerbėjas. Bet kas atsitinka, jei Aš tiesiog eiti, / labas? Taigi jis tiesiog sako Hello World ". Aš nepriėmė jai pavadinimą, o Jis pripildė jį automatiškai. Taigi pažiūrėkime, kaip jis padarė, kad ir kaip mes galime atsikratyti, kad marquee gal. Taigi čia, tai yra rūšiuoti įdomi pavyzdys, jei esate susipažinę su, kaip jungiklis pareiškimai dirbti kalba. Pasakykite tai tarsi kaip, kad kritimo per rūšiuoti, kur jūs iš tikrųjų dviem pridedamais skirtingi maršrutai į tą pačią funkciją. Taigi, mes pridėti "/" Hello maršrutą ir Raktas / Hello / vardas maršrutas Sveiki, ir mes nurodome using-- Python leidžia jums nurodyti numatytąjį funkcija arguments-- taip, jei nėra vardas, todėl jei mes einame tiesiog / Sveiki, ji bus automatiškai filtruoti pavadinimą yra lygus Nėra. Taigi, mes sugadintos Šablonas su name = vardas, todėl bus pereiti į parametrą vardas lygus šio vardas funkcijos parametras, į šabloną. Tai vis dar nepaaiškina, kaip yra Sprendžiant, ar spausdinti Hello World, arba spausdinti mano vardą. Tad iš tikrųjų atrodo į patį šabloną, ir pamatyti, kur tai yra iš. Taigi, per šį šabloną, mes iš tikrųjų turi tam tikrą sąlyginį logiką, kurį kai kurie žmonės teigia, jūs iš tikrųjų neturėtų turėti sąlyga daug logika pačiame savo šabloną. Ji turėtų būti daugiau per Valdiklis, bet šiame pavyzdyje tai kažkas gana mažas. Taigi čia mes tikriname, jei vardas, todėl jei pavadinimas yra ne lygūs, nė jei pavadinimas yra iš tikrųjų praėjo, tada mes pasakyti Sveiki, pavadinimą su antraštės ir palapinė, visa tai normalus HTML, priešingu atveju, mes spausdinti Hello, World tiesiog normaliai. Taigi pora dalykų, kuriuos pastebėsite čia apie tai, kaip galite formatuoti šablonų sistema, yra tai, kad, visi šie sąlyginiai teiginiai, tarsi tai, kaip mes jį, kai PHP norite įterpti šiek tiek PHP, Jūs naudojate mažiau nei klausimo ženklas, tai tarsi analogiška čia su {%. Taigi čia mes turime sąlyginį kodą. Ir tada, kai jūs iš tikrųjų norite tiesiog įvertinti kažką, ir spausdinti jį į ekraną, galite naudoti dvigubus skliaustus. Taigi čia yra dviviečiai petnešos, ir tada mes nurodyti vardą, taip, kad per, ji bus įvertinti kintamojo pavadinimu, kuris buvo priimtas iš suteikti šablono funkciją, o ne tik spausdinti su sąlyga, jei mes atsikratė jų tai tiesiog atsispausdinti žodį "Pavadinimas". Taigi, kad kažkas saugotis. Taigi dar vienas dalykas, pranešimas yra tai, kad, kai mes norite naudoti render_template funkcija, mes iš tikrųjų turime importuoti tai aiškiai iš kolbą. Ir šis yra pavyzdys Kolbos modalumas, kad jūs neturite importuoti dalykų, kad jums nereikia. Jūs galite tiesiog atnešti į funkcijos, jūs iš tikrųjų do reikia, kuris yra kartais gražus, taigi jums nereikės turėti visas šias funkcijas sėdi aplink, kad jūs nenaudojate, bet taip pat, jei pamiršti, kad jums reikia importuoti render_template, jūs tikriausiai gauti įspėjimą kuri leis jums žinoti apie tai. Taigi, kad yra struktūravimo. Taigi, mes parodyta, kaip padaryti paprasta tinklalapius, ir pridėti šiek tiek daugiau logikos tai, kalbant apie kintamojo maršrutą. Tai leidžia jums padaryti skirtingus dalykus remiantis ką URL eiti, taip pat tada, suteikti HTML šiek tiek daugiau prasmės sąlygos, kaip jūs norite padaryti dalykus. Jūs neturite įdėti visus HTML į savo Python, bet gana daug kiekvienas interneto paraišką, jūs ketinate nori kažkokios duomenų modelį, susijęs su juo. Ir taip tradiciškai, tai kažkas panašaus į SQL duomenų bazę. Ir jūs galite tiesiog bendrauti tiesiogiai su SQL. Python yra, manau, ji vadinama. SQLite 3. Jūs galite tiesiog importuoti SQLite 3 vykdyti SQL užklausas tiesiogiai bet aš nežinau apie jus, bet aš tikrai nepatinka, tiesiog, raštu iš SQL užklausas. Ji linkusi gauti tikrai ilgas ir sudėtingas. Ir taip, kažkas, kad Man patinka naudoti yra kas žinomas kaip ORM, kuris yra Objektinis relacyjne. Ir tos taškas Objektinis relacyjne, tai, kad yra dvi skirtingos, būdų, galite galvoti apie duomenų bazes. Taigi pateiktame pavyzdyje kad Profesorius Malan paprastai naudoja klasėje, yra "Excel" lentelė, kurioje jūs turite šiuos eilutes ir stulpelius šiuos, ir tai tikrai naudinga kaip ji yra atstovaujama SQL ir kaip jums bendrauti su juo, bet kitas būdas, kad jis iš tikrųjų naudinga galvoti apie tai kartais, yra pagal klases ir objektus. Taigi vietoj mąstymo Kiekvienos lentelės kaip turintys Ši eilutė, kuri turi tam tikras informacija, jūs iš tikrųjų galite galvoti apie tai, kaip Kiekviena lentelė yra klasės, ir tada kiekvienas egzempliorius klasė turi tam tikras savybes. Taigi, šiame pavyzdyje, egzempliorių klasė yra Lentelės eilutės, ir tada kiekvienas butu būti lentelėje stulpelis. Taigi, ORM, kad man patinka naudoti vadinama Peewee. Tai tikrai mažas, tarsi kolbą. Manau, kad jie eiti gerai kartu, tačiau yra daug kitų ORMS daug kad jūs galite naudoti. Daugiau populiarus vienas yra žinomas kaip sqlalchemy, ir aš negaliu prisiminti, kodėl aš iš pradžių pasirinko Peewee per sqlalchemy, ar aš norėčiau jums pasakyti, kodėl aš manau, kad tai geriausias, bet mes tik ketina naudoti šią vienas, nes žinau, kaip jį naudoti. Taigi, vienas klausimas, kodėl jūs turėtumėte nerimauti naudojant ORM, o ne tik tiesiogiai rašyti SQL užklausas? Ir aš manau, geriausiu atveju, yra ta, kad jūs neturite iš tikrųjų turi rašyti SQL užklausas. Tai daug lengviau, nes aš jums parodysiu, į daryti tokius dalykus kaip atrankos, įterpimo, išbraukta, ypač kuriant lenteles. Tai daug lengviau parašyti klasės struktūrą, nei ji yra susisteminti Sukurti Stalo pareiškimas, bet vienas dalykas, žinoti, yra tai, kad ORM bandys jos geriausiai išsiaiškinti, kas labiausiai efektyvus SQL užklausos būtų, bet kartais tai gauna tai negerai. Ir ypač jei esate dirbti su didele duomenų bazės, galite pastebėti, kad užklausos kad turėtų būti paleistas greitai, iš tikrųjų trunka ilgiau. Ir jei jums atrodo po kapotu, kaip ORM aiškina, kad į SQL, jis gali būti darai kažką tikrai juokinga, Tiesiog todėl, kad tarsi judesių jūsų ketinimai negerai. Ir ten buvo laikas, kai Turėjau jį pakeisti, ir tik vykdyti savo pačių SQL užklausas, tiesiog nes jis buvo apdorojant keistu būdu. Taigi, yra keletas važtaraščius, tik tokiu būdu kad ji kaupia savo ataskaitos žemyn į SQL. Taigi, pažiūrėkime super greitai ne paprastas pavyzdys duomenų modelio kad galite naudoti. Taigi, tai yra Python kodas, ir taip Pirmas dalykas, kurį norite padaryti, tai iš Peewee importas *. Taigi, skirtingai kolbą, kur jūs turite visi šie atskiri moduliai, ir norite importuoti kolbą ir rašyti šabloną, ir kai kurie kiti kad matysime vėliau, nuo Peewee, galite tiesiog importuoti viską, nes tai gana nedidelė biblioteka. Taigi, pirmas dalykas, kurį norite padaryti, tai iš tikrųjų sukurti šią duomenų bazę objektą. Taigi, jūs turite db = SqliteDatabase, ir tada savo duomenų bazės pavadinimą. Ir tai tikrai bus sukurti duomenų bazės objektą kad jūs galite bendrauti su, su Peewee. Ir tada, mes turime tikrasis modelis, kad mes norime sukurti. Taigi lentelė norime sukurti. Taigi, per Peewee, kiekviena klasė turi savo stalo per savo duomenų bazę. Taigi, visi klasių paveldėti iš bazinio modelio, ir kapitalo M modelis kažkas, kas apibrėžta Peewee. Taigi, visi jūsų modeliai turėtų paveldės jų aukščiausiu superclass, jie turėtų paveldėti iš modelis, bet kas tikrai cool, yra ta, kad jūs iš tikrųjų galite turėti savo modeliai paveldi vienas iš kito. Ir daug laiko, jūsų duomenų modeliai nebūtinai padaryti gražus paveldėjimo hierarchija, tačiau laikas, kai jie tai padarys, tai tikrai gražus, nes jūs turite modelį neatskiriamas nuo kito. Taigi, mes apibrėžta šioje klasėje "studentas", kuris paveldi modelį, ir ji turi tris savybes. Ji turi ID, kuris yra PrimaryKeyField, kuris yra kažkas, kad yra teikiamas iki Peewee, vardas yra CharField, ir laipsnio yra IntegerField. Taigi, tai gali būti arba gali nebūti kaip CS50 tikrųjų kaupia visus studijuojančiųjų rūšių. Tai nėra, bet tai yra, kaip aš tai padaryti. Ir tada ji turi per ši klasė, ir tai yra kažkas, ką galima padaryti su Python, jūs galite turėti įdėtos klases. Ir tai yra kažkas, kad manimi reikalauja Peewee. Taigi, ši klasė meta, turite nurodyti, kad duomenų bazė yra lygus objekto kad mes sukūrėme virš. Ir tai sako, ką failas yra ši lentelė iš tikrųjų bus pateikiama. Taigi, tai yra kažkas, kad jūs turite padaryti per visus savo modelių. Jums tereikia nurodyti, per šį Meta klasės kad duomenų bazė yra lygus dB. Taigi, ką aš paprastai padaryti, jei aš turiu įvairių modelių krūva, yra tai, kad aš turiu vieną bazę modelis, aš paprastai tiesiog vadina "bazinis modelis" kad turi Meta klasę, ir jis nustato duomenų bazę, lygią dB. Ir tada visi mano vėlesnių modelių paveldės iš tos pagrindinės klasės. Ir tada aš neturiu nerimauti apie nustatant Meta klasę. Taigi, kai tai iš tiesų gauna parengė žemyn į SQL, atrodo, kad šį nemalonus dalykas žemyn čia "CREATE TABLE studentas ID sveikasis skaičius, "Nesvarbu. Ir, manau, kad jis yra trumpesnis, tai SQL užklausos čia, bet jei pažvelgti į šią klasę čia jūs galite pamatyti tiksliai, kas vyksta. Jūs galite pamatyti, kas rūšių srityse yra, ką jie vadinami, ir taip, manau, kad žiūri šį Python kodas yra daug aiškesnis nei bando parašyti šį SQL užklausa. Taigi, tam, kad iš tikrųjų naudoti duomenų bazę, mes turime prisijungti prie jo per Python. Taigi, aš paprastai parašyti funkciją, vadinamą initialize_db, kad daro du dalykus. Tai užtrunka duomenų bazėje objektas db ir jis prisijungia prie jo, kuri tiesiog atsidaro iki skyriuje į duomenų bazę. Jei jūs tik veikia, nors svetainė jūsų vietiniame kompiuteryje, tai ne super baisi jaudintis apie prisijungimo ir atsijungimo, bet jei dirbate jis apie svetainę, galite norite įsitikinti, kad, kai vartotojas prisijungia prie jo, kai jie uždaryti svetainė, jie atjungti taip, kad jūs neturiu žmonių, susijusių krūva į savo duomenų bazę visus iš karto. Ir tada, kai jūs prisijungti prie duomenų bazės, norite skambinti db.create_tables, ir išvardinti modeliai, ko norite kurti lenteles. Taigi čia, aš tik noriu ją sukurti šiam studentui. Ir tada, kas svarbu, yra nurodyti saugų = true labiausiai laiką. Taigi, ką šis pareiškimas bus padaryti, yra tai, kad sukuria lenteles studentas modelis, bet tik jei ši lentelė neturi buvo sukurta jau. Štai ką saugios patikslinama. Taigi jis nebus perrašyti Jūsų esamą lentelę, tai bus tik sukurti naują stalo, jei yra ne vienas ten. Taigi, galite tiesiog sukurti lentelės kartą naudojate SQL. Ir tada turi tą duomenų bazę posėdį ten, ir tada prisijungti prie kiekvieną kartą, bet tai paprastai gražus tik įdėti į šį create_tables skambučio, taip, kad, jei jūs kada nors trinti savo duomenų bazė, kai paleidžiate savo interneto App vėl, ji bus atkurti jį. Taigi, tiesiog įsitikinkite, kad saugūs yra nurodyta, kad gali būti tiesa, ar jums surasti jūsų duomenis tik gauti clobbered kiekvieną kartą. Ir tada, jūs tiesiog galite skambinti initialize_db nustatyti ryšį ir sukurti stalai, jei reikia. Taigi, labiausiai paplitęs dalykas kad jūs norite daryti, arba vienas iš labiausiai paplitusių dalykų, yra iš tikrųjų įdėkite dalykus į savo duomenų bazę. Ir taip, o ne rašyti įterpti į pareiškimas su visais nurodytų verčių, jūs iš tikrųjų galite skambinti funkcija studentų klasėje. Taigi, kai jūs sukuriate klasę kad paveldi iš modelio, ji turi tai sukurti metodą. Taigi, jūs padaryti klasės name.create, ir jūs nurodote parametrus kad norite pereiti į. Taigi, jei aš noriu pridėti šiek tiek studentams mūsų CS50 laipsnio knyga pavyzdžiui, Aš įdėti Dovydo, kuris turi labai geras kokybės, jis turi 95. Ir aš, kas yra ne daro taip gerai CS50, turiu 50. Ir taip, Gražus dalykas, apie ką tai sukurti funkcija daro, tai, kad ji grąžina atvejį, arba eilutė, kad ji sukurta lentelės viduje, ir taip, tada jums laikyti, kad A kintamasis, ir dirbti su juo vėliau. Jūs galite pakeisti aplink, kuri Aš rodo pavyzdys. Atkreipkite dėmesį, kad aš ne turi nurodyti adresą, nes, nes ji yra PrimaryKeyField, jis automatiškai prieaugio, jei nenurodysite ją. Ir, tiesą sakant, jūs tikriausiai neturėtų nurodyti ją, nes galite netyčia Bylų kažkieno ID. Ir jūs norite įsitikinti, įsitikinkite, kad jis yra unikalus. Taigi, iš tikrųjų, labiausiai dažnas dalykas, kurį norite padaryti, tikriausiai pasirinkti iš Duomenų bazės, kai jūs turėti daug informacijos ten. Ir taip, jei norite gauti viską, taigi pasirinkite žvaigždė lygiavertį iš studentų pareiškimą, ją būtų tiesiog student.select. Ir kad duos jums atgal masyvą su visais studento objektai jame kad jūs pakartoti per norite. Jūs galite gauti dalykų iš jo. Ir dauguma laiko, jums ne tik nori daryti pasirinkite, jūs iš tikrųjų norite nurodyti kažką. Ir taip, jūs galite grandinės Kartu šie funkciniai ragina pavyzdžiui, kaip tai darytumėte grandinės kartu su SQL sakiniais. Taigi jūs galite padaryti student.select (). Kur Šiame pavyzdyje. Ir tada, jūs galite nurodyti sąlygas, tik naudojant įprastą Python Loginę patikrinti dalykus. Taigi, šiuo atveju, jūs norite apriboti, ką jūs pasirinkdami kad, kur student.grade yra lygus 50, ir student.name yra lygus Ezra, taip, kad tiesiog mane iš jo. Ir pastebėsite, iš tikrųjų subtilus dalykas čia yra , kad jei norite nurodyti ir / arba ir / arba, arba, Python, jūs paprastai naudoti, Manau, kad žodis "ir" iš tikrųjų, bet čia jūs naudojate bendrą ampersendo, kurie paprastai yra Bitinis operatorius, tačiau šiuo konkrečiu atveju, tik būdas Peewee daro, Jūs naudojate vieną Ženklas nurodyti "ir". Štai kažkas, kad Aš įsipainioti daug, bet ji ne sugalvoti kad daug praktikoje. Ir tada, kai jūs turite visus kad iš duomenų bazės studentų, Kai tai padarysite, jūs pasirinkite ir jūsų drabužiai ar kas, galite naudoti foreach ciklą, kaip normalus Python, su bet iteratoriaus rūšiuoti arba su bet masyvas rūšiuoti. Taigi jūs galite padaryti, už s į student.select (). whe Re (Student.grade <75), ir taip tai bus kartoti per kiekvieną lentelėje studentas kurio laipsnio yra mažesnis nei 75, kuris šiuo atveju, yra dar tik man. Ir tada jūs galite padaryti kažką per kad kilpa, kaip siųsti man laišką ir pasakyk man, iš tikrųjų kreiptis į mano problema rinkinių. Taigi, dar vienas dalykas, jūs galite padaryti, tai tikrai lengva atnaujinti eilučių viduje lentelėje. Taigi, nepamirškite grįžti čia, Jūsų kai aš įdėta, Aš paėmė vertę, kuri buvo grąžinti student.create, ir aš priskirti jį praminė Ezra. Ir todėl dabar, galite pakeisti vertės toje Pavyzdžiui, kaip jūs darytumėte normalus klasė Python. Taigi galite nustatyti ezra.grade = 95 ir kad bus atnaujinti vietinį kopiją, bet jei jūs iš tikrųjų norite įsipareigoti, kad pokyčiai į duomenų bazę, jūs turite skambinti ezra.save, todėl jūs vadinamas .save metodas ant pavyzdžiui. Ir todėl dabar, aš sėkmingai pakeistas mano paties laipsnio per duomenų bazę. Taigi, tada tarkim, kad aš pagaus keisti savo klasę per duomenų bazę. Profesorius Malan tikriausiai vyksta nori ištrinti mane iš klasės, ir todėl jūs galite skambinti į .delete instancija metodas tik tą dalyką. Taigi, jei jūs norėjo eiti Atgal į šią kilpą čia ir iš tikrųjų, o ne siųsti laiškus visas studentų, kurių kategorija yra mažiau nei 75, jūs norėjote juos pašalinti, per šį kilpa galėtumėte skambinti s.delete instancija. Ir paskutinis dalykas, kurį norite padaryti, yra kai jums užmegzti ryšį, ir baigsite su jūsų darbu, norite skambinti db.close, kur db yra tai, kad duomenų bazė nesutikti, kad mes turėjome anksčiau. Ir jūs norite įsitikinti, kad viskas užsidaro iš. Saunus. Taigi dabar turiu pavyzdį paraišką. Aš tarsi iš anksto padarė viską, ką tik taip, kad nebus bet gyva kodavimo klaidų, tačiau mes galime vaikščioti per IT ir pamatyti, kaip jūs įdėti kolbą ir Peewee kartu, ir padaryti paprastą programą. Aš tai vadinu CS50 Rant, ir tai Rūšiuoti paprastą dienoraštį platforma. Taigi, pirma, aš ją ir parodyti, kaip jis atrodo, ir tada mes galime žiūrėti daugiau į kodą. Gerai, kad tegul tiesiog paleisti tai. Šaunu, aš padaryti šį šiek tiek mažesnis. Tai nėra labai gražus, tik todėl, kad Aš nepadarė CSS daug, bet ką ji daro, ji turi Šis dienoraščio duomenų, ir jis eina per visus juos, ir jis bus rodomas juos ant tam naujausiais puslapyje. Ir taip tai tik keletas pranešimų kad aš išsaugomi duomenų bazėje. Taigi, jei norime sukurti naujas paštu, mes galime eiti į Įdėti naują skelbimą, ir mes galime įvesti pavadinimą paštu, todėl kažkas panašaus, CS50 seminaras. Oho, tikrai patinka seminarą. Saunus. Tada paspaudžiate postą, ir ji bus nukreipti jus atgal į pagrindinį puslapį, ir tada pamatysite, kad vėliau įrašas buvo pridėta. Ir mes vis dar turime visas ten tie. Taigi dabar, tegul žingsnis per visus pamatyti, kaip tai įgyvendinama kodas ir. Taigi, manau, kad pirmas dalykas, kad tegul pažvelgti, iš tikrųjų modeliai išvaizdą. A daug laiko, kai Jūs kuriate kažką, norite galvoti pirmiausia apie tai, kaip jūs ketinate atstovauti savo duomenis, ir tada sukurti dalykų aplink, kad taip, kad viskas turi prasmę. Ir tai yra iš tikrųjų, kaip aš tai padarė, kai aš buvo padaryti tai, Atsisėdau ir maniau, Ką aš noriu į postą. Taigi, čia, mes turi tą pačią struktūrą kad man buvo paminėti anksčiau, kur mes db = Sqldatabase (posts.db). Iš tikrųjų, jūs tikriausiai nenorite kietojo kodą savo vardą duomenų bazėse. Tai tikriausiai turėtų būti parametras kad manimi kažkur, gal į config failą, bet mažas pavyzdys, kaip tai, tai gerai, kad kietajame kodas, kad. Taigi dabar mes turime šį Rašyti klasę, kuris paveldi iš bazės modelis. Ir ji turi, dar kartą, ID = PrimaryKeyField. Tiesą sakant, jei nenurodysite, jei aš iš tikrųjų atsikratė tai, tada Peewee mes pasirūpinsime automatiškai sukurti, kad ID lauką, ir jis bus automatiškai padaryti jį PrimaryKey, kuris Manau, tai tikrai gražus, nes paprastai, tai ką jūs norite turėti, bet man patinka įdėti ją į konkrečiau, tiesiog taip aš prisimenu, kad jis yra ten. Bet jei jums nereikia nurodyti, kad, kad ten bus automatiškai. Taigi, turiu datą, kuri yra DateTimeField, ir visi Šie skirtingų sričių, jeigu jūs pažvelgti į Peewee dokumentus, tai duosiu jums skirtingas sąrašą tipų srityse, kad jūs galite naudoti. Nes didžioji dalis, tai analogiškas ką galėtumėte pamatyti SQL. Taigi yra CharField A VarCharFields, textfields, kurios yra labai ilgai tekstai, kaip dienoraštyje potencialiai DateTimeFields, DoubleFields, FloatFields, viskas patinka. Ir jūs galite pereiti į kitų argumentų jai, kurį aš nenurodė čia. Pasakyk, pavyzdžiui, jūs nenorėjo leidžia du pranešimus, kad tą patį pavadinimą, galima nurodyti kažkas panašaus unikalus = Tiesa, ir tai tik papildomas parametras lauke, kad kai jis kaupia jį žemyn į SQL, ji bus nurodyti , kad ji turi būti unikalus. Jūs taip pat galite nurodyti kažką panašaus nėra niekinis ir visi kiti dalykai paprastai padaryti SQL. Taigi, tai yra gana paprasta modelis, kuris turi datą. Atkreipkite dėmesį, čia per DateTimeField, Aš nurodyta, kas pagal nutylėjimą yra. I nurodyta, kad ji būtų datetime.datetime.now, dėl to, kad taip, kad Tai pasireiškia vertinami, ji iš tikrųjų įvertina datetime.now kai ji pasireiškia įdėta į duomenų bazę. Manau, kad aš turiu patikrinkite tai, bet jei tu kažką panašaus į tai, tada ji iš tikrųjų būtų įvertinti, kad vieną kartą, ir tada datetime visada būtų ta pati. Taigi, tiesiog, jei jūs darote kažką su datetimes, patikrinkite kad ji vertinti, kai iš tikrųjų gauna įdėta, ar kitur jums gali būti supainioti. Pavadinimas yra tik CharField, kuris yra yra daugiau argumentų galite pereiti nustatant taisykles tiksliai, kaip ilgai jūs noriu, kad ji būtų, bet čia ji tikrai ne klausimas. Ir tekstas bus visos postą tekstas, ir kad ketina būti TextField tik todėl, kad norite kad ji galėtų būti gana ilgą eilutę. Tada mes turime šį Meta poklasis, kad tik nurodo, kad mes norime duomenų bazę jei tai yra iš tikrųjų atvėrė į būti DB objektą, kad mes turime čia. Ir paskutinis dalykas, kurį mes turime čia yra tik ši funkcija kad mes ketiname naudoti mūsų pagrindinis app inicijuoti duomenų bazę prisijungti prie ji, o tada, kad sukurti Pranešimo lentelę. Dabar pažvelkime į patį pagrindinį app. Taigi tai viena yra gana tiek ilgesnis negu tie, kad mes matėme anksčiau, bet tikiuosi ne per blogai. Taigi, leiskite man pratęsti this out. Gerai. Taigi, pastebėti ir viršutinis Aš importuoti visa krūva kitų dalykų nuo matavimo kolbą, mes turime ne tikrai matęs. Ir tikiuosi, mes galime eiti per kiekviena vienas iš šių vienas po kito ir kalbėti šiek tiek daugiau apie juos, surūšiuoti pagal pavyzdį. Taigi, mes turime į kolbą, ir render_template, kurį mes matėme anksčiau, šis prašymas objektas, kuris ateis, kai mes pažvelgti, kaip forma, kad aš rodžiau iš tikrųjų veikia. Nukreipimo, kuri leidžia jums nukreipti atgal nuo Sukurti naują Post atgal į originalią puslapį, ir tada URL, kuris yra kažkas, kad leidžia jums išsiaiškinti, kur dėl svetainė konkretus puslapis yra. Taip, tada, kitą dalykas, aš padaryti, tai aš importas visi iš modelių informacijos failai, mes buvome tik ieškote. Ir, taip. Taigi, kažkas naujo, kad ateina iki kada jūs susiduriame su, ypač duomenų bazių, yra, kad jūs galite nurodyti funkcija, kuri pasireiškia vadinamas prieš kiekvienas prašymas, ir funkcija, kuri gauna vadinamas po kiekvieno prašymu naudojant šią Funkcija Apdailininko app.before prašymas. Ir todėl tai bus gauti įvykdytas kur ši funkcija yra. Tai nebūtinai turi būti vadinamas prieš prašymu bet paprastai tai kažkas protinga jį vadiname. Galite nurodyti nepriklausomai funkciją norite gauti ten vadinamas, todėl aš nurodyta šio initialize_db funkcija, kad mes turėjome grįžti modeliai failą, todėl prieš kiekvieną prašymą, jums norite prisijungti prie duomenų bazės. Yra du skirtingi būdų, kaip galite tai padaryti. Jūs galite tai padarytiapp., I manome, kad tai after_request. Ir skirtumas tarp after_request ir teardown_request, yra tai, kad after_request atsitiks tik tuomet, jei prašymas buvo faktiškai galioja. Ir taip, tik jei Prašymas buvo patenkintas, jei nieko blogo, bet teardown_request atsitinka dėl sėkmingas atveju prašymu arba dėl klaidos atveju. Taigi, paprastai, norite naudoti teardown_request, nebent jūs norite daryti kažkas, ypač skiriasi į klaidos atveju. Bet tik uždarant duomenų bazę, ar tai pavyks, arba jei tai nepavyksta, mes darome norite atjungti iš duomenų bazės. Taigi ji vadinama, db.close DB objektą. Atkreipkite dėmesį, kad teardown_request trunka išimtis. Taigi, galite patikrinti, ar iš tikrųjų buvo klaida, kai buvo uždaryti, bet čia, tikiuosi, ten yra ne visai daug klaidų, todėl mes tiesiog tarsi ignoruoja tai. Gerai, o likusios nėra labai blogai. Taigi, kai mes einame į pagrindinį puslapį, mes lydyti šį home.html šabloną kad bus atverti. Leidimas yra postą lygus ir kas tai daro, yra, nepamirškite, kad turime šį postą modelis, todėl pasirinkite visus pranešimus, ir tada kitas dalykas, kurį galite padaryti, Jūs galite nurodyti WHERE, Galite nurodyti mokėti su, ir taip mes visi pranešimų, kad gauti pasirinkta, tada mes juos užsisakyti, padarytais post.date.descending. Ir tai bus nurodyti, kai jie iš tikrųjų išeiti, naujausi vienas bus labai pirmasis. Ir tada, mes pereiname, kad į home.html šablonas, tad iš tikrųjų atverti Šis modelis tikrai greitai, ir pažiūrėtų į tai, kaip, kad manimi dirbti išvaizdą. Ir tai ne puikus HTML, bet tikiuosi, mes galime sutelkti dėmesį į Python. Taigi ten nuoroda į pridėti naują Pašto, ir todėl tai nurodo maršrutą per kolbą, kad mes nustatyti, kuris yra čia. Tai yra naujas pranešimas maršrutas, ir mes nurodome, kad čia. Ir taip, kad yra nuoroda, kad bus tada eiti tai per Flask serverio maršruto. Kuo daugiau įdomus dalykas tai už kilpos čia. Taigi mes nurodome, kad ši Pranešimo parametras, buvo priimtas į render_template funkcija, už kiekvieną postą Post objektas, gauna praėjo. Mes norime spausdinti post antraštinė dalis, H1, ir tada toliau, norime atspausdinti post tekstas per dalį. Ir čia mes galime iš tikrųjų skambinti Python funkciją, todėl mes galime skambinti strftime ST-RF-laikas, ir jūs galite pereiti į format string kad norite spausdinti duomenis iš visų. Taigi, tai yra gana malonu, kad jūs galite iš tikrųjų tai vadina Python funkcija nuo per čia. Jūs neturite daryti formatavimą nuo valdytojas pusėje, nes tikrai, formatavimo datą yra kažkas, kad norite elgtis per View. Ir visi šie proc dalykai yra ne itin svarbus. Jei jums surasti dokumentus už strftime funkcijos Python, jame nurodoma visa tai dalykai, bet tai kaip, kada mes ieškojome ne pagrindiniame puslapyje čia jis formatai tai su gražus data, ir ji nurodo AM arba PM, bet paprastai, jei mes neturėjo tai čia jums tikriausiai kažkiek šiukšlių data, neatrodė labai geras. Ir tada mes nurodėte post.text, ir aš galėjau uždėjau porą eilučių lūžius čia, tiesiog įdėti keletą erdvių tarp kiekvieno posto. Taigi, manau, kad svarbiausia dalykas šiame pavyzdyje, yra, kad jūs galite naudoti šį kilpa. Ir tai yra analogiški dalykų, kuriuos galite padaryti, PHP. Galite pakartoti per, viskas tampa praėjo, ir taip, vietoj to, kad padaryti kopijuoti / įklijuoti, kopijuoti / įklijuoti visą HTML, Jums tereikia parašyti vieną kartą, o tada galite pakartoti per visus postus. Ir tai yra kažkas, įprasta, kad norite daryti, kai turite daug duomenų, yra tai, kad už viską savo duomenis, norite padaryti panašų dalyką. Ir tada, tik nepamirškite, kad, kai jūs norite spausdinti kažką aiškiai į HTML, galite naudoti dvigubos petnešos čia, bet tada, kai norite nurodyti kai informacija apie būklės, arba maždaug už kilpos, jums naudoti procentų laikiklį. Taigi, grįžta į Python kodas, taip, kad paaiškina kas vyksta pagrindinis maršrutas, kai mes ten, jis tiesiog parodo visus pranešimų, bet tada klausimas yra, kaip mes iš tikrųjų gauti pranešimų į duomenų bazę, kuri yra šiek tiek įdomesnis. Taigi, kai jūs spustelėkite Naujas Pranešimo nurodo, kurį mes matėme čia jis nukreipia jus į šią formą. Ir tai tik paprastas skambutis į render_template funkcija, kuri vėliau eina į naują postą HTML formą. Taigi tegul Tuo išvaizdą. Taigi tai viena yra gana paprasta. Jis turi paprastą HTML formą, kuri atrodys šiek tiek pažįstamas, grindžiami CS50 Finansų formų. Ir taip, mes nurodome čia veiksmą. Ir čia, jei jūs dirbate su PHP, paprastai, ją būtų kažkas panašaus, create.PHP, bet čia mes iš tikrųjų nurodyti maršrutą per Flask serveryje. Ir taip, šis maršrutas Atitinka į sukurti maršruto kad mes turime čia, o mes eiti į per sekundę. Ir taip, mes nurodome, kad tai POST metodas, nes mes norime siųsti Ši forma duomenis ir paprastai kai jūs siunčiate duomenis iš formos, Jūs galbūt norėsite naudoti post prašymą, tik todėl jums nereikia baigti su šiuo didelis, griozdiškas URL. Bet jūs taip pat galėtų naudoti GET užklausos, ir perduoti jį su kintama maršruto, bet formomis, tai malonu į pareigas prašymą čia. Ir taip, tada, kaip jūs būtų padaryti su HTML ir PHP, Jūs galite nurodyti šiuos teksto įvestis, ir galite nurodyti jų pavadinimą, ir tai yra pavadinimas, kuris bus gauti išlaikė į prašymo objektu per kolbą. Ir tada mes turime Pateikti mygtuką, kad sako paštu. Ir čia, pašto yra pavadinimas mygtuką, nes jis dienoraštyje, bet čia įrašas yra prašymas metodas. Taigi, ir yra tas pats žodis bet iš tikrųjų nesusiję. Taip Grįžtant prie Python kodu kai mes vadinamas sukurti metodą, pastebėti, kad čia jūs galite iš tikrųjų nurodyti per maršruto ar prašymas metodai kad norite priimti, ir todėl čia, galiu nurodyti, kad aš tik norite priimti Rašyti metodą. Taigi, jei aš iš tikrųjų stengiamės aplankyti puslapį tiesiogiai, kuris yra naudojant GET užklausos, tai pasakyk man, "metodas neleidžiama." Ir taip, jūs turite puslapius, tarsi tai sukurti puslapį, kuriame aš tik tikrai, naudojant kaip būdu forma gauti pateikimo dienos, galite nurodyti, kad jūs neturite kitų žmonių, kad būtų galima ten tiesiogiai per GET užklausos, arba jei nenorėjo, dėl kokios nors priežasties, pašto prašymas, galima tiesiog nurodyti GET čia bet šiame pavyzdyje, mes tiesiog noriu Post prašymas išeiti. Taigi, kai create_post vadinamas, kai mes aplankyti, kad per Rašyti prašymą, kai jūs einate į ypač maršrutas, ten šis prašymas objektas, ir mes turėjome importuoti prašymai pačiame viršuje, bet ten šis prašymas objektas, gauna praėjo, ir jūs galite prieiti prie formos duomenis, kuris automatiškai gausite užpildyti kai jūs siunčiate iš formos prašymą. Ir tada, ką aš manau, yra tikrai cool, yra kad forma objektas gauti praėjo į, yra tik Python žodynas kad sudėtyje yra, jei access-- todėl čia, tegul man atsigriebti HTML šalia jo, tiesiog todėl jūs galite turėti, kad kaip nuoroda, taip, todėl pavadinimai, kad mes nurodome čia už skirtingose ​​srityse, todėl, pavadinimas ir tekstas, mes tada tiesiog naudokite vyresnių nei čia kaip indeksai į formą duomenis. Taigi, kad super patogu. Taigi mes vadiname post.create, kuris bus sukurti ir automatiškai įterpti Tai naujas pranešimas objektas į duomenų bazę. Ir aš manau, kad tai sukurti funkciją čia yra tikrai cool pavyzdys, kaip galingas kolba ir darbo su tuo, nes jei darome kažką PHP programavimo kalba, gali tekti padaryti daug įteisinimo, jums reikės tada sukurti duomenų bazę, jums reikės tada vykdyti SQL užklausa, bet čia mes tiesiog tai gražus post.create, kurioje mes galime tada tiesiog gauti informaciją iš prašymo objektas, ir perduoti jį į naują rašyti, kad mes sukurti. Ir tada, labai paskutinis dalykas, mes norime padaryti, yra nukreipti vartotojas atgal į namus. Ir taip mes naudojame šią Gertuvės nukreipti funkciją. Ir kažkas, kad mes nematė anksčiau, buvo šios URL funkcija. Taigi funkcijai URL leidžia Jūs pereiti į faktiškai pavadinimas iš savo Python kodo funkciją, o ne tikru maršrutu, kad tai ne. Taigi, aš gali turėti taip pat lengvai nukreipti vartotoją velniop, kuri būtų siųsti jį atgal namo, bet naudojant URL funkcija yra gražus, nes jei keisti Vieta, kur viskas yra, Tarkime, kad aš pakeisti namų turi būti ne / home vietoj to, tai dar tada grįžti / Namai nes iš tikrųjų eina ir atrodo iki iš funkcijos pavadinimas, ir ji duos jums atgal URL už tai. Taigi, tarsi ant prielaida, kad esate labiau tikėtina, kad pakeisti, kur viskas yra, negu funkcijų pavadinimus. Galite naudoti tai tikrai gražus URL funkcija. Ir vienas dalykas žinoti kad yra šiek tiek sudėtinga, yra, kad jūs manote, kad galėjote tik skambinti nukreipti dėl URL bet iš tikrųjų visi maršrutų turi grįžti šiek tiek teksto ir HTML rūšiuoti, kad jūs iš tikrųjų turi grįžti peradresavimo skambutį. Priešingu atveju, jūs gausite kažką negalioja apie negrįžta eilutę, nes visi iš jų turi grįžti HTML jūs iš tikrųjų norite padaryti. Ir taip, kai skambinate peradresavimą, jis nukreipia jus į puslapį, bet ji iš tikrųjų grįžta į HTML Jums reikia įvykdyti, kad peradresavimas. Grįžti į pagrindinį puslapį. Taigi, mes turime šiuos du skirtingus požiūrius. Mes turime namų vaizdą. Arba, manau, turėčiau pasakyti šablonus. Mes turime šiuos du šablonus, namų šablonas, kuris rodo visus mūsų žinučių ir tada mes turime šį skelbimą dalykas, ir kai jūs spustelėkite įrašą, jis eina į naują maršrutas į kolbą, bet trasa nebūtinai turėti atitinkamą šabloną. Jūs neturite pamatyti nieko, bet jūs vis dar galite turi šis darbas vyksta užkulisiuose. Ir tada jums nukreipti Grįžti į pradinį puslapį. Ir tikrai, tai lengva dirbti kai gražiau CSS į šabloną ir padaryti tai atrodo daug gražiau, bet visi pagrindinio logika yra ten Python. Bet apie tai Pavyzdžiui klausimų? Žinau, kad yra daug skirtingi dalykai ten vyksta, daug dalykų mes nematė anksčiau, bet kaip nieko. Taip. AUDITORIJA 1: Ar turite ką nors padaryti ypatingą nušveiskite duomenis, kad yra Iš forma? Aš pastebėjau, jūs tiesiog pasakė: "sukurti" EZRA ZIGMOND: Taip, taip, kad tai iš tikrųjų, tai tikrai gera vieta. Taigi klausimas buvo, ar ne reikia patikrinti ir įsitikinti, kad duomenys galioja, ir padaryti jokios šveitimo rūšiuoti įsitikinti, kad jis galioja, nes kaip matote čia Aš ne tai, kad. Taigi pažiūrėkime, kas atsitinka, jei aš rašyti kažką tuščią. Taigi, jis bus iš tikrųjų tik padaryti tuščias postas ir užpildyti datetime. Taigi iš tikrųjų, jūs tikriausiai noriu padaryti kažką panašaus, gal nurodykite, ar pavadinimas yra lygus tuščia eilutė, tada nereikia daryti. Arba, tik tai padaryti, jei pavadinimas yra nėra lygus tuščią eilutę. Taigi iš tikrųjų nėra automatiškai rūpintis tuo plovimą už jus, todėl jūs vis dar reikia padaryti, kad. Taip, geras klausimas. AUDITORIJA 2: jis šveitimas už tęsinys injekcijos? Ar tu žinai? EZRA ZIGMOND: Tikimės, kad Peewee daro. Manau, kad tikrai būtų gana blogai biblioteka, jei jis nepadarė. Aš nežinau tiksliai. Aš turiu pažvelgti į užklausti, kad jis sukurtas. Manau, kad jei aš įvedėte A dienoraštyje, kad tarsi atrodė kaip SQL injekcijos išpuolių, kažkas panašaus į tai, jei tai yra tarsi slaptažodžio lauke ar kažkas, galite padaryti kažką panašaus į tai. Aš manau, kad bus dar gauti tiesiog parašė, bet manau, kad Peewee ar daryti kai šveitimo iš duomenų Rūšiuoti kol ji faktiškai vykdo ją. AUDITORIJA 1: Tas tekstas laukas yra sukurta imtis teksto, tiesa? EZRA ZIGMOND: Taip, ji yra. Taip. Taigi, manau, kad visi, todėl tai yra teisingas elgesys, kad bus padaryti, bet manau, kad Peewee tikiuosi daro padaryti kai apsaugos Rūšiuoti pagal jų pabaigos. Ir jei jūs norėjo patikrinkite, kad ten Yra būdų, kai jums sukurti užklausą. todėl jūs neturite vykdyti tiesiogiai. Aš turiu imtis pažvelgti dokumentus, bet jūs iš tikrųjų galite peržiūrėti SQL, kad jis yra generuoti, ir pažiūrėtų į, kad atrodo, ir kad įsitikinkite, kad jis yra pabėgti dalykų. Dar viena priežastis, kodėl jums gali nori pažvelgti į SQL kad Peewee yra išvedė, yra, jei viskas atrodo, vyksta tikrai lėtai, galite pažvelgti ir pamatyti, kas tai iš tikrųjų daro, nes tai kartais lengva netyčia pridėti į, tai, kaip rašote, galite netyčia jį pasirinkti visą duomenų bazę, pirma, ir tada daryti kokią nors operaciją apie tai, kai jūs tikrai reiškė pasirinkti poaibį. Ir taip, jei viskas yra ne gana vyksta teisingai, tai gerai, kad pažiūrėtų į prašymo išvaizdą kad iš tikrųjų gauti sukurtas. Taip. AUDITORIJA 2: Kai pirmą kartą pradėjo, jūs įtraukėte į uostą, kaip 5000. EZRA ZIGMOND: Taip. AUDITORIJA 2: yra numatytasis su Peewee, ar tai, kad ką jūs galite pakeisti? EZRA ZIGMOND: Taip, taip, kad uostas yra numatytoji su kolbą. Jei paleisti jį be nurodant nieko, ji bus automatiškai padaryti. Manau, aš turiu patikrinkite tai, bet jūs galite nurodyti, kad app.run, Manau, kad jūs galite padaryti kažką panašaus, Uosto = 8080. Leiskite duoti, kad pabandyti nekilnojamojo greitai. Taip, todėl galite tiesiog nurodyti Uosto = 8080, ir jis bus rodomas ten, o tai, manau, jei norėjo jį paleisti ant IDE, aš ne bandė tai iš, bet manau, kad jei bėgo uoste 8080, jūs tikriausiai galės prieiti prie serverio, tiesiog norėčiau jums buvo už svetainėje. Taip, bet tai lengva pakeisti, kad jei jokių panašaus uosto-ekspedijavimo rūšiuoti dalykų, kad jums reikia daryti. Visi kiti klausimai? Taip? AUDITORIJA 1: Taigi, aš pamačiau savo modeliai, kurie, kaip Jūs minėjote, jūs turite tiksliai apibrėžti duomenų bazė, skirta kiekvieno objekto. Ar jums atsitikti žinoti, ar kad padaryti tikrai lengva, jei turi daug SQLite duomenų bazių, kad jūs norite naudoti vieną interneto app, kad galite tiesiog nurodyti krūva Įvairių tie Jūsų modelį? EZRA ZIGMOND: Taip, leiskite man atidaryti, kad iki realaus greitai. Taigi, jūs sakote, jei norite turėti iš skirtingų kažko krūva, gal patinka ir studentai, kai priežastis, kažkas panašaus? Taip, taip, manau, kad Jūs vis dar, kiekvienas modelis tektų dar tik viena duomenų bazė, priskirtas prie jo, bet jei norėjo turėti skirtingi modeliai, turi skirtingas duomenų bazės objektus priskirti į jį, galite tikrai padaryti. Taigi, jei aš sukūriau naują, kažkas panašaus į tai, o dabar tai yra studentas, kuris atrodo keistai kaip bloge, Galėčiau nurodyti, kad duomenų bazė yra lygus db_2 čia. Taigi, manau, kad tai toks Pagrindinis būdu jūs galite tai padaryti. Saunus. Visi kiti klausimai? Taigi tiesiog baigti iki šiek tiek tiek, čia yra keletas išteklių, ir šie skaidrės bus paskelbtas internete kad jūs iš tikrųjų galite gauti šias nuorodas. Geriausi ištekliai yra tikrai už kolbą dokumentacija ir Peewee patys. Jie parašyta tikrai gerai, manau. Taigi, kolba svetainė yra čia, ir jie turi quickstart pamoka, kad bus vaikščioti per panašus viskas, ką aš vaikščiojo pro bet jei norite, bet peržiūros rūšiuoti iš dalykų, kad aš perėjo, ar jūs maniau, kad man paaiškino, kažkas paini būdu, jie turi panašių pavyzdžių yra. Peewee turi dokumentus ir jie turi quickstart pamoka kad eina per pagrindinių parametrų kad jūs norėtumėte naudoti. Taigi, ką aš kalbėjau apie su unikalių ir nurodant defaults, skirtingi rūšių srityse, kad galite naudotis, tiems būtų visi bus ten. Taip pat, jei turite Turite klausimų apie Peewee, ir jūs galėtumėte jas stackoverflow, vaikinas, kuris padarė Peewee tikrųjų tęsiasi ir atsako tie kartais. Jei turite klausimų, tikiuosi jis galės atsakyti į jį, nes jis rašė visa tai. Manau, kad viskas Norėjau padengti. Ačiū už išeina.