[Muusika mängib] EZRA ZIGMOND: Tere, kõigile. Tänan, et tulid täna. See seminar on "Python Web Apps kolbi. " Niisiis, ma lähen rääkima natuke miks võiksite kasutada Kolb teha veebirakendusi Python, mitte mõne muu raamistike seal, nagu Django, mis on tuntuim. Alapealkiri "ja peewee ", mis on midagi me ei kavatse rääkida, kuidas suhelda SQL andmebaase. See muudab tõesti kena. Nii, siin on lihtsalt kiire hooletussejäetud mida ma tahan minna üle. Niisiis, esimene, vaid üks slaid mis saab olema QuickStart, mis on, kuidas saada kõike luua oma arvutis. Ma lähen näidates see minu kohaliku Mac masin, lihtsalt sellepärast, et see on kui ma olen teinud seda Enne, ma olen kõige mugavamalt siis, kuid see on kindlasti võimalik on CD50 IDE. Niisiis, pärast seda, ma tahan tutvustada, mida kolb, ja veenda teid, miks sa peaksid kasuta seda esiteks. Siis ma annan kiire näide sellest, mida saab teha Kolb, kiire näide mida saate teha peewee, ja siis ma näitan sulle rohkem täielik näide rakendus et panin kokku, et me ei käi kokku. Ja siis lõpuks ka viimase slaidi, mul on mõned vahendid, et sa vaatad kell Internetist lisateabe saamiseks. See ei ole täielik juhendaja, kuidas kasutada kolbi. Ja ma loodan, et jätta Mõne aja eest küsimusi. Igaüks vaadates kohapeal, vaid nagu, Hüüab keskel Kui teil on mingeid küsimusi. Nii kiire paigaldus kraami, Kui soovite jälgida mööda, või kui sa tahad saada seda up oma arvutisse, Ma lähen kasutades Python 2.7.10. Kolb ei töö Python 3, aga mulle meeldib kasutades Python 2, sest seal on mõned Python paketid ei tööta 3 veel. Kui teil on pip paigaldatud, mis on Python paketi manager, Ma arvan, et kui teie Python on suurem või võrdne 2.7.9, sul on see juba paigaldatud, see on super lihtne paigaldada neid pakendeid. Seda saab teha pip paigaldada Kolb, pip paigaldada peewee, Tavaliselt pead käivitama sudo lihtsalt nii et load välja töötada. Ja kui te kasutate super vana versioon Python, Ma soovitan ajakohastamine oma Python, või kasutades EasyInstallile paigaldada pip. Niisiis, järgmine küsimus on, milline on Kolb? Ja ma arvan, kõigepealt mõistlik küsimus Ma imestasin pikka aega on, mida on web app? Sest see on sõna, mis ma arvan visatakse ümber palju et ma ei tea. Ja ma arvan, et parim Näiteks, mida web app on, tõesti on CS50 Finance, kus see ei ole tõesti ainult kodulehel, kuid see on midagi, mida sa võiks omamoodi suhelda. On kasutajakontod ja igasuguseid erinevaid asju. Niisiis, kus täpselt sa juhtida piir, mida on veebileht, ja mis on veebirakendus, on omamoodi suvaline, kuid ma arvan, et idee, see on midagi enamat kui kodulehel ja see on kasulik rakendus. Nii, kolb raamistiku tehes web apps kasutades Python. Ja loodetavasti lõpuks Selle ma sind veenda et siis võiks tegelikult midagi kirjutada nagu CS50 Finance kasutades Python, mida ma nagu palju parem kui PHP isiklikult. Nii, kolb, nad kutsuvad microframework, mille, nad tähenda, et see on väga Lihtne, kuid laiendatav. Nii, see on just see, mida sa vajad, aga kui sa tahad rohkem funktsioone, see on lihtne tuua neid. Aga kuna see on microframework, ei tähenda, et see on ainult väikestele projektidele. Mul on link siin, mis ütleb, et Obama kasutatud Kolb 2012 tema kampaania veebileht, mis loodetavasti on midagi kinnitus. Kuid asi, mis ma tõesti meeldib Kolb on see, et see ei ole tegelikult teevad mingit otsust teile. Just sellepärast oleme räägime web apps, Mul on võrrelda seda Ruby on Rails ja Django, mis mõlemad on suur raamistikud, kuid nad mõlemad teha oletusi kuidas soovid suhelda andmebaasid kuidas soovite esitada oma seisukohti, ja nad kindlasti häid külgi on see. Näiteks Ruby on Rails on see aktiivne rekord süsteem, mis on tõesti kena kuidas suhelda andmed, aga kui sa tahad kasutada Ruby on Rails, sa oled mingi siduva seda. Aga Kolb, kui ma tulen näidata teile peewee, mida saab kasutada ükskõik mis sorti Andmebaasi soovite, ja sa võid tõmmata, et laiendusena kolbi. Nii et miks ma tõesti nagu Kolb, see, et ta Ei tee oletusi teile põhineb asju sa ei pea tõesti. Niisiis, miks peaks kasutama Kolb? Eelised on see lihtsalt on tõesti põhifunktsioonid ehitatud nii, et teil on vaja. Niisiis, sa ei pea muretsema mõista terve hunnik asju et sa tegelikult ei vaja. Sa ei pea muretsema umbes lülitades omadused et sa tegelikult ei vaja. Ja nagu ma mainisin, see on super lihtne lisada laiendusi asju et sa ei pea. Mõned neist, kolvi oma toetust sellele. Nii et siin on midagi nimega Kolb admin, mis peegeldab selle admin paneeli, et Django annab, mis annab teile kena visuaalne viis hallata oma kodulehel. Aga jälle, kui sa oled tehes midagi lihtsat, sa ilmselt ei pea suur admin paneeli, nii et ma arvan, et see super kena. Ja miinused on, et sul on vähem võimu karbist. Niisiis, kui te esimest korda avada kolbi ja oma Python programmi sa lihtsalt kirjuta kolvist import *, või mis iganes, sa ei täpselt saada kõik funktsioonid võiksite. Ja et sa pead selgemalt nimekiri funktsioone, mida soovite. Nii et üks puudus, kuid ma arvan, et hoone väike web apps nagu ma näitan sa, et see ei ole tegelikult probleem. Ja mida viimane asi on peaks ütlema, mis on kirjaviga, on see, et seal on vähem standardiseeritud konventsioone, kuidas kasutada kolbi lihtsalt sellepärast, et seal ei ole nii palju inimesed, kes kasutavad seda professionaalselt Võrreldes Django. Niisiis, kui te vaatate midagi, "kuidas ma seda teen x" Django, sa leiad ta. Seal on hea disain mustrid, mida saab kasutada, kuid Kolb, et see on omamoodi minna oma teed, lihtsalt sellepärast, et see on päris väike raamatukogu. Nii et need on puudused, kuid ma arvan, et see on ikka hea raamatukogu kasutada. Nii saab lihtsalt hüpata paremale kolbi. See ei ole kindlasti lähen olema täielik õpetus, aga see, et anda teile idee kuidas kujundada asju, ja nii see on mugav minna välja ja vaadata dokumentatsioon ja leida rohkem. Niisiis, lubage mul avada tõesti Lihtne näide alguses, ja näidata, mida see Tundub, ja siis me jaotada see natuke rohkem. Nii et see siin, las ma saan seda näidata. Nii, mul on nüüd minu rakendus. Ma lähen avama Safari, ja see töötab minu kohalikus masinas. Nii et ma olen lihtsalt kavatse teha seda suurem. Aga localhost: 5000 Ja nii, just nüüd, kõik see teeb on, kui külastate veebilehte, see prindib "Tere Kolb," mis ei ole super kasulikud, aga ma arvan, et see on lahe, et see väike pilt siin, meil veebiserver töötab mis prindib midagi. Niisiis, oletame, tegelikult otsima kell kood teine, ja jaotada see natuke. Kas suurus hea kõigile siin? Niisiis, loodetavasti olete mõnevõrra mugav kasutada Python. Oletan, et saame vaadata Pythoni ja see läbi lugeda. Kui teil on küsimusi midagi, ma ei saa minna ka üle, et. Nii et esimene rida on, kolvist, Toome, kolb kapitali "F" mis on omamoodi kõik põhijooned, mida vajate. Kui sa oled kirjalikult faili ja kasutades kolbi sa lähed tahan importida, et lihtsalt sellepärast, et on olemas kõik peamised asjad. Järgmine asi, mida me teeme, on meil nimetame seda funktsiooni Kolb, lihtsalt luua app objekti, ja sa oled alati saab soovi seda teha. Ja siis, hüpates alla alt kiiresti, see osa siin on, "if_name _ ==" _ main_ "", mis on omamoodi Python konventsioon. Nii et see täidab ainult siis, kui teil käivitada seda faili otse, kasutades Python. Siis me nimetame app.run, mis tegelikult alustada app läheb. Nii, see on põhiline ülesehitus, mis pead mingil Kolb taotluse, on sul seda app = Kolb (_NAME_) ja seejärel app.run. Niisiis, kaks asja, mida ma pean siin on, mida me nimetame liinidel. Niisiis, räägime suunamises natuke rohkem. Ma lähen tagasi slide. Nii kõige põhilisem kontseptsiooni kolb suunamises. Ja see mõte, et sa määrata funktsioonid Python teatud aadressid oma veebilehel. Niisiis, kui soovite luua uus marsruut, sa kasutad seda @ app.route funktsiooni dekoraator. Niisiis, kui te ei tunne funktsiooni sisekujundaja Python, see on see mõiste, et Võimaldab teil teha funktsiooni ja aseta see midagi muud. Nii et tõesti, mida see dekoraator teeb, see võtab funktsiooni all, ja see lisab rohkem infot et see, aga mida Kolb tegelikult ei teha, mis juhtub ei ole super väga oluline, kuid mis on oluline, on see, et enne tee, siis pane see @ app.route ja seejärel aadress liinil nii kaldkriipsuga on see, mida me nägin, kui me lihtsalt avada veebileht. Nii et kodulehel. See on lihtsalt kaldkriips teed. Ja siis on see funktsioon. Nimi funktsiooni võib olla mida iganes sa tahad. See ei pea tingimata pistmist liinil. Ja siis, mida iganes Funktsiooni tagasi, funktsioon peaks tagasi string. Ja see string saab sisaldavad HTML või midagi, ja mis on tegelikult, mida saab tagasi oma veebilehitseja nagu HTML, ja see muudab seda. Nii et see on sama kood mis oli näide et ma lihtsalt jooksin, nii et kui me külastada kaldkriipsuga ta nõuab Hello World funktsioon, mis lihtsalt tagastab stringi, Tere kolbi ja mis saab nende nimesid. Nii et on veel üks näide, mis on, kui sa külastad / hello, see prindib Tere Word, mis peaks tegelikult öelda, Hello World, kuid olgem teeselda, et oli tahtlik. Nii saab tõmmata, et üles reaalne kiire. Nii et kui te lähete localhost / hello, see on nüüd midagi muud printida. Nii et lihtsalt kiire näide sellest, kuidas saate luua kahel erineval moel. Niisiis, kuivõrd see ei ole super kasulikud, seal ei ole palju saate teha, võid lihtsalt teha kõik, et koos erineva HTML lehed, ja kui sa külastad konkreetse lk see lihtsalt laeb lehele. Vaatame mõned rohkem kasulikke asju, mida saate teha. Niisiis, üks asi, mida sa võib-olla märgata näiteks, et ma tõmmatakse up, et mul oli app.run (siluda = True). Ja jah, siis mis see silumise argument teeb, on et kui sa käivitada oma veebiserver, kui oled oma taotluse kui muudad faili, siis automaatselt uuesti serveriga. Ja nii sa tegelikult ei pea restart Python, mis on super kasulik. Ma ei näidata seda. Lubage mul tõmba oma koodi koos kirjaviga see, ja teeselda, et kirjaviga pandi seal tahtlikult õpetlik eesmärkidel. Lisame selle tagasi. Nüüd ta ütleb Hello World. Ma päästan ta. Ja kui me tõmmake tagasi üles terminali, saate öelda, et see on taaskäivitust sest see avastatakse muutusi, ja nii nüüd kui me laadige see leht, see välja printida õige asi. Nii siluda on super kasulik seda. Samuti, kui teil on omamoodi krahhi, nii las ma teen selle rakenduse krahhi võttes ta ei tagasta string. Niisiis, oletame, lihtsalt see tagasi Puudub mingil põhjusel. Ja siis, kui ma külastan seda lehele, see lihtsalt krahhi, aga server ei ole lihtsalt krahhi, see tegelikult annab teile super kasulik tagasi jälgi kõik, mis valesti läks. Ja mis on tõesti kena, on see, et igal samm selles back jälgi, võid avada interaktiivse laduma siin, ja omamoodi välja trükkida, mida muutujad soovite võtta pilk. Ja nii silumine on tõesti kasulik figuring mis toimub teie server, mitte lihtsalt näinud midagi PHP nagu 500 sisemine serveri viga, mis on super kasutu. Üks asi, mida peaks teadma, on et kui paned oma app Internetis nii et see on avalikkusele nähtav, siis ei taha lahkuda silumisrežiimis kohta, sest inimesed saavad tegelikult kasutada, et konsooli, et ma näitasin teile täita suvalise koodi. Et nad saaksid välja trükkida nagu iga salakoodi teil on seal, nad võivad vaadata täpselt kuidas teie veebileht töötab. Nii et see on väga kasulik katsetamiseks, kuid alati veenduge, et see välja võtta enne avaldate midagi online. Nii et kui te kasutate midagi nagu PHP, seal on seda ideed et sa ei liigu info vahel veebilehti pannes kohta tegelikult URL, mis on GET taotluse, kuid Kolb saab tegelikult midagi sedasorti, võttes liinil, mis on Muutuva osana sellest. Nii et kui te vaatate seda Näiteks ekraanil siin meil liinil, mis on ("/ hello /"), ja nii, kui sa külastad / hello / midagi, et midagi läheb tegelikult saada täidetud nimesse muutuja. Ja märkate, et funktsiooni mis kaasas, et marsruut peab võtma parameetri Nime, nii et see on tegelikult saada läks funktsiooni. Ja siis, kui sa oled sees, et funktsiooni, saab ravida, et nagu normaalne Python muutuja ja nii siis see välja printida Tere, ja see täitke nime kasutades mõned string formaati. Nii et lisada muutuja osad suunamises, kasutate nurksulu tähistamine. Ja soovi korral saad kasutada mida nimetatakse konverter. Ja nii, kui paned selle annotatsioon jämesooles, saate määrata, et see on int või float või tee, ja see automaatselt teisendada, et. Võite teha konverteerimine jooksul Python funktsiooni, lihtsalt kasutades valatud, kuid mõnikord, kui sa tahad, et see on keskmine, võite panna, et konverteerimise eeskiri olemas. Nii saab tõmba näide Mõne muutuja reegleid. Nii et siin see on samasugused struktuur, kolvist import Kolb, app = Kolb (_NAME_) ja siis jookseb lõpus. Meil on need kaks erinevat muutuja liinidel siin. Ja esimene, on üks, mis ma näitasin slaidi, mis oli see lihtsalt võtab string nimi ja siis välja printida Tere nimi. Ja siis teine üks kasutab muutmist. Nii et see automaatselt teisendada see int, ja siis topelt int, ja printida, et välja. Ja me ei tee mingit konverteerimise sees sest Kolb hoolitseb selle. Nii lähme see töötab. Kui teil on Kolb rakendus, Saate kontrollida-C välja peatada server töötab. Ja siis ma jooksen muutujad. Nii lähme localhost / hello / Esra ja Loodetavasti tere öelda mulle. Nii kulus minu nimel, muutuja marsruut, ja täitis seda siin. Nii et ma näidata ka kiire Näiteks kahekordistada. Nii et kui te lähete / double / 3, see välja printida 6. Nii et see hoolitses muundumine juures. Nii saab ka seda teha float, ja midagi erilist, Kui teil on vaja täpsustada midagi tee, mis võimaldab seda aktsepteerida kaldkriipsud, kuid see ei tohiks tavaliselt olla probleem. Seni oleme, veel äsja tagasi stringid, mis ei ole väga huvitav. Me võiksime tegelikult tagasi grammatiline HTML string. Nii kood saame lisada midagi nagu b-tag teha see julge, kuid enamik ajast sa tegelikult ei taha olema kirjalikult HTML kood Teie Pythoni kood. Läheb tõesti räpane, ja see ei ole hea aeg. Kolb võimaldab meil eraldi välja HTML sellest, mida nimetatakse Mall, ja nii kui sa mõtled nii MVC mudel et te olete juba tuttav, loodetavasti töötamine koos CS50 Finance natuke, sa ei mõtle Pythoni faile kui on rohkem Controller, kus nad suhtlevad iganes andmemudel, mida oleks võinud. Ja siis nad hüüdes Views ja edastavad teavet, et View täita teave HTML, mida ta vajab. Ja mida me nimetame neid seisukohti on Templates klassis. Nii Kolb kasutab teise Python moodul, mis see automaatselt paigaldada kui PIP paigaldada Kolb nimetatakse Jinja, mis võimaldab teil lisada need kokkuvõtvate HTML et näete ekraani, mis võimaldab paned asjad conditionals, ja silmad HTML. Nii tundub natuke nagu kuidas sa Võib kasutada PHP jooksul HTML-faili, kuid see on vaid siis, kui kolb server mahutab kuni HTML faili, see kestab see templating mootori ja sõeluda läbi selle ja täitke asju. Nii Kolb on render_template funktsiooni et näed allosas siin. Ja nii, kui sa seda lehekülge külastada, siis muudaks see hello.html Mall, ja siis täitke see HTML lehel. Nii saab lihtsalt käivitada see reaalne kiire, ja vaata, kuidas see välja näeb, ja siis ma lähen läbi natuke lähemalt. Niisiis, teie Templates ei kavatse minna oma Blanketid. See automaatselt otsima jooksul Blanketid eest, et mall. Nii saab avada see üles. Niisiis, ma joosta templating näiteks. Nii et kui ma lähen / hello / Esra, see on see kohutav, ebameeldiv telk tag et panin. Väga kena, väga dünaamiline. Ma olen suur fänn. Aga mis juhtub siis, kui Ma lihtsalt minema, / hello? Nii see lihtsalt ütleb Hello World. Ma ei liigu see nimi ja ta täitis seda automaatselt. Vaatame, kuidas ta seda tegi, et kuidas saame lahti saada, et telk võibolla. Nii et siin, see on omamoodi huvitav näide, Kui te olete tuttav, kuidas lüliti avaldused tööd keeles. Ütle see on omamoodi nagu, et mingi kukkumise läbi, kus sa tegelikult lisatud kaks teistmoodi sama funktsiooni. Nii me kinnitage / hello marsruudi ja Kirje / hello / nimi liinil Tere, ja me määrata kasutades-- Python võimaldab täpsustada vaikefunktsioon arguments-- nii et kui puudub nime, nii Kui me läheme lihtsalt / hello, see automaatselt filtreerida et nimi on võrdne Puudub. Niisiis, me muuta Malli nimi = nimi, nii see läheb nime parameeter võrdub selle nime funktsiooni parameeter, malli. See ikka ei selgita, kuidas on otsustada, kas printida Hello World, või printida oma nime. Nii saab tegelikult otsima malli ise, ja vaata, kui see on pärit. Niisiis, selles Mall, me tegelikult on mõned tingimisi loogika mida mõned inimesed väidavad, siis tegelikult ei tohiks olla palju tingimisi Loogika teie Mall ise. See peaks olema rohkem piires Controller, kuid see näide see on midagi üsna väike. Nii et siin, me kontrollime, kui nime, nii Kui nimi ei ole võrdne Puudub, Kui nimi on tegelikult möödunud aastal, siis me tere öelda, nime ja selle Päise ja telk, kõik see normaalne HTML, muidu me välja printida Tere, maailm lihtsalt tavaliselt. Nii paar asja märkate siin kuidas vormindada templating, on see, et kõik need tingimisi avaldused, omamoodi nagu kuidas me PHP seda, kui soovite lisada mõned PHP, Te kasutate vähem kui küsimus märk, see on omamoodi analoogne siin koos {%. Nii et siin on meil tingimisi koodi. Ja siis, kui sa tegelikult tahad sõna otseses mõttes hinnata midagi, ja print see välja ekraani, siis kasutage kahekordset traksid. Nii et siin on topelt traksid, ja siis me täpsustada nimi, nii selles, et anda hinnang muutuja nimi, mida võeti vastu alates muuta malli funktsioon, mitte ainult trükkimise välja, kui me saime lahti neist, see oleks lihtsalt välja printida sõna "nime." Nii, see on midagi, olge. Nii teine ​​asi teade on, et kui me soovite kasutada render_template funktsiooni, meil tegelikult on importida seda selgesõnaliselt kolbi. Ja see on näide moodulpõhimõtet kolbi et sa ei pea importima asjad, mida sa enam ei vaja. Sa võid tuua funktsioone sa tegelikult ei pea, mis on mõnikord kena, et sa seda ei tee on, et kõik need funktsioonid istuvad, et te ei kasuta, ka, kui te unustada, et teil vaja importida render_template, sa ilmselt saad hoiatuse et anname teile teada, et. Niisiis, mis on üle templating. Niisiis, oleme näidanud, kuidas lihtsaid veebilehti, ja lisada natuke rohkem loogikat see poolest muutuja suunamises. See võimaldab teil teha erinevaid asju, mis põhineb Mis URL lähete, ja ka siis, anda HTML natuke rohkem mõistust osas, kuidas sa tahad, et muuta asju. Sa ei pea panema kõik HTML oma Python, aga päris palju iga veebirakendus, sa lähed tahan mingisugune Andmete mudeli sellega seotud. Ja nii traditsiooniliselt, see oleks midagi nagu SQL andmebaasi. Ja sa võid suhelda otse SQL. Python on, ma arvan, et see nn. SQLite 3. Sa võid importida SQLite 3 ja täita SQL päringuid otse, aga ma ei tea sinust, aga ma tõesti ei meeldi, lihtsalt, kirjalikult esitatud SQL päringuid. See kipub saada tõesti pikk ja keeruline. Ja nii, midagi, mis Mulle meeldib kasutada on, mis on tuntakse ORM, mis on objekti-relatsiooniline kaardistamine. Ja punkti kohta objekti-relatsiooniline kaardistamine, on see, et on olemas kaks erinevat kuidas saate mõelda andmebaasides. Nii näiteks, et Professor Humala tavaliselt kasutab klassis, on Exceli tabeli, kus sul on need read ja need sambad, ja see on tõesti kasulik kuidas see on esindatud SQL ja kuidas sa suhtled, kuid teine ​​võimalus, et see on tegelikult kasulik mõelda mõnikord, on nii klassid ja objektid. Nii et selle asemel mõtlemine Iga tabeli, millel Selles reas, mis on teatud teavet, saate tegelikult ma arvan et kui on Iga tabel on klass, ja seejärel iga astme klass on teatud omadused. Niisiis, selles näites juhtumeid klassi on read tabelis, ja siis iga kinnisasja olla tabeli tulbas. Niisiis, ORM, et mulle meeldib kasutada nimetatakse peewee. See on tõesti väike, omamoodi nagu kolbi. Ma arvan, et nad lähevad hästi kokku, kuid on olemas palju teisi ORMS mida saab kasutada. Palju populaarsem neist on tuntud SQLAlchemy, ja ma ei mäleta, miks ma algselt Valisin peewee üle SQLAlchemy, või ma ütlen teile, miks ma arvan, et see on parim, aga me lihtsalt kavatse kasutada seda üks, sest ma tean, kuidas seda kasutada. Niisiis, üks küsimus on, miks sa vaeva kasutades ORM, selle asemel, et lihtsalt otse kirjalikult SQL päringuid? Ja ma arvan, et parimal juhul on see, et sa ei ole tegelikult on kirjutada SQL päringuid. See on palju lihtsam, kui ma näitan sulle, et teha asju nagu valikut, sisestamise, kustutamine, eriti luues tabelid. See on palju lihtsam kirjutada klassi struktuur, kui see on struktureerida Loo Tabel avalduse, kuid üks asi olema teadlikud, et ORM püüan oma parima, aru saada, mis on kõige tõhus SQL päringu oleks, kuid mõnikord saab see vale. Ja eriti kui sa oled töötamisel suur andmebaas, võite märgata, et päringu et tuleks töötab kiiresti, tegelikult aset enam. Ja kui te vaatate kapoti alla kuidas ORM tõlgendab et SQL, see võib olla midagi tõesti naeruväärne, lihtsalt sellepärast, et see omamoodi viipas oma kavatsustest valesti. Ja seal on olnud aegu, kus Olen olnud alistada see, ja lihtsalt täita oma SQL päringuid, vaid sest see oli sõelumine kummaline viis. Niisiis, seal on mõned õhuliini, just nii, nagu et ta koostab oma avaldused jaguneb SQL. Nii, vaatame super kiiresti kell lihtne näide andmemudel et sa võiksid kasutada. Niisiis, see on Pythoni kood, ja nii Esimene asi, mida sa teha tahad on peewee import *. Niisiis, erinevalt Kolb, kus teil on kõik need üksikud moodulid, ja soovid importida kolbi ja kirjutada Mall, ja mõned teised et me näeme hiljem, alates peewee, saate lihtsalt importida kõik, sest see on päris väike raamatukogu. Niisiis, esimene asi, mida sa teha tahad, on tegelikult luua selle andmebaasi objekt. Nii, teil on db = SqliteDatabase, ja siis nime oma andmebaasis. Ja see tegelikult luua andmebaasi objekt et saab suhelda, koos peewee. Ja siis on meil tegelik mudel, mida me tahame luua. Nii tabelis tahame luua. Niisiis, mis peewee, igas klassis on oma laua jooksul oma andmebaasi. Niisiis, kõik tunnid pärivad baasmudel ja kapitali M mudel midagi, mis on määratletud peewee. Niisiis, kõik teie mudelid peaksid pärivad oma kõrgeima ülemklassi, nad peaksid pärivad mudel, kuid milline on väga lahe, on see, et saate tegelikult on teie mudelid pärivad. Ja palju aega, teie andmed mudelid ei pruugi teha kena pärandi hierarhia, kuid korda, kus nad teevad, see on tõesti kena, sest sa oled mudel omane üksteisest. Niisiis, me määratletud selle klassi "õpilane", mis pärib mudel, ja see on kolm omadust. See on ID, mis on PrimaryKeyField, mis on midagi, mis on sätestatud poolt peewee nimi on CharField, ja hinne on IntegerField. Nii et see võib olla või mitte olla kuidas CS50 tegelikult salvestab kõik õpilaste klassid. Ei ole, kuid see, kuidas ma teeksin seda. Ja siis on sees Selle klassi, ja see on midagi, mida saate teha koos Python, sul võib olla pesastatud klassid. Ja see on midagi, mis on nõutud peewee. Nii, see klass Meta, sa pead täpsustada, et andmebaas on võrdne objekti et oleme loonud üle. Ja seda ütleb, mida faili on selles tabelis tegelikult läheb sisalduda. Nii et see on midagi, mida sa pead teha kõigis oma mudeleid. Sa pead lihtsalt täpsustada selle Meta klassi et andmebaas on võrdne db. Mida ma tavaliselt teen, kui mul on hunnik erinevaid mudeleid, on see, et mul on üks alus mudel, mida ma tavaliselt lihtsalt helistada "baasmudel" mis on Meta klassi, ja see seab andmebaasi võrdne db. Ja siis kõik mu järgnevate mudelite pärivad selle baasi klassi. Ja siis ma ei pea muretsema seadmise kohta Meta klassi. Niisiis, kui see tegelikult saab koostatud jaguneb SQL avalduse see näeb välja selline vastik asi maha siin, "create table õpilase ID täisarv, " mida iganes. Ja ma arvan, et see on lühem, see SQL päring siin, aga kui sa vaatad seda klassi siin näed täpselt, mis toimub. Näete, mida elualaldel seal on, mida nad on kutsutud, ja nii, ma arvan, et Vaadates seda Pythoni kood on palju selgem ja arusaadavam kui üritan kirjutada seda SQL päring. Nii, et tegelikult Andmebaasi kasutamiseks meil ühendada jooksul Python. Niisiis, ma tavaliselt kirjutada funktsiooni nimetatakse initialize_db mis teeb kahte asja. See võtab andmebaasis objekti db ja see ühendub see, mis lihtsalt avab JAGU andmebaasi. Kui sa oled lihtsalt töötab küll veebisait teie kohalikus arvutis, see ei ole super suur asi muretsema umbes ühendamisel ja lahtiühendamisel, aga kui teil on see veebilehel, siis soovite veenduda, et iga kord, kui kasutaja ühendub see, kui nad sulgeda kodulehel, et nad lahti nii, et teil ei ole kamp inimesi ühendada oma andmebaasi kõik korraga. Ja siis, kui te ühendust andmebaasi, soovite helistada db.create_tables, ja nimekirja mudelid, mida soovite Tabelite loomine. Nii et siin ma tahan luua seda tudeng. Ja siis, mis on oluline, on täpsustada ohutu = True kõige aeg. Mis see avaldus teeme, on see, et loob lauad õpilase mudel, kuid ainult kui see tabel ei ole loodud juba. Seda ohutu täpsustab. Seega ei kirjuta Sinu olemasolevasse tabelisse, see ainult luua uusi tabel, kui ei ole kedagi. Nii võid lihtsalt luua Tabelite kord kasutades SQL. Ja siis on andmebaasi istung seal, ja siis ühendada iga kord, kuid see on tavaliselt kena lihtsalt panna see create_tables kõne nii et kui sa kunagi kustutada oma andmebaasi, kui sa jooksed oma veebilehitseja app uuesti, siis uuesti seda. Niisiis, lihtsalt veendumaks, et ohutu täpsustatakse, et olla tõsi, või leiad oma andmed lihtsalt saada clobbered iga kord. Ja siis saate lihtsalt helistada initialize_db luua ühendus ja luua tabelid vajadusel. Niisiis, kõige tavalisem asi mida sa tahad seda teha, või üks levinumaid asju, on tegelikult asjade sisestamiseks oma andmebaasi. Ja nii, selle asemel kirjutada lisada avalduse koos kõigi määratletud väärtustele, tegelikult võite helistada funktsiooni õpilase klassi. Niisiis, kui loote klassi et pärib mudel, see on see luua meetod. Niisiis, sa klassi name.create, ja teie parameetrid mida soovite läbida. Niisiis, kui ma tahan lisada mõned õpilased meie CS50 hinne raamat näiteks Ma panen David, kes on väga hea hinne, ta on 95. Ja mina, kes ei tee nii hästi CS50, mul on 50. Ja nii kena asi mida see luua funktsioon teeb, on see, et ta tagastab näiteks või rida, et loodud tabelis ja nii siis salvestada et on varieeruv ning töö hiljem. Teil on võimalik muuta ümber, mis Ma näitan näide. Pange tähele, et ma ei ole tuleks täpsustada ID, sest kuna see on PrimaryKeyField see automaatselt juurdekasvu, kui sa ei määra seda. Ja tegelikult, siis ilmselt ei täpsusta ta, sest te võite kogemata Tellida kellegi ID. Ja sa tahad teha kindel, et see on ainulaadne. Niisiis, tegelikult kõige ühine asi, mida sa teha tahad, Ilmselt valida välja Andmebaasi kui sa on palju teavet seal. Ja nii, kui sa tahad saada kõike, nii samaväärne valige star üliõpilased avalduses, et oleks lihtsalt student.select. Ja see annab sulle tagasi massiivi kõik õpilase vastuväite see et sa Käi soovite. Saad asju välja. Ja enamiku ajast, siis ei lihtsalt tahan teha vali, sa tegelikult tahad midagi täpsustada. Ja nii saate kett koos nende funktsioon nõuab, meeldib, kuidas sa oleks kett koos avaldused SQL. Nii saab teha student.select (). Kus selles näites. Ja siis saate täpsustada tingimused, lihtsalt tavaliste Python Tõeväärtused vaadata asju. Niisiis, sel juhul sa tahad piirata, mida sa seadmise, kus student.grade on võrdne 50, ja student.name on võrdne Esra, nii, et lihtsalt mind välja. Ja teate, üks tõesti peen asi siin on et kui soovite täpsustada ja / ja või või / või Python, sa muidu kasutaksid, Ma arvan, et sõna "ja" tegelikult, aga siin kasutada ühtse ampersand, mis on tavaliselt bitwise operaator, kuid seekord erandkorras, just nii peewee teeb seda, kasutate ühe ampersand täpsustada "ja". See on midagi, mis Ma saan sassi palju, aga see ei tulnud välja et palju praktikas. Ja siis, kui olete kõik õpilased välja andmebaasi, kui olete teinud oled valige ja teie kulumise või mis iganes, saate foreach loop, nagu normaalne Python, koos mingit iteraatoris või mingit valikut. Nii saate teha, et s in student.select (). whe re (Student.grade <75), ja nii see tahe Käi iga õpilane tabelis kelle hinne on vähem kui 75, mis Sel juhul on ikka ainult mulle. Ja siis võiks teha midagi jooksul et loop, nagu Kirjuta mulle e-mail ja ütle mulle, et tegelikult pöörduda minu probleem komplekti. Nii, teine ​​asi, mida saab teha, on see väga lihtne uuendada rida koos tabeli. Niisiis, pidage meeles siia tagasi, Teie kui ma järele, Võtsin väärtust, mis oli tagastatud student.create, ja ma määras selle nimeks Ezra. Ja nii nüüd, saate muuta väärtuste, et näiteks nagu sa oleks normaalne klassi Python. Nii saab ezra.grade = 95 ja mis uuendab kohaliku koopia, aga kui sa tegelikult tahad kinnitama, et muutus andmebaasis sa pead helistada ezra.save, siis nimetatakse .save meetod kohta näiteks. Ja nii nüüd olen edukalt muudetud minu klass jooksul andmebaasis. Nii, siis oletame, et ma takerduda muudan hinne sees andmebaasis. Professor Humala on ilmselt läheb et soovid kustutada mind klassi, ja nii võite helistada .delete Näiteks meetod lihtsalt, et asi. Niisiis, kui sa tahad minna tagasi see loop siin ja reaalselt asemel E-kirjade saatmine kõigile õpilased, kelle palgaaste on vähem kui 75, siis tahtsin need kustutada, selle loop võid helistada s.delete näiteks. Ja kõige viimane asi, mida sa teha tahad, on, kui sa ühendust luua, ja sa oled teinud oma töö, soovite helistada db.close, kus db on selles andmebaasis vastuväiteid, mis meil oli enne. Ja sa tahad teha kindel, et kõik suletakse välja. Cool. Nüüd on mul näiteks taotluse. Olen omamoodi eelnevalt teinud kõike lihtsalt nii, et seal ei ole ühtegi live kodeerimine vigu, aga me ei käi seda ja vaata, kuidas sa paneks Kolb ja peewee kokku ja teha lihtne app. Ma kutsun seda CS50 käratsema, ja see on omamoodi lihtne blogi platvormi. Niisiis, esimene, ma käivitada ja näidata kuidas see välja näeb, ja siis saame uurida täpsemalt koodi. Okei, nii et olgem lihtsalt käivitada. Cool, ma teen seda natuke väiksem. See ei ole väga ilus, lihtsalt sellepärast, Ma ei teinud palju CSS, Aga mida see tähendab, et ta on Selle andmebaasi blogipostitusi, ja see läheb läbi kõik neid, ning see näitab nende lehel, et viimaste. Ja nii need on vaid mõned postitused et mul oli salvestatud andmebaasi. Nii et kui me tahame luua uus post, saame minna Lisa uus postitus, ja saame sisestada pealkiri post, nii midagi, CS50 seminar. Wow, tõesti nautida seminar. Cool. Siis vajuta post, ja see suunata teid tagasi kodulehele, ja siis näete, et Viimane postitus lisati. Ja meil on veel kõik need olemas. Nüüd oletame, sammult läbi kõik koodi ja kuidas seda rakendatakse. Niisiis, ma arvan, et esimene asi, mis olgem vaatleme, on tegelikult mudelid. Palju aega, mil sa projekteerimisel midagi, tahad mõelda kõigepealt, kuidas sa lähed esindavad oma andmeid, ja siis kavandada asju ümber, et nii et kõik on mõtet. Ja see on tegelikult, kuidas ma tegin seda, kui olin tehes seda, Istusin ja mõtlesin, Mida ma tahan ametikohal. Nii, siin on meil sama struktuur et ma mainida varem kus me db = Sqldatabase ("posts.db"). Tegelikult sa ilmselt ei taha kõvasti kood oma nime andmebaasides. Ilmselt peaks parameeter mis on salvestatud kusagil, võibolla a config faili, kuid väike näide niimoodi, see on okei kõva kood, et. Nüüd on meil selle Post klassi, mis pärib baasmudel. Ja see on jällegi ID = PrimaryKeyField. Tegelikult, kui sa ei täpsusta, kui ma tegelikult sain lahti sellest, siis peewee me hoolitseme automaatselt luua, et ID väli, ja see automaatselt Tee PrimaryKey, mis Ma arvan, et on tore, sest tavaliselt, see on midagi, mida sa tahad olla, aga mulle meeldib, et pane see täpsemalt just nii ma mäletan, et see on olemas. Aga kui sa ei täpsusta, et et on olemas automaatselt. Niisiis, mul on kuupäev, mis on DateTimeField ja kõik Nende erinevates valdkondades, kui te vaadata peewee dokumentatsiooni, see annab sulle nimekirja erinevate tüüpi väljad, mida saab kasutada. Enamasti on see analoogne mida sa näeksid SQL. Seega on CharField, et VarCharFields, TextFields, mis on väga pikk tekste, nagu blogi postitus potentsiaalselt DateTimeFields, DoubleFields, FloatFields, kõik asjad niimoodi. Ja sa ei liigu teiste argumendid et see, mida ma ei täpsustanud siin. Ütle, näiteks, siis ei taha võimaldavad kaks ametikohta on sama pealkiri, sa võiksid täpsustada midagi unikaalset = True, ja see on just ekstra parameeter valdkonnas, et kui ta koostab ta maha arvesse SQL, peab ta täpsustama, et see peab olema unikaalne. Võite määrata ka midagi ei ole null ja kõik muud asjad sa tavaliselt teha SQL. Nii, see on päris lihtne mudel, mis on kuupäev. Pange siia jooksul DateTimeField, Ma täpsustatud, mida vaikimisi. Ma täpsustatud, et see on datetime.datetime.now, sellepärast, et see see saab hinnata, see tegelikult hindab datetime.now kui see läheb lisada andmebaasi. Ma arvan, et ma pean kontrollige seda, aga kui sa tegid midagi sellist, siis see oleks tegelikult hinnata, et kui, ja siis dateTime oleks alati sama. Nii lihtsalt, kui sa teed midagi koos datetimes, kontrollige et see on hinnata, kui tegelikult saab lisada, või muidu Teile võib ajada. Pealkiri on lihtsalt CharField, mis on on rohkem argumente saab läbida täpsustamisel täpselt, kui kaua tahad seda, aga siin, see ei ole tegelikult küsimus. Ja Tekst läheb teksti kogu post, ja mis on kavatse olla TextField lihtsalt sellepärast, et sa tahad et ta saaks olla päris pikk jada. Siis on meil see Meta alamklass, et lihtsalt täpsustatakse, et me tahame andmebaasis kui see on tegelikult avanud sisse olla db objekt, mis meil siin on. Ja viimane asi, mida me peame Siin on just seda funktsiooni et me ei kavatse kasutada meie peamine app initsialiseerida andmebaasi ühendada seda ja seejärel luua Post tabelis. Nüüd vaatame peamine app ise. Nii et see üks on üsna natuke kauem kui need, et me oleme näinud, kuid loodetavasti mitte liiga halb. Niisiis, lubage mul laiendada seda. Okei. Nii, märgata ja top ma imporditud terve hulk muid asju kolvist, et meil ei ole tõesti näinud. Ja loodetavasti saame läbida igaühel neist ükshaaval ja rääkida veidi rohkem neid, sorteeritud näiteks. Niisiis, meil on kolb, ja render_template, mis me oleme näinud, selle taotluse ese, mis saab tulla, kui me vaatame, kuidas kujul, et ma olin näitab tegelikult töötab. Suuna, mis võimaldab suunata tagasi Loo uus postitus tagasi algse kodulehele ja siis URL, mis on midagi, mida saate aru saada, kus on kodulehel konkreetse leht on. Niisiis, järgmine asi, mida ma teen, on mul import kõik infot mudelid failid, et me olime lihtsalt vaadata. Ja, jah. Niisiis, midagi uut, et tegemist up, kui olete tegelevad, eriti andmebaasid on see, et saate määrata funktsioon, mis saab nn enne iga taotluse ja funktsioon, mis saab nimetatakse pärast iga taotluse, kasutades seda funktsiooni dekoraator app.before taotluse. Ja nii see saada hukati kus see funktsioon on. See ei pea olema nimetatakse enne taotluse kuid tavaliselt see on midagi mõistlik kutsuda. Saate määrata iganes funktsiooni soovite saada hüüdis seal, nii et ma täpsustada seda initialize_db funktsioon, mis meil oli tagasi mudelid faili, nii et enne iga taotluse, siis tahan ühendada andmebaasi. On kaks erinevat kuidas saate seda teha. Seda saab tehaapp., I usun, et see after_request. Ja vahest after_request ja teardown_request, on see, et after_request juhtub vaid kui taotlus tegelikult kehtis. Ja nii, ainult siis, kui Taotluse oli edukas, Kui midagi läks valesti, kuid teardown_request juhtub näiteks eduka taotlusel või juhul, kui viga. Niisiis, enamasti, tahad kasutada teardown_request, kui sa tahad teha midagi, eriti erinevat puhul viga. Aga sulgemiseks andmebaasis kas see õnnestub või kui see ei õnnestu, me tahad lahti andmebaasist. Nii seda nimetatakse, db.close DB objekti. Pange tähele, et teardown_request võtab erand. Nii saate kontrollida, kui oli tegelikult viga, kui ta oli sulgemise, kuid siin, loodetavasti ei ei ole kogu palju vigu, nii me lihtsalt omamoodi ignoreerides seda. Okei, ja ülejäänud ei ole liiga halb. Niisiis, kui me läheme kodulehekülg, me sulatatud see home.html Mall mis avab. Läbipääsuloal on post võrdne, ja mida see ei ei, ärge unustage meil on selle postituse mudel, nii et me vali kõik postitused, ja siis veel üks asi, mida saate teha, saate määrata WHERE klauslit, saab määrata telli, ja nii me võtame kõik postitused, mis saada valitud ja seejärel tellime neile post.date.descending. Ja mis täpsustada, millal nad tegelikult välja tulema, Kõige hiljutisem on kõige esimene. Ja siis, võtame selle arvesse home.html malli, nii et vaatame tegelikult avada et Mall tõesti kiire, ja kui heita pilk, kuidas see töötab. Ja see ei ole suur HTML, kuid Loodetavasti saame keskenduda Python. Nii et link Lisa uus Post, ja nii see määrab marsruudi jooksul kolbi, et me määratleda, mis on siinsamas. See on uus postitus liinil ja me täpsustada, et siin. Ja nii see on link, et siis minna sellele marsruudile jooksul kolbi server. Mida rohkem huvitav asi on see silmus siin. Nii et me täpsustada, et see post parameeter, mis võeti arvesse render_template funktsiooni, iga postitus postituste objekt, mis saab edasi ka. Tahame välja printida Postituse pealkiri, H1, ja siis alla, tahame välja printida pärast teksti sees punkt. Ja siin, me saame tegelikult helistada Pythoni funktsiooni, et saaksime helistada strftime, ST-RF-ajal ja sa ei liigu vormingus string mida soovite printida andmeid välja. Nii see on päris tore, et saate tegelikult nimetan seda Python funktsiooni seest siin. Sa ei pea tegema vormingu kohta töötleja poole, sest tõesti, vormindamist kuupäev on midagi, mis sa tahad tegeleda sees View. Ja kõik need protsenti asjad ei ole super oluline. Kui sa vaatad üles dokumentatsioon jaoks strftime funktsiooni Python, see määrab kõik need asju, kuid see on kuidas, millal me otsisime esilehel siin see vormingud seda kena kuupäeva ja see määrab AM või PM, kuid normaalselt, kui me ei ole see siin, sa ilmselt saaksin prügi kuupäeva, mis ei tundu väga hea. Ja siis me täpsustada post.text ja suutsin pannud paar reavahetused siin, just panna mõned vahed iga postitust. Niisiis, ma arvan, et kõige olulisem asi selles näites on, et saate kasutada seda loop. Ja see on analoogne asju saab teha PHP. Võite korrata läbi, kõik õnnelikult läbitud, ja nii, selle asemel, et teha copy / paste, copy / paste kõikide HTML, sa lihtsalt kirjutada seda üks kord ja seejärel võite korrata üle kõik postitused. Ja see on midagi, tavaline, et soovite teha, kui sul on palju andmeid, on see, et kõik oma andmed, sa tahad teha sarnane asi. Ja siis, just mäleta, et kui sa soovite välja printida midagi otseselt HTML, mida kasutate topelt traksid siin aga siis, kui soovite täpsustada infoga tingimus, või umbes for loop, siis kasuta protsenti sulg. Nii, minnes tagasi Python koodi, nii et seletab mis toimub peamine marsruudi, kui me sinna minna, see lihtsalt näitab kõiki ametikohta, kuid siis küsimus on, kuidas me tegelikult saada postitusi andmebaasi, mis on natuke huvitavamaks. Niisiis, kui klõpsate New Post link, mis nägime siin see suunab teid selle vormi. Ja see on lihtsalt kõne render_template funktsioon, mis siis möödub uus postitus HTML kujul. Võtame pilk seda. Nii see on üsna lihtne. See on lihtne HTML kujul, mis vaatame natuke tuttav, põhineb vormid CS50 Finance. Ja nii me siin täpsustada, tegevus. Ja siin, kui te töötate PHP, tavaliselt, see oleks midagi, create.PHP, kuid siin me tegelikult määrata marsruudi jooksul kolbi server. Ja nii see teekond vastab et luua marsruut et meil on siin, mis me minna teise. Ja nii me täpsustada, et see on post meetod, sest me tahame saata Selle vormi andmed, ja tavaliselt kui saadate andmeid sellisel kujul, võiksite kasutada ametikoha taotlus, lihtsalt, et sa ei jõua Selle suur, kohmakas URL. Aga sa võid kasutada ka GET taotluse, ja liigu see muutuva suunamises, kuid vorme, see on tore ametikohale taotluse siin. Ja nii siis, just nagu sina teeks koos HTML ja PHP, saate määrata need teksti sisendid, ja saate määrata nime neist, ja see on nimi, mis saavad vastu arvesse taotluse objektiks jooksul kolbi. Ja siis on meil Esita nuppu, mis ütleb Post. Ja siin Post nimi nuppu, sest see on blogi postitus, kuid siin, post on taotluse meetod. Nii et need on sama sõna kuid tegelikult seotud. Jah Tulles tagasi Pythoni kood, kui me nimetatakse luua meetod, märkate siin, et saate tegelikult täpsustada jooksul marsruut taotluse meetodid mis sa tahad võtta, ja nii siin, ma täpsustama, et ma Ainult taha nõustuda Post meetod. Niisiis, kui ma tegelikult proovida külastada lehekülge otse, mida kasutab GET taotluse, ta ütleb mulle "meetod ei ole lubatud." Ja nii, teil on lehti, omamoodi nagu Selle loo juures, kus ma olen ainult tõesti, kasutades teed vormi saada esitanud, saate määrata, et sa seda ei tee taha, et inimesed saaks sinna minna otse GET taotluse, või kui te ei taha, miskipärast Post taotlus, võid lihtsalt täpsustada siia, kuid selles näites me lihtsalt taha Post taotluse minema. Niisiis, kui create_post nimetatakse, kui külastame et vahendusel Post taotlus, iga kord, kui te lähete eriti marsruut, seal on see taotluse objektiks, ja meil oli import taotlused tipus, kuid seal on see taotlus objekt, mis saab edasi ka, ja pääsete vormi andmed, mis automaatselt saada täidetud kui saadate taotluse vormi. Ja siis, mida ma arvan on väga lahe, on et vorm eesmärk, et saan edasi aastal, on lihtsalt Python sõnastik, mis Sisaldab kui te access-- nii siin, las mulle tõmba HTML kõrval, lihtsalt siis võite olla, et võrdluseks, jah, nii nimed, mida me siin täpsustada Erinevate väljad, nii pealkiri ja tekst, me siis lihtsalt kasutada neid siia kui indeksid vormi andmed. Nii et super mugav. Siis me nimetame post.create, mis loob ja sisestada automaatselt see uus postitus objekti andmebaasis. Ja ma arvan, et see loob funktsiooni Siin on väga lahe näide, kuidas võimas kolb ja töötavad selle, sest kui sa teed midagi PHP, siis võib-olla teha palju valideerimine, siis oleks siis luua andmebaasi ühendus, siis oleks siis täita SQL päringu kuid siin me lihtsalt nii hea post.create, mis suudame, siis lihtsalt saada teavet läbi taotluse objektiks, ja siis liigu see uude lisada, et me loome. Ja siis, kõige viimane asi, mida me tahame teha, on suunata kasutaja tagasi koju. Ja nii me kasutame seda Kolb suunata funktsiooni. Ja mida me ei näinud Enne oli see URL funktsiooni. Nii URL funktsioon võimaldab sa sündis tegelikult nime funktsiooni oma Pythoni kood, mitte konkreetse marsruudi et see on. Nii et ma oleks võinud sama hästi suunatakse kasutaja kärpida, mis saadaks ta koju, kuid kasutades URL funktsioon on kena, sest kui te ei muuda koht, kus asjad on, Ütleme, et ma saan muuta kodus olla / home asemel, see ikka siis tagasi / home, sest tegelikult läheb ja vaatab üles nimi funktsioon, mis teile tagasi URL selle eest. Nii, justkui kohta eeldusel, et sa oled tõenäolisem muuta, kus asjad on, kui nimed funktsioone. Võite kasutada seda tõesti kena URL funktsiooni. Ja üks asi olema teadlik see on natuke keeruline, on see, et sa arvad, et sa võiksid lihtsalt helistada suunata on URL, aga tegelikult kõik teed, tagasi mingi tekst ja HTML, siis tegelikult on tagasi suunata kõne. Muidu saad midagi kehtetuks kohta ei tule string, sest kõik need peavad taas HTML sa tegelikult tahad muuta. Ja nii, kui helistate suunata, see suunab teid lehele, kuid tegelikult tagastab HTML sa pead täitma, et suunata. Mine tagasi avalehele. Nii et meil on need kaks erinevat vaadet. Meil on kodus vaadata. Või ma arvan, et ma peaks ütlema malle. Meil on neid kaks malle, kodus mall, mis kuvab kõik meie postitused ja siis on meil seda kuulutust asi, ja kui klõpsate post, see läheb uue trassi kolbi kuid sellel liinil ei pruugi olema vastav mall. Sa ei pea nägema midagi, kuid saate siiski on see töö läheb kulisside taga. Ja siis sa saad suunata tagasi avalehele. Ja kindlasti, see on lihtne töö Mõnes kenamaks CSS malli ja seda vaatama palju kenamaks, kuid kõik peamised loogika on seal Python. Küsimusi, et näiteks? Tean, et on palju erinevaid asju toimub seal, palju asju, mida me ei näinud Enne, kuid nagu midagi. Jah. PUBLIKU 1: Kas teil on midagi teha erilist nühkima andmed, mis on äärelt vorm? Märkasin just ütles "luua," EZRA ZIGMOND: Jah, nii see on tegelikult, see on tõesti hea koht. Nii et küsimus oli, kas sa on vaja kontrollida ja veenduge, et andmed on kehtivad ja teha mingit puhastamine veenduda, et see kehtib, sest nagu näete siin, Ma ei tee seda. Vaatame, mis juhtub kui ma pärast midagi tühi. Nii, see saab tegelikult lihtsalt teha tühi postitus ja täitke DateTime. Nii et tegelikult sa ilmselt tahan teha midagi sellist, äkki täpsustada, kui pealkiri on võrdne tühi string, siis ei tee seda. Või teevad seda vaid juhul, kui pealkiri on ei võrdu tühi string. Seega ei ole tegelikult automaatselt hoolitseda, et puhastamine teile, et teil on vaja veel teha. Jah, hea küsimus. PUBLIKU 2: see nühkima jaoks järge süsti? Kas sa tead? EZRA ZIGMOND: Loodetavasti peewee ei tee seda. Ma arvan, et see oleks kindlasti päris halb raamatukogu kui ta seda ei teinud. Ma ei tea täpselt. Ma pean vaatama päringuid, et see tekitas. Ma arvan, et kui ma kirjutada oma blogipostituse et mingisugune vaatasin nagu SQL süst rünnak, midagi sellist, kui see on nagu parool valdkonnas või midagi, võite teha midagi sellist. Ma arvan, et ikkagi saada sõna otseses mõttes postitatud aga ma arvan, et peewee ei tee mingi puhastamine andmete Enne seda tegelikult täidab ta. PUBLIKU 1: See tekst valdkonnas on eesmärk on võtta lihttekstina, eks? EZRA ZIGMOND: Jah, on küll. Jah. Nii et ma arvan, et kõik, nii et see on õige käitumine, mis teha, aga ma arvan, et peewee loodetavasti ei tee mingi kaitse kohta nende lõppu. Ja kui sa tahad kontrollige, et seal On viise, kui teil luua päringu. nii et sa ei pea käivitada otse. Ma pean võtma vaata dokumentatsiooni, kuid tegelikult võite vaadata SQL et see tekitab, ja kui heita pilk see, ja teha kindel, et see on põgenedes asju. Teine põhjus, miks sa tahan vaadata SQL et peewee on väljastamist, on see, kui asjad tunduvad minevat tõesti aeglaselt, võite minna ja vaadata, mis see on tegelikult teevad, sest see on mõnikord lihtne kogemata lisada aastal, kuidas sa kirjutad seda, võite kogemata on see vali kogu andmebaasi esimene, ja siis teha mingi operatsioon kohta, et kui sa tõesti tähendas, et valida alamhulk. Ja nii, kui asjad ei ole üsna läheb paremale, see on hea heita pilk taotluse See on tegelikult saada loodud. Jah. PUBLIKU 2: Kui alustasin, paned port 5000. EZRA ZIGMOND: Jah. PUBLIKU 2: Kas vaikimisi peewee, või on see midagi, mida saab muuta? EZRA ZIGMOND: Jah, nii port on vaikimisi kolbi. Kui seda käitada ilma täpsustades midagi, see automaatselt seda teha. Ma usun, et ma oleksin kontrollige seda, aga saate määrata, et app.run, Ma arvan, et sa saad teha midagi sellist, port = 8080. Anname et proovida reaalne kiire. Jah, nii saad lihtsalt täpsustada port = 8080, ja see töötab seal, mis ma arvan, et kui sa tahad, et kasutada seda IDE, ma ei ole proovinud seda välja, aga ma arvan, et kui sa jooksis ta sadama 8080, Te ilmselt oleks võimalik pääseda serverile, just nagu sina olid kodulehel. Jah, kuid see on lihtne muuta, et kui sa on mingit nagu sadama ekspedeerimine asju, mida sa pead tegema. Muid küsimusi? Jah? PUBLIKU 1: Niisiis, ma nägin oma mudelid, et te mainisite, teil täpsustada andmebaasi iga objekti. Kas teil juhtub tea, kas et oleks tõesti lihtne, kui on palju SQLite andmebaasid, et teil soovite kasutada ühe veebirakendus, et sa võid määrata kamp eri ones oma mudel? EZRA ZIGMOND: Jah, lase mind avada see üles reaalne kiire. Niisiis, sa räägid, kui sa tahad olla hunnik erinevaid midagi, võibolla meeldib ja õpilased, mõned Põhjus, midagi sellist? Jah, nii et ma arvan, et sa ikka, iga mudel oleks veel lihtsalt ühest andmebaasist temale pandud aga kui sa tahad olla erinevaid mudeleid, et on teise andmebaasi objektide määratud et see, mida võiks kindlasti teha. Niisiis, kui ma loodud uus, midagi sellist, ja nüüd on see õpilasele, et tundub imelik nagu blogi postitus, Ma võiks täpsustada, et andmebaasis on võrdne db_2 siin. Niisiis, ma arvan, et see on Peamine viis, kuidas saate teha. Cool. Muid küsimusi? Nii lihtsalt, et lõpetada veidi natuke, siin on mõned vahendid, ja need slaidid pannakse Internetis nii et saate tegelikult saada nende lingid. Parim ressursid on tõesti dokumentatsiooni Kolb ja peewee ise. Nad kirjutatud väga hästi, ma arvan. Nii, kolb veebileht on siin, ja neil QuickStart juhendaja, et kõnnime läbi sarnase asju, mida ma kõndinud, aga kui sa tahad mingit läbivaatamine asju, mida ma läksin üle, või sa arvasid, et ma selgitasin midagi segane viis, nad on sarnased näited olemas. Peewee on dokumentatsiooni ja neil QuickStart juhendaja mis läheb üle põhiparameetrid et sa tahaksid kasutada. Niisiis, mida ma rääkisime unikaalne, ja täpsustades vaikimisi, Erinevate elualaldel et saate need oleks kõik olemas. Samuti, kui teil on küsimusi peewee, ja sa pärast neid stackoverflow, mees, kes tegi peewee tegelikult läheb ja vastused neile mõnikord. Kui teil on küsimusi, loodetavasti ta pead suutma vastata, sest ta kirjutas kogu asi. Ma arvan, et kõik Ma tahtsin, et katta. Täname tulemas.