[Glazbom] EZRA ZIGMOND: Bok, svima. Hvala što si se danas. Ovaj seminar je "Python Web Apps s tikvica. " Dakle, ja ću biti govori malo o tome zašto možda želite koristiti tikvicu kako bi web aplikacije s Python, za razliku od nekim drugim okvirima vani, kao što su Django, koji je najpoznatiji. Podnaslov je "i Peewee ", što je nešto ćemo govoriti o tome kako komunicirati sa SQL bazama podataka. To ga čini jako lijepo. Dakle, ovdje je samo brzo rundown ono što ja želim ići više. Dakle, prvi, samo jedan slajd koja će biti QuickStart, koji je, kako bi se sve postaviti na vašem računalu. Idem se pokazati ovo na mom lokalnom Mac stroj, Samo zato što je to, gdje sam to učinio prije, ja sam najviše sviđa s njim, ali ovo je definitivno moguće na CD50 IDE. Dakle, nakon toga, želim uvesti što tikvica, i uvjeriti vas zašto biste trebali koristiti na prvom mjestu. Zatim, ja ću dati brz primjer onoga što vas možete učiniti u boci, brzo primjer onoga što možete učiniti u Peewee, a onda ću vam pokazati više kompletna primjer primjene da sam stavio zajedno da mi Možete prošetati zajedno. I onda na kraju, u posljednji slajd, imam neke resurse koje izgledaju na online za više informacija. Ovo nije potpun udžbenik o tome kako koristiti tikvicu. A ja ću se nadam da napusti neko vrijeme za pitanja. Gledam tko na lokalnoj razini, samo kao, vikati na sredini Ako imate bilo kakvih pitanja. Dakle, brza instalacija stvari, Ako želite slijediti, ili ako želite da biste dobili ovaj se na svoj stroj, Idem se pomoću Python 2.7.10. Tikvica radi s Python 3, ali mi se sviđa pomoću Python 2, jer je neki Python paketi koji ne rade s 3 gostiju. Ako pip instalirali, koji je menadžer Python paketa, Mislim da ako je vaš Python je veći ili jednak 2.7.9, imate već instaliran, to je super jednostavan za instalaciju tih paketa. Možete li PIP instalirati Tikvica, pip instalirati Peewee, obično morate pokrenuti sudo jednostavno tako da dozvole raditi. A, ako koristite super stara verzija Python, Preporučujem ažuriranju Python, ili pomoću EasyInstall instalirati pipsa. Dakle, sljedeće pitanje je, što je Tikvica? I mislim, prvo razumno pitanje sam se pitao Dugo vremena je, što je web aplikacija? Jer to je riječ koju sam misle da je bačeno oko puno da ja stvarno nisam znao. I mislim da je najbolja primjer onoga što web aplikacija, stvarno je CS50 financija, gdje to nije stvarno samo web stranice, ali to je nešto što vam mogao nekako komunicirati s. Postoji korisničkih računa i sve vrste različitih stvari. Dakle, gdje točno crtate granica između onoga što je web stranica, a što je web aplikacija, je vrsta proizvoljna, ali mislim da tu ideju, to je nešto više od web stranice i to je korisna aplikacija. Dakle, Posuda je okvir za izradu web aplikacija pomoću Python. I nadamo se, do kraja to, ja ću vas uvjeriti da zapravo mogao napisati nešto kao CS50 financija pomoću Python, koji sam kao što je puno bolje nego PHP, osobno. Dakle, bocu se oni zovu microframework, kojim, misle da je vrlo jednostavno, ali proširiva. Dakle, to je upravo ono što trebate, ali ako želite više mogućnosti, to je lako ih dovesti u. Ali samo zato što je microframework, ne znači da je samo za male projekte. Imam link ovdje koji kaže da Obama koristi tikvica u 2012. godini za svoju kampanju web stranice, koji nadamo se, je nešto uspjeha. Ali ono što sam stvarno poput o tikvica da, to zapravo ne bi bilo kakve odluke za vas. Samo zato što smo govorimo o web-aplikacija, Moram ga usporediti s Ruby na Šine i Django, od kojih oba su veliki okviri, ali obojica čine pretpostavke o tome kako želite u interakciji s bazama podataka, kako želite predstaviti svoj pregleda, a oni su svakako dobri aspekti na to. Na primjer, Ruby on Rails ima tu aktivnu zapisa sustava, što je jako lijepo način za interakciju s podacima, ali ako želite koristiti Ruby na Šina, ti si vrsta vezan u to. No, s tikvica, kao što ću vam pokazati s Peewee, možete koristiti bilo kakva baze podataka želite, a vi jednostavno možete povući da se u kao nastavak u tikvicu. Dakle, to je razlog zašto sam stvarno poput tikvica, to je da je to ne bi pretpostavke za vas na temelju stvari koje zapravo ne treba. Dakle, zašto bi koristiti tikvice? Prednosti su, to samo je stvarno temeljne značajke ugrađene u to da vam je potrebno. Dakle, ne morate brinuti o razumijevanje cijela hrpa stvari da stvarno ne treba. Vi ne morate brinuti O isključivanja značajke da stvarno ne treba. I, kao što sam spomenuo, to je super lako dodati u nastavcima stvari što trebate. Neki od njih, Posuda ima vlastitu podršku za to. Dakle, postoji nešto što se zove Tikvica admin, koji odražava tu admin panel koji pruža Django, koja vam daje lijep vizualni način za administraciju svoje web stranice. Ali opet, ako ste čineći nešto jednostavno, vjerojatno ne trebate veliki admin ploča, tako da mislim da je to super lijepo. A nedostaci su da imate manje snage iz kutije. Dakle, kada se prvi put otvoriti tikvica, iu vašem Python programa, ste upravo tip od tikvica Uvoz *, ili bilo što drugo, ne baš dobiti sve značajke možda želite. I tako da ćete morati eksplicitnije popis značajke koje želite. Dakle, to je jedan nedostatak, ali ja mislim da je za izgradnju male weba aplikacije kao što ću biti prikazano ti, to nije stvarno problem. A što je posljednja stvar trebao reći, što je pogreška pri upisu, je da postoje manje standardiziran konvencije za kako koristiti tikvice, Samo zato što nema onoliko ljudi koji ga koriste profesionalno u odnosu na Django. Dakle, ako nešto izgleda kao, "Kako ću to učiniti x" u Django, vjerojatno ćete ga pronaći. Postoji dobar dizajn obrasce koje možete koristiti, ali s tikvici je vrsta ide svojim putem, samo zato što je prilično mala knjižnica. Dakle, oni su nedostatke, ali mislim da je još uvijek dobar Knjižnica za korištenje. Pa neka je samo skočiti pravo u tikvicu. Ovo je definitivno ne ide biti potpuna udžbenik, ali to je da vam dati ideju kako strukturirati stvari, i tako da se osjećate ugodno ide off i gleda na dokumentaciji i saznate više. Dakle, neka mi se otvaraju jako Jednostavan primjer u početku, i ti što to pokazuju izgleda, a onda ćemo ga razbiti malo više. Dakle, ovo ovdje, neka mi se to radi. Dakle, ja sada imam svoj prijavni trčanje. Idem otvoriti Safari i to je trčanje na mom lokalnom računalu. Pa ja sam samo ide da bi ovaj veći. Ali localhost: 5000 I tako, sada, sve to radi je, kad posjetite web stranicu, to ispisuje "Hello tikvica" koji nije super korisno, ali mislim da je cool da u ovoj maloj datoteci ovdje, imamo web poslužitelj trčanje koji ispisuje nešto. Dakle, neka je zapravo izgledaju na kod za sekundu, i to break down malo. Je li veličina dobra za svakoga ovdje? Dakle, nadam se, da si nešto udoban koristeći Python. Ja sam uz pretpostavku da možemo gledati na Python i čitati kroz njega. Ako imate bilo kakvih pitanja o ništa, ja mogu ići preko toga. Dakle, prva linija, od tikvica, uvozimo, tikvica s velikim "F" koja je vrsta sve Glavne osobine koje su vam potrebne. Kad god pišete datoteka i korištenje Tikvica, ti si idući u ištanje to uvesti to, samo zato da ima sve glavne stvari. Sljedeća stvar mi je što nazvati ovu funkciju tikvica, samo stvoriti app objekt, a vi ste Uvijek će htjeti učiniti. A onda, skakanje na odjeljak Dno brzo, ovaj dio je ovdje, 'if_name _ == "_ main_"' što je vrsta Python konvencije. Dakle, to će se samo izvršiti ako vas pokrenuti ovu datoteku izravno koristeći Python. Onda, što mi zovemo app.run, koji će zapravo početak aplikaciju ide. Dakle, to je glavna struktura koja ćete imati u bilo tikvica prijavi, je imat ćete ovaj Aplikacija = Posuda (_NAME_), a zatim app.run. Dakle, dvije stvari koje ja imam ovdje su ono što mi zovemo rute. Dakle, pričajmo o usmjeravanje malo više. Ja ću se vratiti na slajd. Dakle najosnovniji koncept u bocu se usmjeravanje. I to je ideja koja vas dodijeliti funkcije u Pythonu na određene adrese na web stranici. Dakle, kad god želite stvoriti novi put, koristite ovu @ app.route Funkcija dekoraciju. Dakle, ako ste upoznati s funkcija dekorateri u Python, to je ovaj koncept koji vam omogućuje da se funkcije a okružuju ga s nečim drugim. Pa stvarno, što je to dekorater radi, je da je potrebno funkciju ispod nje, i dodaje više informacija na njega, ali ono što se zapravo Tikvica ne bi se to dogodilo nije super presudno, ali ono što je važno, je da je prije početka rute staviti ovaj @ app.route, a zatim adresu trase, tako da je Slash je ono što mi vidio kad mi samo otvoriti web stranicu. Dakle, to je stranica. To je samo kosa crta rutu. I onda imaš tu funkciju. Naziv funkcije može biti što god želite. To ne mora nužno imaju veze s rute. A onda, bez obzira na Funkcija povratak, funkcija treba vratiti niz. I to string može sadrži HTML ili bilo što, i to je zapravo ono što će doći vratio u vašem web pregledniku kao HTML, i to će donijeti to. Dakle, to je isti broj to je iz primjera da sam samo trčao, pa kad smo posjetiti Slash, to naziva Hello World funkciju, koja Samo vraća niz, Pozdrav Tikvica, i koji se ispisuju na zaslonu. Dakle, tu je još jedan primjer, što je, prilikom posjete / Pozdrav, to ispisuje Hello Riječ, koja zapravo trebao reći, Hello World, ali neka je pretvarati se da je namjerno. Tako ćemo povući da se jako brzo. Dakle, ako idete na localhost / Pozdrav, sada će ispisati nešto drugo. Dakle, to je samo brzo primjer kako možete stvoriti dvije različite rute. Dakle, do sada to nije super korisno, nema puno što možete učiniti, možete jednostavno napraviti sve što je u imaju različite HTML stranice, a kada posjetite određeni Stranica to samo učitava stranicu. Tako ćemo vidjeti nešto više korisne stvari koje možete učiniti. Dakle, jedna stvar koju možete imati primijetili u primjeru koji sam izvukao gore, da sam app.run (debug = True). I tako, što je to ispravljanje argument čini, da kada pokrenuti svoj web poslužitelj, kada ste u svoj program, ako promijenite datoteku, ona će automatski ponovno učitavanje poslužitelja. I tako da zapravo ne morate Restart Python, koji je super korisna. Mogu pokazati da. Dopustite mi podići moj broj sa pogreška pri upisu u njemu, i pretvarati se da je pogreška pri upisu je stavio tamo namjerno za instruktivne svrhe. Tako ćemo dodati ovaj natrag u. Tako sada on kaže Hello World. Ja ću ga spasiti. A ako ćemo povući se terminal, vi ćete kažu da je to ponovno pokretanje, jer otkrije promjenu, pa sad kad smo ponovno odaberete ovu stranicu, to će ispisati ispravnu stvar. Dakle ispravljanje je super korisna za to. Također, ako imate bilo vrsta sudara, tako da dopustite mi da ovu aplikaciju sudar tako da se ne vrati niz. Dakle, neka je samo ga povratak Ništa nekog razloga. I onda kada sam posjetiti ovu stranica, samo će srušiti, ali poslužitelj ne samo srušiti, to zapravo daje vam super korisnu leđa trag svega što je pošlo po zlu. A što je jako lijepo, da se na svakom koraku u ovom leđa traga, možete otvoriti interaktivni shell ovdje, a nekako isprintati ono varijable želite pogledati. I tako ispravljanje pogrešaka stvarno korisno za figuring out što se događa s vašim poslužitelja, a ne samo viđenje nešto u PHP poput 500 unutarnja Pogreška poslužitelja, što je super beskorisno. Jedna stvar biti svjestan je da, ako ste stavili svoj app online tako da je vidljiv u javnosti, što nikada ne žele napustiti debug mod na, jer ljudi mogu zapravo koristiti tu konzolu sam pokazala da izvršavanje proizvoljnog koda. Dakle, oni mogu ispisati kao i bilo Tajni kodovi imate tamo, oni mogu pogledati točno kako vaše web stranice radi. Dakle, to je stvarno korisno za testiranje, ali uvijek pobrinite se da ga prije objavite nešto online. Dakle, ako koristite nešto kao što su PHP, postoji ova ideja koje možete proći informacija između web stranice stavljajući informacije zapravo u URL, što je zahtjev GET, ali tikvica, možete zapravo nešto vrsta kao što je to, tako da rutu koja ima varijabla kao dio. Dakle, ako pogledate ovaj Primjer na zaslonu ovdje, imamo put koji je ('/ Pozdrav /'), i tako, ako posjetite / Pozdrav / nešto, to nešto će zapravo dobiti popunjena u varijablu imena. A primijetiti da funkciji koji dolazi s te rute mora uzeti u parametru ime, tako da će zapravo bi prošao u funkciju. A onda, nakon što ste unutar tu funkciju, možete liječiti da kao normalna Python varijabla, pa onda, ona će ispis Pozdrav, i to će ispuniti ime pomoću Neki oblikovanje niza. Dakle dodati promjenjive dijelove na usmjeravanje, koristite kutnikom oznaku. A po želji, možete koristiti ono što se naziva konverter. I tako, ako ste stavili ovo napomene uz debelog crijeva, možete odrediti da je int ili float, ili put, i ona će automatski pretvoriti to. Također možete napraviti konverziju u funkciji Python, Samo pomoću cast, ali ponekad, ako želite osigurati da je int, možete staviti pravilo konverzije tamo. Tako ćemo podići primjer nekih promjenjivim pravilima. Dakle, ovdje, to je isti osnovni Struktura s od tikvica uvoza Tikvica, app = tikvica (_NAME_), a zatim je pokrenut krajem. Imamo dva različita varijabilni ruta ovdje. I prvi je onaj koji sam pokazao u slajd, što je to samo je potrebno u ime string i to će ispisati Pozdrav, ime. I tada, drugi on koristi pretvorbe. Dakle, ovo će ga automatski pretvoriti na int, a zatim dvostruko int, i ispisati to van. I, ne činimo bilo kakve obraćenja unutar nje jer Posuda brine o tome. Tako ćemo dobiti ovu trčanje. Kada imate tikvica aplikacija trčanje, možete kontrolirati-C iz njega zaustaviti poslužitelj trčanje. A onda ću pokrenuti varijable. Tako ćemo ići na localhost / zdravo / Ezra i nadamo se, to će pozdraviti me. Dakle, to je u moje ime, u varijablu rute, a to ga popuniti ovdje. Dakle, i ja ću pokazati brz Primjer udvostručenje. Dakle, ako idete / double / 3, to će ispisati 6. Dakle, ovo brinula konverzija za nas. Dakle, možete to učiniti sa float, i nešto posebno, ako je potrebno navesti nešto poput put, koji vam omogućuje da prihvate kose crte, ali to ne bi trebao biti problem obično. Do sada smo, još uvijek imamo upravo vraćaju žice, što nije vrlo zanimljiv. Mi bi zapravo mogao vratiti doslovni HTML niz. Tako je u kodu možemo umetnuti nešto poput b-privjesak kako bi ga podebljano, ali većina You vrijeme ne zapravo žele da pisanje HTML koda u svoj Python koda. Ona dobiva stvarno neuredan, a to nije dobro vrijeme. Boca omogućuje nam izdvojiti HTML u ono što se zove Predložak, pa ako ste mislili u smislu MVC modela da ste upoznati s, nadamo se, od rada s CS50 financija malo, možete misliti na Python datoteka kao više od kontrolora, gdje su u interakciji s bilo podaci Model možete imati. A onda su se pozivaju na Posjeta i prolazi informacije na tu View popuniti podatke u HTML kako treba. I ono što mi zovemo one Posjeta Predlošci su u klasi. Dakle Posuda koristi još Python modul koji će se automatski instalirati kada Pip instalirali Tikvica se zove Jinja, koji omogućuje dodavanje tih primjedbe na HTML da vidite na zaslonu, koji omogućuje stavite u stvari kao što su uvjetne, i petlje u HTML. Tako to izgleda malo kao i kako vama može koristiti PHP u HTML datoteke, ali to je samo kada je tikvica poslužitelj služi se HTML datoteku, to će pokrenuti ovaj templating motor i analizirati kroz to i ispuniti stvari. Dakle Posuda ima funkciju render_template koje možete vidjeti na dnu ovdje. I tako kada posjetite ovu stranicu, to će donijeti ovu hello.html predložak, a zatim ispunite HTML stranice. Pa neka je samo pokrenuti taj stvaran brzo, i vidjeti kako to izgleda, a onda ću proći kroz malo detaljnije. Dakle, vaši predlošci idu ići u mapu Obrasci. To će automatski tražiti unutar Predlošci mapu za taj predložak. Tako ćemo otvoriti ovo. Dakle, ja ću pokrenuti templating primjer. Dakle, ako idem na / zdravo / Ezra, to je to strašno, antipatičan nadstrešnica oznaka koje sam stavio u. Vrlo lijepo, vrlo dinamičan. Ja sam veliki fan. Ali što se događa ako Upravo sam ići, / zdravo? Dakle, to samo govori Hello World. Nisam prođe to ime, i što ga ispunjava automatski. Tako ćemo vidjeti kako je to učinio i kako možemo riješiti taj nadstrešnica možda. Dakle, ovdje, to je vrsta zanimljiv primjer, ako ste upoznati s načinom prekidač izjava raditi na jeziku. Recimo ovo je nešto kao, koja vrsta pada kroz, gdje se zapravo vezani dva različiti putevi do istog funkciju. Tako smo pričvrstite / Hello put i A / Pozdrav / naziv rute Hello, a mi navesti using-- vam omogućuje Piton odrediti zadanu funkciju arguments-- pa ako nema ime, tako ako idemo samo / hello, on će automatski filtrirati na ime jednak Ništa. Dakle, možemo iscrtati Predložak s name = imenom, tako da će proći u parametru ime jednaka ovaj naziv funkcija parametra, u predložak. To još uvijek ne objašnjava kako je odluči li ispisati Hello World, ili ispisati svoje ime. Tako ćemo zapravo izgledaju u samom Predložak, i vidjeti gdje se koji dolazi iz. Dakle, u ovom predlošku, mi zapravo imaju neke uvjetno logike, što neki ljudi bi tvrde, zapravo ne bi trebali imati puno uvjetno logika unutar same svoj predložak. To bi trebao biti unutar Kontroler, ali za ovaj primjer to je nešto prilično mala. Dakle ovdje smo provjeriti, ako je ime, tako Ako ime nije jednaka Ništa, ako je ime zapravo donesen, onda ćemo kažu Pozdrav, ime s zaglavlja i nadstrešnica, sve je to normalno HTML, inače, mi ćemo ispis Pozdrav, Svijet baš normalno. Dakle, par stvari za primijetiti ovdje o tome kako formatirati templating, je da sve ove uvjetne izjave, vrsta kao što su kako smo ga kada PHP želite umetnuti neke PHP, koristite manje-nego pitanje Mark, to je vrsta analogna ovdje s {%. Dakle ovdje imamo uvjetnu kôd. A onda, kada zapravo želite doslovno procijeniti nešto, i ispis je na zaslonu, možete koristiti dvostruke aparatić. Dakle, ovdje su dvokrevetne aparatić, a onda ćemo navesti ime, pa unutar toga, to će procijeniti na ime varijable koje donesen je u od uzvratiti funkciju predloška, a ne samo ispis kako, ako smo dobili osloboditi od njih, to bi samo ispisati riječ "ime". Dakle, to je nešto što treba paziti. Dakle, još jedna stvar obavijest je da, kad smo želite koristiti render_template funkcija, mi zapravo moramo uvoziti to izričito od tikvica. I to je primjer modularnost tikvica, da ne moraju uvoziti stvari koje ne trebaju. Vi samo može donijeti u Funkcije ste zapravo potrebno, što je ponekad lijepo, tako da ne imati sve ove funkcije sjedi oko koje ne koristite, ali, ako zaboravite da vas potrebno je uvesti render_template, vjerojatno ćete dobiti upozorenje koji će vas obavijestiti o tome. Dakle, to je templating. Dakle, mi smo pokazali kako se napraviti jednostavne web stranice, i dodati malo više logike je, u smislu usmjeravanja varijable. To vam omogućuje da učinite različite stvari na temelju ono URL idete, i onda, dati HTML malo više smisla Uvjeti kako želite učiniti stvari. Ne morate staviti sve Vaša HTML u vašem Python, ali prilično mnogo svaka web aplikacija, ti si idući u ištanje nekakvu modela podataka povezane s njom. I tako već tradicionalno, to bi biti nešto poput SQL baze podataka. A možete jednostavno komunicirati izravno s SQL. Python je, mislim da se zove. SQLite 3. Možete jednostavno uvesti SQLite 3 i izvršavanje SQL upita izravno, ali ja ne znam o vama, ali ja stvarno ne sviđa, jednostavno, pisanje SQL upita. Ona teži da se stvarno dugo i komplicirano. I tako, nešto što Volim koristiti je ono što je poznat kao ORM, koji je objektno-relacijske mapiranje. I točka od objektno-relacijske mapiranje, je da postoje dva različita načina na koje možete razmišljati o bazama podataka. Tako je, primjerice da Profesor Malan obično koristi u razredu, je Excel tablicu, u kojoj imate ove retke i stupce te, i to je stvarno korisno za kako je zastupljena u SQL i kako komunicirati s njim, ali još jedan način da se to zapravo korisno razmišljati o tome ponekad, je u smislu klase i objekte. Dakle, umjesto razmišljanja svakog stola kao vlasništvo Ovaj redak koji ima određeni informacije, možete zapravo mislim da je to bio svaki stol je klasa, i onda svaki primjerak klasa ima određena svojstva. Dakle, u ovom primjeru, slučajevi klasa su redovi u tablici, i onda svaki objekt bi biti stupac u tablici. Dakle, ORM da volim koristiti se zove Peewee. To je stvarno mali, nešto poput tikvice. Mislim da oni idu dobro zajedno, ali ima puno drugih ORMs koje možete koristiti. Više popularan jedan je poznat kao SQLAlchemy, a ja se ne mogu sjetiti zašto sam prvobitno izabrao Peewee preko SQLAlchemy, ili bih vam reći zašto sam Mislim da je najbolji, ali mi jednostavno ide koristiti ovaj jedan jer znam kako ga koristiti. Dakle, jedno pitanje je, zašto treba li gnjaviti pomoću ORM, umjesto samo izravno pisanja SQL upita? I mislim najboljem slučaju, je da zapravo ne napisati SQL upita. To je puno lakše, jer ja ću vam pokazati, da učiniti stvari kao izbor, umetanjem, brisanje, osobito stvaranjem tablice. To je puno lakše napisati klasnu strukturu, nego što je potrebno izgraditi Napravite Tablica izjava, ali jedno biti svjesni, je da je ORM će pokušati svoje najbolje shvatiti što najviše učinkovit SQL upit će biti, ali ponekad se dobiva krivu. A pogotovo ako ste rad s velikom bazom podataka, možete primijetiti da upita koji bi trebao biti trčanje brzo, zapravo traje dulje. A ako pogledate ispod haube kako ORM je tumačenja da je u SQL, to bi moglo biti događaj nešto stvarno smiješno, samo zato što je vrsta Pokazao vaše namjere u krivu. A, bilo je vrijeme kada Morao sam ga nadjačati, i samo izvršavati svoje vlastite SQL upita, samo jer je raščlanjivanjem na čudan način. Dakle, postoji neki iznad glave, samo na putu da prikuplja vaše izvještaji dolje u SQL. Dakle, pogledajmo super brzo na jednostavan primjer modela podataka da biste mogli koristiti. Dakle, ovo je Python koda, i tako Prva stvar koju želite učiniti je iz Peewee uvoz *. Dakle, za razliku od tikvica, gdje imate svi ti pojedinačni moduli, i želite uvesti tikvicu i napisati predložak, i neki drugi kako ćemo vidjeti kasnije, iz Peewee, možete samo uvesti sve, jer to je prilično mala knjižnica. Dakle, prva stvar koju želite učiniti je zapravo stvoriti ovaj objekt baze podataka. Dakle, imate db = SqliteDatabase, a zatim naziv baze podataka. A to će zapravo stvoriti objekt baze podataka da možete komunicirati s, s Peewee. A onda, imamo stvarna model koji želimo stvoriti. Tako stol želimo stvoriti. Dakle, u roku Peewee, svaki razred ima vlastite tablice u bazi podataka. Dakle, svih vrsta naslijediti od osnovnog modela, i glavni M model nešto što je definirano u Peewee. Dakle, sve svoje modele trebao naslijediti kao njihov najviši superclass, oni bi trebali naslijediti od Model, ali ono što je stvarno cool, je da zapravo možete imati svoj Modeli naslijediti od drugoga. I puno vremena, vaš Modeli podataka ne moraju nužno napraviti lijepo nasljedstvo hijerarhiju, ali vremena u kojem se radi, to je jako lijepo, jer imate model svojstvena od drugoga. Dakle, definirali smo ovu klasu 'student', koji nasljeđuje model, i ima tri svojstva. Ona ima ID, koji je PrimaryKeyField, koji je nešto što je predviđeno po Peewee, naziv je CharField, a ocjena je IntegerField. Dakle, to može i ne mora biti Kako CS50 zapravo pohranjuje sve razreda studenata. To nije, ali to je kako bih to učiniti. A onda je, u roku Ovaj razred, i to je nešto što možete učiniti s Python, možete imati ugniježđena nastavu. A to je nešto što je potrebno od strane Peewee. Dakle, ova klasa Meta, imate navesti da je baza podataka jednaka predmeta koje smo stvorili gore. I to govori što je datoteka ovaj stol zapravo će se nalaziti u. Dakle, to je nešto što morate učiniti u roku sve svoje modele. Vi samo morati navesti u ovoj klasi Meta da baza podataka je jednak db. Dakle, ono što ja obično učiniti, ako imam hrpa različitih modela, je da imam jednu bazu Model, koji obično samo nazvati "osnovni model" koja ima Meta klasa, a postavlja baze podataka je jednak db. I onda sve moje naknadne modela će naslijediti od tog osnovnog klase. I onda ja ne moram brinuti o postavljanju Meta klase. Dakle, kada se to zapravo dobiva sastaviti dolje u SQL izraza, to izgleda ovako neugodne stvari dolje Ovdje, "Stvaranje tablica Student ID cijeli broj, " kako god. I, mislim da je kraći, to SQL upit ovdje, ali ako pogledate ove klase ovdje možete točno vidjeti što se događa. Možete vidjeti što vrste polja postoje, ono što oni nazivaju, i tako, mislim da gledajući ovaj Python koda je puno više čitati nego pokušavajući napisati ovaj SQL upita. Dakle, da bi se zapravo koristiti bazu podataka, moramo spojiti na njega u Python. Dakle, ja obično napisati funkciju pod nazivom initialize_db da se dvije stvari. Potrebno je u bazi podataka Objekt db i to spaja na njega, koji je upravo otvara ODSJEK u bazu podataka. Ako ste samo trčanje, iako web stranice na vašem lokalnom računalu, to nije super velika stvar brinuti oko spajanja i odvajanja, ali ako radite je na internetskim stranicama, želite biti sigurni da je, kad korisnik spaja na njega, kad zatvoriti web stranica, što isključite tako da nemaju hrpu ljudi povezanih na svoju bazu podataka odjednom. A onda, kad vam povezivanje na bazu podataka, želite nazvati db.create_tables, i popis modela za ono što želite za stvaranje tablice. Dakle ovdje, ja samo želim stvoriti ga za ovog studenta. A onda, ono što je važno, je da navesti siguran = true najviše vremena. Pa što ova izjava će učiniti, je da je to stvara tablice za Student model, ali samo ako da tablica ima ne stvorena već. To je ono što je sigurno navodi se. Dakle, to neće prebrisati Vaš postojeći stol, to će samo stvoriti nova stol, ako ne postoji jedan tamo. Dakle, vi samo mogao stvoriti stolovi jednom pomoću SQL. I onda se taj baze sjedenje tamo, i zatim spojite svaki put, ali to je obično lijepo samo stavite u ovom create_tables pozivu, tako da, ako ikad izbrisati svoje Baza kada pokrenete vaše web Ponovno app, to će ga ponovno. Dakle, samo bi bili sigurni da je sigurno je navedeno da je istina, ili ćete pronaći podatke samo uzimajući clobbered svaki put. A onda, možete jednostavno nazvati initialize_db uspostaviti veza, i stvoriti tablice ako je potrebno. Dakle, najčešći stvar da ćete želite učiniti, ili jedan od najčešćih stvari, je zapravo umetanje stvari u bazu podataka. I tako, umjesto da napisati umetnuti u Izjava sa svim navedeno vrijednosti, zapravo možete nazvati Funkcija na studentske klase. Dakle, kad stvorite razred koji nasljeđuje od modela, to je to stvoriti metodu. Dakle, što učiniti klase name.create, i odrediti parametre da želite proći. Dakle, ako želim dodati neke učenike našem CS50 stupnja knjiga, primjerice, Ja ću staviti u Davida, koji ima ocjenom vrlo dobar, on ima 95. I ja, koji ne radi tako dobro u CS50, imam 50. I tako je lijepa stvar o što to stvaranje funkcija radi, je da se vrati na primjer, ili red, da je stvorena u tablici, pa onda se spremite da u promjenjiva, a rad s njom poslije. Možete promijeniti okolo, što Ja ću pokazati primjer. Obavijest da nisam moraju navesti ID, zato jer je PrimaryKeyField, on će se automatski povećajte ga ako ne navedete. A, u stvari, vjerojatno Ne treba ga navesti, jer možda slučajno clobber tuđi ID. I želite napraviti sigurni da je jedinstven. Dakle, zapravo, najviše uobičajena stvar koju želite učiniti, vjerojatno odabrati iz baze podataka Nakon što ima puno informacija tamo. I tako, ako želite dobiti sve, pa je ekvivalent odaberite zvijezde od učenika izjave, to samo bi se student.select. A to će vam vratiti niz sa svim studenta objekata u njoj koje ponoviti više želite. Možete dobiti stvari iz nje. I većinu vremena, ne samo želim raditi odabir, vi zapravo želite odrediti nešto. I tako, možete lanac zajedno ove funkcije poziva, kao i kako bi lanac ste zajedno su navodi u SQL. Dakle, što možete učiniti student.select ()., Gdje u ovom primjeru. A onda, možete odrediti uvjete, samo pomoću normalan Python Logičke izraze provjeriti stvari. Dakle, u ovom slučaju, da želite ograničiti ono što odaberete da, gdje student.grade jednak 50, i student.name jednaka Ezra, tako da će samo me izaći iz nje. I primijetite, jedan stvarno suptilna stvar ovdje je da, ako želite odrediti AND i / ili ili / ili, u Python, koju inače koristite, Mislim da je riječ "i" zapravo, ali ovdje koristite jednu ampersand, što je normalno bitovni operator, ali u ovom posebnom slučaju, upravo onako Peewee to radi, koristite singl znak za struju navesti "i". To je nešto što Ja se miješaju se puno, ali ne dolazi do toliko u praksi. A onda, nakon što su svi studenti izvan baze podataka, nakon što ste učinili da ste odaberite i vaš trošenje ili što god, možete koristiti foreach petlju, baš kao normalno u Python, s bilo kakve iteratora ili bilo kakve ponude. Dakle, što možete učiniti za s u student.select (). whe Re (Student.grade <75), a tako da će ponoviti tijekom svakog studenta u tablici čija je ocjena manja od 75, što u ovom slučaju, još uvijek je samo mene. A onda ste mogli učiniti nešto u to petlja, kao i pošaljite mi email i reci mi da zapravo pretvoriti u moj problem setovima. Dakle, još jedna stvar koju možete to je to je stvarno lako ažurirati redaka u tablici. Dakle, ne zaboravite vratiti ovdje, Vaš kada sam umetnuta, Uzeo sam vrijednost koja je vratio student.create, i ja ga dodijeliti ime zove Ezra. I tako sada, možete mijenjati vrijednosti unutar tog stupnja, baš kao što bi normalno klase u Pythonu. Na taj način možete postaviti ezra.grade = 95 i koje će ažurirati lokalnu kopiju, ali ako stvarno želite obvezati da promjene u bazi podataka, moraš zvati ezra.save, tako da se zove .save metoda na primjer. I tako sada, uspješno su se promijenile moja ocjena u bazu podataka. Dakle, onda recimo da sam dobiti je uhvaćen mijenja moj razred unutar baze podataka. Profesor Malan vjerojatno ide da me želiš izbrisati iz razreda, i tako možete nazvati .delete instanca metoda samo na tu stvar. Dakle, ako ste htjeli otići natrag u ovu petlju ovdje i zapravo, umjesto slanja e-pošte sve učenika čiji stupanj manje od 75, što ste htjeli da ih izbrisati, unutar ove petlje ste mogli pozvati s.delete instancu. I zadnja stvar koju želite učiniti, je kad god uspostaviti vezu, i završite sa svojim radom, želite nazvati db.close, gdje db je da baza podataka prigovoriti da smo imali prije. A vi želite biti sigurni da je sve dobiva zatvorena iz. Cool. Pa sad, ja imam primjer aplikacije. Ja sam nekako pre-made sve jednostavno tako da neće biti bilo živjeti kodiranje pogreške, ali možemo šetati to i vidjeti kako će staviti tikvice i Peewee zajedno, i napraviti jednostavnu aplikaciju. Ja bih to nazvao CS50 dreka, a to je vrsta jednostavnog blog platforme. Dakle, prvo, ja ću ga pokrenuti i pokazati kako to izgleda, a onda možemo gledati više u kodu. Ok, pa neka je samo pokrenuti ovo. Cool, ja ću to malo manji. To nije vrlo lijepo, samo zato Nisam puno CSS, ali ono što čini, ona ima ova baza blogu, i to ide kroz sve ih, i to će ih prikazati na stranici u poretku najnoviji. I tako to su samo neke postove da sam sprema u bazu podataka. Dakle, ako želimo stvoriti novi Post, možemo ići Dodaj novi post, i mi možemo ući titulu Post, tako nešto slično, CS50 seminar. Wow, stvarno uživati ​​seminar. Cool. Zatim pritisnete post, a to će preusmjeriti vas vratiti na početnu stranicu, i onda ćete vidjeti da Zadnji post je dodan. I dalje imamo sve one tamo. Tako sada, idemo korak kroz sve broj i vidjeti kako se to provodi. Dakle, mislim da je prva stvar koja Idemo pogledamo, zapravo modeli. Puno vremena, kada ste projektiranje nešto, Želite razmišljati najprije o tome idete zastupati svoje podatke, a zatim dizajn stvari oko toga, tako da sve ima smisla. I to je zapravo kako sam to učinio kad sam bio stvaranje ovo, Sjeo sam i mislio, Što želim u postu. Dakle, ovdje imamo istu strukturu da sam spomenuti ranije, gdje radimo DB = Sqldatabase ('posts.db'). U stvarnosti, vjerojatno ne želite na tvrdi koda na vaše ime u bazama podataka. To bi vjerojatno trebalo biti parametar koja je pohranjena negdje, možda u config file, ali u mali primjer kao što je ovaj, to je u redu da se hard kôd koji u. Tako sada imamo ovaj post klasu, koja nasljeđuje iz baze modela. I to je, opet, ID = PrimaryKeyField. Zapravo, ako ne odredite, ako sam zapravo dobio osloboditi od toga, onda Peewee ćemo se pobrinuti automatski stvara taj ID polje, i ona će automatski čine ga PrimaryKey, koji Mislim da je jako lijepo, jer obično, to je nešto što želite imati, ali ja bih ga stavio u posebno, Samo tako se sjećam da je tamo. Ali ako ne navedete da, koji će biti tamo automatski. Dakle, imam datum koji je DateTimeField, a sve ovi različita područja, ako vas pogledajte Peewee dokumentacije, to će vam dati popis različitih Vrste polja koje možete koristiti. Za veći dio, to je analogna na ono što će vidjeti u SQL. Dakle, tu je CharField, A VarCharFields, TextFields, koji su jako dugo tekstovi, poput blogu potencijalno, DateTimeFields, DoubleFields, FloatFields, sve takve stvari. A možete proći u ostalim argumentima na to što nisam navesti ovdje. Recimo, na primjer, vi ne želite omogućuju dva postovi imati isti naslov, možete navesti nešto jedinstveno = Istina, i to je samo dodatni parametar polje koje kad ga sastavlja dolje u SQL, to će odrediti da to mora biti jedinstven. Također možete odrediti nešto poput nije null i sve ostale stvari normalno raditi u SQL. Dakle, to je prilično jednostavan Model koji je datum. Obavijest ovdje, u DateTimeField, Naveden sam što je zadana. Ja ga je navedeno da se datetime.datetime.now, zbog načina na koji to dobiva ocjenjuje, to je zapravo ocjenjuje datetime.now kada to dobiva umetnuti u bazu podataka. Mislim da je, ja bih provjeriti ovaj, ali ako si učinio ovako nešto, onda to bi zapravo ocjenjuje da je jednom, a onda Dio sekunde u kojem će uvijek biti isti. Dakle, samo ako radite nešto s datetimes, dvostruka provjera da je to ocjenjivanje, kada zapravo dobiva umetnuta, inače možda biti zbunjen. Naslov je samo CharField, koji postoji više argumenata možete proći u navodeći točno koliko dugo želite da bude, ali ovdje, to stvarno nije važno. I tekst će biti tekst cijelog poštom, i da će biti TextField samo zato što želite kako bi se omogućilo da se prilično dugo niz. Onda smo tu Metu podrazred da je samo navodi da želimo bazu gdje je to zapravo otvara u biti DB objekt koji smo ovdje. I zadnje što imamo ovdje je samo ova funkcija kako ćemo koristiti s naše glavne aplikacije inicijalizirati baze podataka za povezivanje je, a zatim stvoriti Post tablicu. Sada, pogledajmo same glavne aplikacije. Dakle, ovo je dosta malo duže od onih kako smo vidjeli prije, ali nadamo se ne previše loš. Dakle, dopustite mi produžiti ovo. Dobro. Dakle, primijetite i na vrhu sam uvozi cijela hrpa drugih stvari od tikvica da nemamo stvarno vidio prije. I nadam se, možemo proći kroz svaki od njih jedan po jedan i razgovarati malo više o ih, razvrstani prema npr. Dakle, imamo tikvici a render_template, što smo vidjeli, ovaj zahtjev objekt, koji će doći kad gledamo kako oblik da sam zapravo pokazuje djela. Preusmjeravanje, koji vam omogućuje da preusmjerite natrag iz stvaranje novih post natrag na izvornu početnu stranicu, a zatim URL, što je nešto što vam omogućuje shvatiti gdje se na Web stranica je ta stranica. Dakle, sljedeći što mi je činiti, ja se uvoz sve informacije iz modela datoteke koje smo upravo gledali. A, da. Dakle, nešto novo što dolazi kada ste se bave, osobito baze podataka, je da možete odrediti funkcija koja dobiva zove prije svaki zahtjev, a funkcija koja dobiva nazvao nakon svakog zahtjeva, koristeći ovaj Zahtjev funkciju dekoratere app.before. I tako će se izvršiti gdje god je ova funkcija. To ne mora biti nazvao prije zahtjeva, ali obično to je nešto pametno nazvati. Možete odrediti god funkciju Želite li se zove tamo, pa sam ovo navedeno initialize_db Funkcija da smo imali još u Models datoteku, tako da prije svakog zahtjev, želite spojiti na bazu podataka. Postoje dvije različite načina na koje možete učiniti. Možete napravitiapp., Ja Vjerujem da je after_request. A razlika između after_request i teardown_request, je da after_request će se dogoditi samo ako je zahtjev zapravo bio valjan. I tako, samo ako je Zahtjev je bio uspješan, ako ništa otišao u krivu, ali teardown_request se događa u slučaju uspješan zahtjev ili u slučaju pogreške. Dakle, obično, želite koristiti teardown_request, osim ako ne želite učiniti nešto posebno drugačije u slučaju pogreške. No, samo za zatvaranje baze podataka, je li to uspije ili ako to ne uspije, mi želite odspojiti iz baze podataka. Dakle, to se zove, db.close na db objekt. Obavijest da je teardown_request uzima u izuzetka. Tako možete provjeriti postoji li doista pogreška kada je zatvaranje, ali ovdje, nadamo se, tu nisu puno pogrešaka, tako da smo samo vrsta ignoriranje toga. Ok, a ostatak od njega nije previše loše. Dakle, kad idemo na početnu stranicu, donio mi ovo home.html predloška koja će se otvoriti. Protivnički u post jednak, a što je to čini se, sjetite imamo ovaj post Model, pa smo odabrali sve postove, a zatim još jedna stvar koju možete učiniti, možete odrediti WHERE, možete specificirati naručiti, pa smo se sve postove koje dobili odabrane, a onda ih naručiti od strane post.date.descending. I to će se navesti kada oni zapravo izaći, najnovija jedan će biti vrlo prvi. A onda, prolazimo da u home.html predložak, pa neka je zapravo otvaraju da Predložak stvarno brzo, i pogledajte kako se to radi. A to nije velika HTML, ali nadam se, možemo se usredotočiti na Python. Dakle, tu je link na dodavanje novih Post, i tako to određuje put u tikvicu da smo definirati, što je upravo ovdje. Ovo je novi post rutu, i mi navesti da se ovdje. I tako to je link koji će zatim ići na toj ruti unutar tikvica poslužitelja. Više zanimljiva stvar je to za petlju ovdje. Tako smo odredili da je ova Post parametar koji je prošao u render_template funkcija, za svaki post u post-a Predmet koji se prošlo u. Želimo ispisati post naslov, u H1, a onda u nastavku, želimo ispisati post tekst unutar stava. I ovdje, možemo zapravo pozvati funkciju Python, tako možemo nazvati strftime, ST-RF-vrijeme, i možete proći u formatu nizu koju želite ispisati podatke u. Dakle, to je prilično lijepo da možete Zapravo to zovu Python funkciju iznutra ovdje. Ne morate raditi oblikovanje na strana kontroler, jer stvarno, formatiranje datum je nešto što želite nositi u prikazu. I sve ove posto stvari nije super važno. Ako ste u potrazi dokumentaciju za funkciju strftime u Python, što određuje sve to stvari, ali to je kako, kad smo bili u potrazi na početnoj stranici ovdje, to formata ovo s lijepo datum, a to određuje AM ili PM, ali normalno, ako nije imao ovo ovdje, vjerojatno ćete dobiti neke smeća datum koji nije izgledao jako dobro. A onda smo odrediti post.text, i ja bi stavili par redaka ovdje, staviti neke prostore između svakog posta. Dakle, mislim da je najvažnija što u ovom primjeru, je da možete koristiti ovu za petlju. A to je slično stvari koje možete učiniti u PHP-u. Možete ponoviti kroz, sve dobiva donesen, i tako, umjesto da se to copy / paste, copy / paste sve HTML, samo trebate napisati jednom, a zatim možete ponoviti tijekom sve postove. A to je nešto Uobičajeno je da želite učiniti, kada imate puno podataka, je da je za sve u svoje podatke, želite učiniti sličnu stvar. A onda, samo zapamtite, da kad vas želite ispisati nešto izričito u HTML, koristite dvostruka aparatić ovdje, ali onda kada želite odrediti neke informacije o stanju, ili oko for petlje, što koristite posto nosač. Dakle, ide natrag u Python kod, tako da objašnjava što se događa u glavni Ruta, kad idemo tamo, to samo pokazuje sve postovi, ali onda se postavlja pitanje je, kako ćemo zapravo dobiti postovi u bazi podataka, koja je malo više zanimljiv. Dakle, kad kliknete na novi Post veza, što smo vidjeli ovdje, vas preusmjerava na ovom obrascu. A to je samo jednostavan poziv na render_template funkcija, koji je tada prolazi u novi post u HTML obliku. Tako ćemo pogledati kako. Dakle, ovo je vrlo jednostavna. To je jednostavan HTML oblik koji će izgledati malo poznato, na temelju oblika u CS50 financija. I tako smo naveli ovdje, akciju. I ovdje, ako radite s PHP, normalno je, će biti nešto poput, create.PHP, ali ovdje mi zapravo odrediti rutu u tikvicu poslužitelja. I tako, ovaj put odgovara do stvaranja rute da smo ovdje, što ćemo ići u u sekundi. I tako smo odredili da to je metoda poslije, jer želimo poslati ovaj oblik podataka, a obično kada šaljete podatke iz obrasca, možda želite koristiti POST zahtjev, Samo tako da ne završiti s ovom velikom, nezgrapan URL. Ali možete se također može koristiti zahtjev GET, i to prođe u promjenjivu usmjeravanje, ali za oblicima, to je lijepo na post zahtjev ovdje. I tako onda, baš kao i ti će učiniti s HTML i PHP, možete odrediti ove tekstualne unose, a možete odrediti naziv njima, a to je ime koje će dobiti prošao u zahtjev objekt u tikvicu. I onda imamo Pošalji gumb koji kaže Post. I ovdje, post je naziv gumb, jer to je blog post, ali ovdje, post je metoda zahtjev. Dakle, oni su ista riječ ali zapravo povezani. Da Vraćajući se u Python koda, kad smo se zove stvoriti metodu, primijetiti da se ovdje možete zapravo navesti u ruti metode zahtjev da želite prihvatiti, pa ovdje sam navesti da ja samo želim prihvatiti Post metodu. Dakle, ako sam zapravo pokušati posjetiti stranicu izravno, koji se koristi zahtjev GET, to će mi reći "Metoda nije dopuštena." I tako, morate stranice, nešto poput to stvoriti stranice, koje sam samo stvarno koristi kao način za obrazac da biste poslali, možete odrediti da se ne želite da ljudi biti u mogućnosti otići tamo izravno putem GET zahtjeva, ili ako ne žele, iz nekog razloga, post zahtjev, možeš samo navesti ovamo, no u ovom primjeru, samo Želite Post Zahtjev za izlazak. Dakle, kada create_post se zove, kad posjećujemo da putem pošte zahtjev, kada ići na određeni Ruta, tu je ovaj zahtjev objekt, i morali smo uvesti Zahtjevi na samom vrhu, ali tu je ovaj zahtjev Predmet koji se prošlo u, i možete pristupiti podatke obrasca, koji automatski će se napuni kada šaljete zahtjev obliku. A onda, ono što ja mislim je stvarno cool, je da je oblik objekta da bi prošli u, samo Python rječnik koji sadrži, ako access-- pa evo, neka ja podići HTML pokraj njega, samo tako da možete imati da kao referencu, da, tako imena koje smo naveli ovdje za različita područja, tako da naslov i tekst, što onda samo koristiti one ovdje kao indeksi u podatke obrasca. Dakle, to je super povoljno. Pa onda zovemo post.create, koji će stvoriti i automatski umetnuti ovaj novi post objekt u bazu podataka. I mislim da je to stvaranje funkcija Ovdje je stvarno super primjer kako moćna Tikvica se i radi s tim, jer ako se radi nešto u PHP-u, možda ćete morati učiniti puno valjanosti, ti bi se onda uspostaviti vezu baze podataka, ti bi se onda izvršiti SQL upit, ali ovdje imamo samo ovo lijepo post.create, što možemo onda samo dobiti podatke iz od zahtjeva objekta, a zatim ga proći u novi objaviti da smo stvaranja. A onda je posljednja stvar koju želite učiniti, je preusmjeriti Korisnik natrag do kuće. I tako smo koristiti ovaj Boca preusmjeravanje funkciju. I nešto što nismo vidjeli prije, bio taj URL funkcija. Dakle URL funkcija omogućuje prođe u zapravo ime od funkcija u vašem Python koda, umjesto određenom načinu da je na. Tako sam mogao samo tako lako preusmjeriti korisnika smanjiti, koji će ga poslati natrag kući, ali pomoću URL funkcija je lijepo, jer ako promijenite mjesto gdje su stvari, pa recimo da sam promjenu dom biti na / home umjesto toga, to bi još onda vratiti / kući, jer zapravo ide i gleda naziv funkcije, i to će vam dati natrag URL za to. Dakle, vrsta na Pretpostavka da si više vjerojatno da će promijeniti gdje stvari su, osim imena funkcijama. Možete koristiti ovo stvarno Lijepo URL funkciju. I jedna stvar biti svjestan to je malo zeznuto, je da mislite da bi upravo poziv preusmjeriti na URL za, ali zapravo sve ruta ima Za povratak nekakvu teksta i HTML, tako da zapravo morati povratak na preusmjeravanje poziva. Inače, da ćete dobiti nešto nevažeći o ne povratku niz, jer svi oni moraju vratiti HTML vi zapravo želite učiniti. I tako, kad nazovite preusmjeravanje, to ti preusmjerava na stranicu, ali zapravo vraća HTML morate izvršiti tu preusmjeravanje. Vratite se na početnu stranicu. Tako smo ove dvije različite poglede. Imamo pogled kući. Ili, valjda bih trebao reći predloške. Imamo ove dvije predloške, dom predložak koji prikazuje sve naše postove, i onda imamo ovo oglasa stvar, a kad kliknete na post, to ide novom načinu u tikvicu ali koji put ne mora nužno imaju odgovarajuću predložak. Ne morate vidjeti ništa, ali još uvijek možete ima ovo djelo ide iza scene. I onda se preusmjeravaju Natrag na početnu stranicu. I svakako, to je lako raditi u nekom ljepšem CSS u predlošku i čine ovaj izgleda puno ljepše, ali svi glavni logike postoji u Pythonu. Bilo kakva pitanja o tom primjeru? Znam da ima puno različite stvari događa tamo, puno stvari nismo vidjeli prije, ali kao ništa. Da. PUBLIKA 1: Imate ništa učiniti Posebna pročišćavati podataka koji je dolaze iz obrasca? Primijetio sam da si samo rekao "stvoriti" EZRA ZIGMOND: Da, tako da je Zapravo, to je stvarno dobra stvar. Dakle, pitanje je, je li potrebno provjeriti i uvjerite se da su podaci vrijedi i ne bilo kakve ribanje kako bi bili sigurni da je valjana, jer kao što možete vidjeti ovdje, Neću to raditi. Tako ćemo vidjeti što će se dogoditi ako sam post nešto prazan. Dakle, to će zapravo samo napraviti prazno mjesto i ispuniti u datetime. Dakle, u stvarnosti, što bi vjerojatno želite učiniti nešto slično, možda navesti ako naslov jednak prazan string, onda nemojte to raditi. Ili, samo to učiniti ako je naslov nije jednako prazan string. Tako da zapravo ne automatski voditi brigu o tom ribanje za vas, tako da još uvijek trebate učiniti. Da, dobro pitanje. PUBLIKA 2: Da li to ribati za injekciju nastavaka? Znaš li? EZRA ZIGMOND: Nadam se, Peewee to radi. Mislim da će sigurno biti lijepa loše knjižnica, ako to nije učinio. Ne znam točno. Morao bih pogledati na upita da generira. Mislim da, ako sam upisali u blog post da nekako izgledala poput napada SQL injekcije, nešto kao što je ovaj, ako je to je kao polje zaporke ili nešto, što bi mogli učiniti nešto poput ovoga. Mislim da će i dalje dobili doslovno pošta, ali mislim da Peewee čini neka vrsta ribanja podataka prije nego što zapravo izvršava. PUBLIKA 1: Taj tekst polje osmišljen kako bi običan tekst, zar ne? EZRA ZIGMOND: Da, to je. Da. Dakle, mislim da su svi, tako da je ovo ispravno ponašanje, da će to učiniti, No, mislim da Peewee nadamo se napraviti neka vrsta zaštite na njihovom kraju. A ako ste htjeli dvostruka provjera da postoji načini kada generirati upit. tako da ne morate izvršiti ga izravno. Morao bih uzeti pogledajte dokumentaciju, ali zapravo možete vidjeti SQL da se generira, a pogledajte kako i bi sigurni da je pobjegao stvari. Drugi razlog zašto možda želim pogledajte SQL da Peewee je izlaza, ako je stvari čini se da ide jako sporo, možete pogledati i vidjeti što je to zapravo radi, jer je to ponekad lako slučajno dodavanje u, na način na koji to pišu, slučajno može imati odaberite cijelu bazu podataka prvi, a zatim učinite nekakvu operaciju o da, kad stvarno trebali odabrati podskup. I tako, ako se stvari nisu dosta ide pravo, to je dobro pogledati zahtjev da zapravo uzimajući generira. Da. PUBLIKA 2: Kad ste počeli, stavite u luci kao 5000. EZRA ZIGMOND: Da. PUBLIKA 2: je zadana s Peewee, ili je to nešto što se može promijeniti? EZRA ZIGMOND: Da, pa Luka je zadana s tikvica. Ako ga pokrenuti bez navodeći ništa, automatski će to učiniti. Vjerujem, ja bih provjeriti ovaj, ali možete odrediti da u app.run, Mislim da možete učiniti nešto slično, port = 8080. Dajmo da pokušate jako brzo. Da, tako da možete jednostavno odrediti port = 8080, a to će ga pokrenuti tu, što mislim da, ako biste željeli da ga pokrenuti na IDE, nisam pokušao ovo, ali mislim da ako vodio ga na port 8080, vjerojatno bih biti u mogućnosti za pristup poslužitelju, baš kao što su bili za web stranice. Da, ali to je lako za promjenu da ako imati bilo kakve poput luka prosljeđivanje stvari koje trebate učiniti. Ima li još pitanja? Da? PUBLIKA 1: Dakle, vidio sam u svom modeli koji, kao što ste spomenuli, morate odrediti baza podataka za svaki objekt. Da li se dogoditi da znaju, ne da bi ga stvarno lako, ako vas imaju puno SQLite baza podataka koje želite koristiti za jednu web aplikaciju, koje možete jednostavno odrediti hrpa različitih one u modelu? EZRA ZIGMOND: Da, neka me otvoriti da se jako brzo. Dakle, ti si rekao, ako želite imati hrpa različitih nešto, možda sviđa i studenti, za neke Razlog, nešto slično? Da, tako da mislim da još uvijek, svaki model će morati i dalje imati samo jedna baza podataka dodijeljena na njega, ali ako ste htjeli imati različiti modeli koji su različiti objekti baze podataka dodijeljena na to, svakako bi mogao učiniti. Dakle, ako sam stvorio novi, nešto kao ovo, a sada je to student koji izgleda čudno kao blogu, Mogao bih navesti da je baze podataka je jednak db_2 ovdje. Dakle, mislim da je to Glavni način možete učiniti. Cool. Ima li još pitanja? Dakle, samo se završiti malo malo, ovdje su neke resurse, a ti slajdovi će biti objavljena na internetu tako da zapravo mogu doći do tih veza. Najbolji izvori su stvarno dokumentacija za tikvica i Peewee sebe. Oni napisao jako dobro, mislim. Dakle, web stranica Tikvica je ovdje, a imaju Quickstart tutorial koji će prošetati slično stvari na ono što sam prošao kroz, ali ako želite bilo kakve revizije od stvari koje sam otišao, ili si mislio da sam objasnio nešto u zbunjujući način, oni će imati slične primjere tamo. Peewee ima dokumentaciju i imaju Quickstart tutorial da ide preko glavnih parametara koji bi željeli koristiti. Dakle, ono što sam govorio o s jedinstveni, a navode zadane postavke, različite vrste polja koja možete koristiti, one će sve biti tamo. Također, ako imate pitanja o Peewee, a možete ih objaviti na stackoverflow, momak koji je napravio Peewee zapravo ide dalje i odgovori one ponekad. Ako imate pitanje, nadam se on će biti u mogućnosti odgovoriti, jer on je napisao cijelu stvar. Mislim da je sve Htjela sam pokriti. Hvala izlazili.