[Predvaja glasba] Ezra ZIGMOND: Živjo, vsi. Hvala za obisk ven danes. Ta seminar je "Python Web Apps z bučko. " Torej, bom govoril malo o tem, zakaj boste morda želeli uporabiti Flask, da bi spletne aplikacije z Python, v nasprotju nekaterih drugih okvirih tam, kot je Django, ki je najbolj znana. Podnaslov je "in peewee ", ki je nekaj bomo govorili o tem, kako za interakcijo z bazami SQL. To omogoča zelo lepo. Torej, tukaj je samo hiter potek kaj hočem, da gredo čez. Torej, najprej samo ena drsna da se dogaja, da so nestrpne, ki je, kako dobiti vse ustanovljen na vašem računalniku. Bom se dokazovanje to na moji lokalni Mac računalniku, samo zato, ker to je, če sem to storil Prej sem najbolj udobno z njim, vendar je to vsekakor mogoče na CD50 IDE. Torej, po tem, rad bi uvesti kaj Flask je, in vas prepričali, zakaj bi ga uporabili v prvi vrsti. Potem bom dal hitro Primer, kaj si lahko storite v bučko, hiter primer o tem, kaj lahko storite v peewee, in potem sem vam bo pokazal bolj popoln primer uporaba da sem dal skupaj, da smo lahko sprehodite skozi skupaj. In potem končno, v zadnji slide, imam nekateri viri, da si pogledate na spletu, za več informacij. To ni popoln tutorial kako uporabljati bučko. In bom upam, da zapusti nekaj časa za vprašanja. Kdo gledal lokalno, samo podobno, zakričal na sredini če imate kakršnakoli vprašanja. Tako hitra montaža stvari, Če želite slediti skupaj, ali če želite, da bi dobili ta up na vašem računalniku, Bom se uporabljajo Python 2.7.10. Bučko deluje z Python 3, ampak mi je všeč uporabo Python 2, ker je nekateri Python paketov, ki ne delujejo s 3 še. Če ste pip nameščen, ki je vodja Python paket, Mislim, da če vaš Python je večja ali enaka 2.7.9, ste ga že nameščen, je super enostaven za namestitev teh paketov. Lahko pa pip namestite Bučko, pip namestite peewee, Običajno boste morali teči sudo samo tako da so dovoljenja izšlo. In, če ste z uporabo super starejšo verzijo Python, Priporočam posodabljanju Python, ali z uporabo EasyInstall namestiti pip. Torej, naslednjič, vprašanje je, kaj je bučko? In mislim, najprej smiselno vprašanje, sem se spraševal, za dolgo časa je, kaj je spletna aplikacija? Ker je to beseda, ki sem misliš, da se vrže okoli veliko da nisem zares vedel. In mislim, da je najboljša Primer, kaj je spletna aplikacija je, Res je CS50 Finance, kjer to ni res samo spletno stran, ampak to je nekaj, kar vas bi nekako interakcijo z. Obstajajo uporabniških računov in vse vrste različnih stvari. Torej, kje točno si narišite črta med tem, kaj je spletna stran, in kaj je spletna aplikacija, ki je nekako samovoljno, ampak mislim, da je ideja, to je nekaj več kot le spletno stran in to je koristno vlogo. Torej, Bučka je okvir za izdelavo spletnih aplikacij z uporabo Python. In upajmo, da do konca o tem, te bom prepričal da bi ga lahko dejansko napisati nekaj kot CS50 Finance uporabo Python, ki sem tako kot veliko bolje, kot so PHP, osebno. Torej Bučka je, pravijo microframework, s katero je pa pomeni, da je zelo preprosto, vendar razširljiv. Torej, to je samo tisto, kar potrebujete, če pa želite več funkcij, to je enostavno, da bi jih v. Ampak samo zato, ker je to microframework, ne pomeni, da je samo za male projekte. Imam povezavo tukaj, ki pravi, da Obama uporablja Flask v letu 2012 za svojo kampanjo Spletna stran, ki upajmo, je nekaj uspehov. Ampak stvar, ki sem Res mi je všeč o bučko je v tem, da ne res kakršno koli odločitev za vas. Samo zato, ker smo govorimo o spletnih aplikacij, Moram ga primerjati z Ruby na Tirnice in Django, ki sta so veliko okviri, vendar oba domnevanja o tem, kako želite interakcijo z bazami podatkov, kako želite predstaviti svoje pogledi, in oni so definitivno dobri vidiki na to. Na primer, Ruby na tirih ima to aktivno sistem evidentiranja, kar je res lepo način za interakcijo s podatki, vendar, če želite uporabljati Ruby na Tirnice, ste nekako vezani na to. Toda z bučko, kot bom vam pokažem, s peewee, lahko uporabite karkoli vrste podatkovne baze, kar želite, in lahko samo potegnite, da se v kot razširitev v bučko. Torej, to je, zakaj sem res kot bučko, to je, da je to ne pomeni, da predpostavke za vas temelji na stvari, ki jih ne potrebujete zares. Torej, zakaj bi morali uporabljati Flask? Prednosti so, da samo ima res temeljne značilnosti vzidani, ki jih potrebujete. Torej, vam ni treba skrbeti za razumevanje cel kup stvari da ne boste res potrebujejo. Nimate morali skrbeti o izklopu funkcije da ne boste res potrebujejo. In, kot sem že omenil, da je super preprosto dodate v podaljšanj stvari da si morate. Nekateri izmed njih, Bučka ima njihova podpora za to. Torej je nekaj, kar ti Flask admin, kar odraža, da admin Plošča, ki Django zagotavlja, ki vam daje lepo vidno pot za upravljanje vaše spletne strani. Ampak še enkrat, če ste kar nekaj preprostega, vam verjetno ne potrebujete veliko admin panel, tako da mislim, da je super lepo. In slabosti so, da imate manj moči iz škatle. Torej, ko ste prvič odprli stekleničko, in v svojem programu Python, ste samo tip z bučko Uvoz * ali karkoli, ne boste ravno dobil vse funkcije, boste morda želeli. In tako da boste morali bolj eksplicitno seznam značilnosti, ki jih želite. Torej, to je ena pomanjkljivost, vendar sem mislim, da je za gradnjo majhen web aplikacije, kot bom se prikazuje ste, da to ni res problem. In kaj je zadnja stvar, ki je naj bi reči, ki je typo, je, da obstajajo manj standardizirana konvencij za kako uporabljati stekleničko, samo zato, ker tam ni toliko ljudje, ki ga uporabljajo strokovno v primerjavi z Django. Torej, če pogledaš kaj podobnega, "kako naj storim x" v Django, boste verjetno našli. Tam je dobra zasnova vzorci, ki jih lahko uporabite, vendar z bučko, to je nekako gredo svojo pot, samo zato, ker je to precej majhna knjižnica. Torej tistih, ki so slabosti, ampak mislim, da da je še vedno dobra knjižnica za uporabo. Torej, kaj je samo skoči naravnost v bučko. To je definitivno ne bo za popoln vaje, ampak to je, da bi vam idejo kako strukturirati stvari, in tako se počutite udobno dogaja off in gledaš dokumentacijo in hočejo izvedeti več. Torej, mi odpirajo res Preprost primer na prvi, in ti, kaj to pokazati Izgleda, in potem bomo ga razčleniti malo več. Torej, ta tukaj, kaj mi to tekmovanje v teku. Torej, sem zdaj moja vloga teče. Grem odpreti Safari, in to je tekmovanje v teku na mojem krajevnem gostitelju. Tako da sem šele tekoč, da bo ta večji. Ampak localhost: 5000 In tako je zdaj, vse to pa je, ko obiščete spletno stran, se natisne "Hello Flask" ki ni zelo koristno, ampak mislim, da je kul, da v tej mali datoteki tukaj, imamo spletni strežnik teče da je tiskanje nekaj. Torej, kaj je dejansko videti na kodo za sekundo, in jo razčleniti malo. Je velikost dobra za vsakogar tukaj? Torej, upam, da ste nekoliko udobno uporabo Python. Jaz sem ob predpostavki, da bomo lahko ogledate na Python in branje skozi njo. Če imate kakršna koli vprašanja o karkoli, lahko grem tudi čez to. Torej, v prvi vrstici je od Bučka, uvažamo, Flask s kapitalom "F" ki je nekako vse ključne funkcije, ki jih potrebujete. Kadarkoli pišete datoteko in uporabo Bučka, boste želeli uvoziti, da samo zato, ker da ima vse glavne stvari. Naslednja stvar, ki jo storite, je, da smo pokličite to funkcijo Flask, samo ustvariti aplikacijo predmeta, in ste vedno tekoč, da želijo, da to storim. In potem, skoki navzdol na Dno hitro, ta del tukaj je, "if_name _ ==" _ main_ '", ki je nekako konvencije Python. Torej bo to izvršiti le, če vas zagnati to datoteko neposredno uporablja Python. Potem, pravimo app.run, ki bo dejansko začeti app dogaja. Torej, to je glavna zgradba, ki boste imeli pri kakršnikoli uporabi bučko, se boste morali to app = Flask (_name_), nato app.run. Torej, dve stvari, ki jih imam tukaj, so tisto, čemur pravimo poti. Torej, kaj je govoril o usmerjanje malo več. Jaz bom šel nazaj na slide. Torej je najbolj temeljno koncept v Bučko usmerjanju. In to je ideja, da vas dodelite funkcije v Python na določene naslove na vaši spletni strani. Torej, kadar hočeš ustvariti novo pot, uporabite to @ app.route Funkcija pleskar. Torej, če ste seznanjeni z Funkcija dekoraterji v Python, je ta koncept, ki upamo ste vzeli funkcijo in jo obdajajo z nečim drugim. Torej res, kaj ta pleskar počne, je, da ima funkcijo pod njo, in dodaja več informacij z njim, ampak kaj Bučka dejansko ne bi se to zgodilo, ni super ključnega pomena, ampak tisto, kar je pomembno, je, da preden poti, ki jih dal to @ app.route, in nato naslov poti, tako da poševnica je tisto, kar smo videli, ko smo pravkar odprli spletno stran. Tako da je domača stran. To je samo poševnica pot. In potem moraš to funkcijo. Ime funkcije lahko karkoli hočeš. To ne bi nujno storiti s poti. In potem, kar Funkcija donos, Funkcija mora vrniti niz. In da je niz lahko vsebujejo HTML ali karkoli, in da je v resnici, kaj boste dobili vrnil v vašem spletnem brskalniku kot HTML, in bo postal to. Torej je to ista koda da je iz primera da sem tekel, tako da, ko smo obiskali slash, poziva funkcijo Hello World, ki samo vrne niz, Hello Bučka, in da dobi natisnjeno na zaslonu. Torej je še en primer, ki je, ko obiščete / zdravo, se natisne Hello Word, ki bi morali pravzaprav reči, Hello World, ampak kaj je pretvarjal, da je bilo namerno. Torej, kaj je pull up resnično hitro. Torej, če greš na localhost / zdravo, bo zdaj natisniti nekaj drugega. Torej, to je samo na hitro primer, kako lahko ustvarite dve različni poti. Torej, kolikor to ni zelo koristno, ne obstaja cel kup lahko storite, si lahko samo storiti vse, da se z imajo različne strani HTML, in ko obiščete določeno Stran je samo naloži stran. Torej, poglejmo nekaj več uporabne stvari, ki jih lahko storite. Torej, ena stvar, ki jo boste morda morali opazili v primeru, da sem potegnil up je, da sem app.run (debug = True). In tako, kaj je to debug argument pa je da ko zagnati spletni strežnik, ko ste v svoji vlogi, Če spremenite datoteko, bo to samodejno osvežite strežnik. In tako ne boste imeli, da dejansko restart Python, ki je super uporabna. Jaz lahko dokažejo, da. Naj dvigni svojo kodo z slovnične napake v njem, in se pretvarjati, da je tipkarska napaka je dal namensko poučnimi namene. Torej, kaj je dodati to hrbet. Torej, zdaj pa pravi, Hello World. Jaz ga bo rešil. In če bomo potegnite nazaj gor terminal, boste pravijo, da je ponovni zagon, ker je zaznal spremembo, in zdaj, ko smo ponovno naložite to stran, se bo izpisal pravilno stvar. Torej debug je super uporaben za to. Tudi, če imate vrsta nesreče, tako da dovolite mi, da ta aplikacija crash ki jih imajo, da se ne vrne niz. Torej, kaj je samo da imajo vrne None iz nekega razloga. In potem, ko sem obiskal to stran, bo to samo crash, vendar pa je strežnik samo ne crash, ga dejansko vam daje super uporabne nazaj sled vse, kar je šlo narobe. In kaj je res lepo, je, da na vsakem koraku v tem izsledil, lahko bi odprli interaktivno shell tukaj, in nekako izpisal kaj spremenljivke želite si oglejte. In tako debugging je res koristno za kipec kaj se dogaja z vašim strežnik, ne le ogleda nekaj v PHP kot 500 notranji napaka strežnika, ki je super neuporabna. Ena stvar, da se zavedajo, je da če si dal svojo aplikacijo na spletu tako da je vidno javnosti, si nikoli želeli zapustiti debug način naprej, ker ljudje lahko dejansko uporabiti to konzolo, ki sem je pokazala, da izvede poljubno kodo. Tako da lahko natisnete kot vsaka tajne kode imate tam, jih lahko ogledate na točno kako je vaša spletna stran deluje. Torej, to je res uporabno za testiranje, vendar vedno poskrbite, da ga vzamete ven, preden vi objaviti kaj na spletu. Torej, ko boste uporabljali nekaj kot so PHP, da je ta ideja da lahko prenese informacij med spletnimi stranmi s tem da informacije dejansko v URL-ju, ki je zahtevek za GET, ampak v bučko, lahko dejansko nekaj narediti nekaj podobnega, da je, ga ob poti, ki ima spremenljiv kot del nje. Torej, če pogledaš na to Primer na zaslonu tod imamo pot, ki je ('/ pozdravi / "), in tako, če boste obiskali / pozdravi / nekaj, da nekaj se dogaja, da dejansko dobili polnjene v ime spremenljivke. In opazil, da je funkcija ki prihaja s to progo mora vzeti v parameter ime, tako da bo dejansko se prenese v funkciji. In potem, ko ste znotraj te funkcije, si lahko privoščite, da je tako kot normalna Python spremenljivka, in tako potem, bo to izpisal Pozdravljeni, in bo zapolnila v imenu uporabo nekateri niz oblikovanje. Torej dodati variabilnih delov za usmerjanje, uporabite kotni nosilec CE. In po želji, lahko uporabite kar se imenuje pretvornik. In tako, če si dal to zaznamba z debelega črevesa, lahko določite, da je int ali plovec ali poti, in bo samodejno pretvoriti to. To lahko storite tudi pretvorbo znotraj funkcije Python, Samo z uporabo odlitek, včasih pa če hočeš, da se zagotovi, da je int, lahko dal, da Pravilo pretvorba tam. Torej, kaj je dvigni zgled nekaterih spremenljivih pravil. Torej tukaj, to je enako osnovno struktura z od bučko uvoza Bučko, app = bučko (_name_), in potem je tekmovanje v teku na koncu. Imamo ti dve različni spremenljive poti tukaj. In prvo, je tisti, ki mi je pokazala, v drsniku, ki je bil, da to šele zalotiti v imenu niz in se bo izpisal Pozdravljeni, Ime. In nato, drugi ena uporablja konverzijo. Torej, to bo samodejno pretvorbo za notr, in nato dvakrat int, in tiskanje, ki ven. In, ne delamo nikakršne pretvorbe v njem ker Flask poskrbi za to. Torej, kaj je dobil ta teče. Ko imate Flask aplikacija teče, Lahko nadzor-C iz nje zaustaviti strežnik teče. In potem bom teči spremenljivke. Torej, pojdimo na localhost / hello / Ezra in upajmo, da bo to pozdravi mene. Torej, to je v mojem imenu, v spremenljivki pot, in jo napolni tukaj. Torej bom kažejo tudi hiter Primer podvojitve. Torej, če greš na / dvojni / 3, se bo izpisal 6. Torej, to je poskrbel pretvorba za nas. Torej, lahko to storite tudi z float, in nekaj posebnega, Če morate navesti nekaj podobnega pot, ki vam omogoča, da sprejmete poševnice, vendar to ne bi bilo običajno vprašanje. Doslej smo, še vedno ravnokar se vračajo strune, kar ni zelo zanimivo. Mi lahko dejansko vrnili literal HTML niz. Torej v kodo lahko vstavite nekaj tako kot b-tag, da bi bilo krepko, vendar je večina časa boste pa dejansko ne želijo da je pisanje HTML kodo V vašem Python kodo. To postane res grdo, in to ni dober čas. Bučko nam omogoča izločiti HTML v kaj se imenuje Predloga, in tako če razmišljate glede na modelu MVC da ste seznanjeni z, upajmo, od dela z CS50 finance malo, lahko si misliš o Python datotek kot več nadzornika, kjer so v stiku z karkoli podatkovni model, boste morda morali. In potem so se kliče ven Ogledov in posredovanje informacij tem View da izpolnite podatke v HTML, ki jo potrebuje. In tisto, kar imenujemo tiste Ogledov so Predloge v razredu. Torej Bučka uporablja drug Python modul, ki se bo samodejno namestiti pri Pip namestitvi Bučko imenuje Jinja, ki upamo, da dodate te pripombe v HTML ki jih vidite na zaslonu, ki omogoča si dal v stvari, kot so pogojnih, in zank v HTML. Tako da izgleda malo všeč, kako vas lahko uporabite PHP v datoteko HTML, vendar je to samo, ko se bučka strežnik služi up datoteko HTML, pa bo trajal ta templating motor in razčleniti skozi to in izpolnite stvari. Torej Bučka ima funkcijo render_template da si lahko ogledate na dnu tukaj. In tako, ko obiščete to stran, jo bi postala ta hello.html predlogo, in nato izpolnite tej strani HTML. Torej, kaj je samo teči to pravi hitro, in videti, kako izgleda, in potem bom šel skozi malo podrobneje. Torej, vaše predloge se dogaja da gredo v mapo Predloge. To bo samodejno iskati znotraj Mapo Predloge za to predlogo. Torej, kaj je odpreti to gor. Torej, bom prost primer templating. Torej, če grem na / hello / Ezra, ima to grozno, gnusen šotoru tag, da sem dal v. Zelo lepo, zelo dinamično. Sem velik oboževalec. Toda kaj se zgodi, če Pravkar sem šel, / zdravo? Torej je pravi samo Hello World. Nisem ga ne smete dajati imena, in jo izpolni samodejno. Torej, da vidimo, kako je to naredil, in kako moremo znebiti tega šotoru morda. Torej tukaj, to je vrsta zanimiv primer, če ste seznanjeni s tem, kako stikalo Izjave delo v jeziku. Pravijo, da je to nekaj podobnega, da nekako padca skozi, kjer ste dejansko pritrjena dva Različne poti do istega funkcijo. Tako smo priložite / Hello pot in V / pozdravi / ime pot do Pozdravljeni, in smo določite using-- vas Python omogoča določite privzeto funkcijo arguments-- tako da, če ni ime, tako če gremo samo / zdravo, se bo samodejno filtrira imena je enaka ni. Torej, smo naredilo Predloga z name = ime, tako da bo prehod na ime parametra enaka tej funkcionalni ime parametra, v predlogo. To še vedno ne pojasni, kako je odločanju, ali naj se natisne Hello World, ali tiskati moje ime. Torej, kaj je dejansko videti v predlogo sam, in videli, če to od kod prihaja. Torej, v tem predlogo smo dejansko imajo nekaj pogojno logiko, kar bi nekateri ljudje trdijo, ste dejansko ne bi smeli imeti veliko pogojno Logika v vašem sama predlogo. Moralo bi biti bolj znotraj Krmilnik, ampak za ta primer to je nekaj precej majhen. Torej, tukaj smo preveriti, če je ime, tako če ime ni enak None, če ime je dejansko sprejet leta, potem bomo Pozdravi, osebe z Glava in šotoru, vse to normalno HTML, sicer bomo izpisal Pozdravljeni, Svet samo normalno. Torej, nekaj stvari tukaj obvestilo o tem, kako formatirati templating, je, da vse te pogojni stavki, nekako všeč, kako smo ga, kadar PHP želite vstaviti nekaj PHP, boste uporabili manj kot vprašanje znamka, ki je nekako analogno tukaj s {%. Torej, tukaj imamo pogojno kodo. In potem, ko si dejansko želijo dobesedno ovrednotiti nekaj, in print ven na zaslonu, uporabljati dvojne naramnice. Torej, tukaj so dvojne naramnice, in potem bomo navesti ime, tako znotraj, da bo ocenila na ime spremenljivke, ki je bil sprejet leta od onemogočijo funkcijo predloge, ne samo tiskanje ven, če smo se znebili teh, da bi samo izpisal besedo "ime". Torej, to je nekaj, da pazi na. Torej, še ena stvar, da obvestilo, da je, ko smo želite uporabiti render_template funkcija, imamo dejansko uvoziti izrecno iz bučke. In to je primer Modularnost bučko, da vam ne bi bilo treba uvoziti stvari, ki jih ne potrebujete. Lahko samo prinese v funkcije, ki jih dejansko to potrebujejo, kar je včasih lepo, tako da vam ne imeti vse te funkcije poseda, ki jih ne uporabljate, ampak tudi, če ste pozabili, da vas morali uvoziti render_template, boste verjetno dobili opozorilo da se bo kaj veš o tem. Tako, da je templating. Torej, smo pokazali, kako naj enostavne spletne strani, in dodamo malo več logiko je, glede na variabilne usmerjanje. To vam omogoča različne stvari, ki temelji na kaj URL greš, in tudi potem, daj HTML malo več smisla Pogoji, kako želite, da postanejo stvari. Nimate dati vse Vaše HTML v vašem Python, ampak za precej vsaka spletna aplikacija, boste želeli neke vrste model podatkov, povezanih z njo. In tako tradicionalno, bi to nekaj podobnega podatkovne zbirke SQL. In lahko samo interakcijo neposredno z SQL. Python ima, mislim, da se imenuje. SQLite 3. Lahko samo uvoz SQLite 3 in izvrši SQL poizvedb neposredno, ampak ne vem o tebi, ampak res ne maram, samo, pisanje ven SQL poizvedb. To kaže, da bi dobili resnično dolga in zapletena. In tako, nekaj, Rad uporabljam je tisto, kar je znan kot ORM, ki je objektno-relacijska preslikava. In točka objektno-relacijska preslikava, je, da obstajata dve različni načinov, kako lahko misliš o zbirkah podatkov. Tako je na primer, da Profesor Malan običajno uporablja v razredu, je Excel tabela, kjer imate te vrstice in te stolpce, in da je res koristno za kako je zastopana v SQL in kako ste interakcijo z njim, vendar še en način, da je dejansko koristno razmišljati o tem včasih, je v smislu razredov in predmetov. Torej, namesto razmišljanja vsake tabele, da ima Ta vrstica, ki ima nekatere informacije, lahko dejansko si o njej mislijo kot vsaka miza je razred, in nato vsak primerek Razred ima nekatere lastnosti. Torej, v tem primeru, so primeri razred so vrstice v tabeli, in potem bi vsaka lastnina je kolona v tabeli. Torej, ORM, ki mi je všeč uporabljati se imenuje peewee. To je res majhen, nekako tako kot bučko. Mislim, da gredo dobro skupaj, vendar pa obstaja veliko drugih ORMs ki jih lahko uporabite. Bolj priljubljen je znan kot SQLAlchemy, in ne morem se spomniti, zakaj sem sprva izbral peewee nad SQLAlchemy, ali sem ti, zakaj bi povedal Mislim, da je najboljša, vendar smo le, da bo to uporabijo ena, ker vem, kako jo uporabljati. Torej, eno vprašanje je, zakaj morate trudim uporabo ORM, namesto samo neposredno pisanje SQL poizvedb? In mislim, da je najboljši primer, je, da ne boste dejansko morali pisati SQL poizvedb. To je veliko lažje, kot vam bom pokazal, da stvari kot izbor, vstavljanje, izbris, še posebej ustvarjanje tabel. To je veliko lažje napisati razredne strukture, kot je za strukturo Ustvari Izjava miza, ampak ena stvar da se zavedajo, je, da ORM bo potrudila da ugotovimo, kaj je najbolj učinkovite poizvedbe SQL bi bilo, včasih pa postane to narobe. In še posebej, če ste delajo z veliko zbirko podatkov, lahko opazili, da poizvedbe da je treba hitro teče, dejansko traja dlje. In če pogledaš pod pokrovom, kako ORM je tolmačenje, da je v SQL, to lahko počne nekaj Res smešno, samo zato, ker je nekako pomignil vaše namere narobe. In so tam bili časi, kjer Imel sem ga prepisati, in samo izvršiti moje SQL poizvedb, samo ker je bila pri razčlenjevanju na čuden način. Torej obstaja nekaj režijske stroške, samo v načinu da pripravlja vaš Izjave dol v SQL. Torej, kaj je pogled super hitro na preprost primer podatkovnega modela da lahko uporabite. Torej je to Python kodo, in tako Prva stvar, ki jo želite storiti, je iz peewee uvoz *. Torej, za razliko od bučko, kjer imate vsi ti posamezni moduli, in želite uvoziti bučko in napisati predlogo in nekatere druge da bomo videli kasneje, od peewee, lahko samo uvoziti vse, ker je to precej majhna knjižnica. Torej, prva stvar, ki jo želite storiti, je, dejansko oblikovanje te baze podatkov predmeta. Torej, imate db = SqliteDatabase, in nato ime vaše baze podatkov. In to bo dejansko ustvariti predmeta zbirke podatkov ki jih lahko interakcijo z, z peewee. In potem imamo dejansko model, ki ga želite ustvariti. Torej tabela želimo ustvariti. Torej, v peewee vsak razred ima, sama miza v vaši zbirki podatkov. Torej, vse razrede podedovali od osnovnega modela, in model kapital M nekaj, kar je opredeljeno v peewee. Torej, če bi vse svoje modele podedujejo kot najvišji nadrazreda, morajo podedovali od Model, ampak tisto, kar je res kul, je, da lahko dejansko imajo svoj tip podedovali drug od drugega. In veliko časa, vaš podatkovne modele, ne nujno da hierarhijo lepo dediščino, vendar časi, ko se to zgodi, to je res lepo, ker imate model neločljivo povezana med seboj. Torej, smo definirali ta razred "študent, ki je podedoval model, in ima tri lastnosti. Ima ID, ki je PrimaryKeyField, ki je nekaj, kar je predvideno s peewee, ime je CharField, in razred je IntegerField. Torej to lahko ali pa tudi ne kako CS50 dejansko shranjuje vse stopnje dijakov. To je ne, ampak to je, kako bi jaz to naredil. In potem se je, v ta razred, in to je nekaj, kar lahko storite z Python, imate lahko ugnezdene razrede. In to je nekaj, ki je s peewee potrebno. Torej, ta razred Meta, imate določiti, da je baza podatkov enaka predmeta da smo ustvarili zgoraj. In to pove, kaj datoteka je ta tabela dejansko dogaja, da se jih vsebuje. Torej, to je nekaj, kar imaš storiti v vse svoje modele. Moraš določiti v tem Meta razred da podatkovna baza je enaka db. Torej, kaj sem ponavadi, če imam kup različnih modelov, je, da imam eno bazo Model, ki sem ponavadi samo klic "osnovni model" da ima Meta razred, in določa zbirko podatkov, ki je enak db. In potem vse moje kasnejše modele bodo podedovali od tega osnovnega razreda. In potem mi ni treba skrbeti o nastavitvi Meta razred. Torej, ko se to dejansko dobi zbrati navzdol v stavku SQL, izgleda, da to grdo stvar dol tukaj, "Ustvari tabelo študent ID celo, " karkoli. In mislim, da je krajši, to SQL poizvedb tukaj, ampak če pogledaš na to vrsto tukaj lahko vidite, kaj se dogaja. Vidite lahko, katere vrste polj obstajajo, kaj oni se imenujejo, in zato mislim, da gledaš te Python kodo je veliko bolj berljiva kot poskuša napisati ta SQL poizvedbo. Tako, da se dejansko uporabo baze podatkov, moramo povezati z njim v Python. Torej, sem ponavadi napisati funkcijo imenovano initialize_db da počne dve stvari. To traja v podatkovni bazi Objekt db in je poveže z njim, ki pravkar odpira up odseku do baze podatkov. Če ste šele tekmovanje v teku, čeprav Spletna stran na vašem lokalnem računalniku, to ni super big deal skrbi o povezovanju in izklapljanja, ampak če tečeš je na spletni strani, ki jih želite zagotoviti, da vsakič, ko uporabnik poveže z njim, ko se zaključi spletne strani, ki jih ločite tako, da boste nimajo kup ljudi, povezanih na vašo bazo podatkov naenkrat. In potem, ko vas povezavo z bazo podatkov, želite poklicati db.create_tables, in seznam modele za tisto, kar želite za ustvarjanje tabel. Torej, tukaj, jaz samo želim, da jo ustvarite za ta študent. In potem, kar je pomembno, je, da določite varno = true največ časa. Torej, kaj je ta izjava bo naredil, je, da je to ustvari tabele za študent vzorec, vendar le če ima ta tabela ne bila ustvarjena že. To je tisto, kar določa, varne. Tako da ne bo prepisalo vaša obstoječa tabela, bo ustvaril le nova miza, če ni eden tam. Torej, lahko samo ustvariti mize nekoč uporabo SQL. In potem imajo te baze podatkov sedenje tam, in se poveže z vsakokrat, ampak to je običajno lepo, samo da bi dal v tem create_tables razpisu, tako da, če ste kdaj izbrisati vaš Baza podatkov, ko zaženete vašo spletno app enkrat, bo to ponovno. Torej, samo poskrbite, da je varno je določeno, da bi bilo res, ali boste našli vaše podatke samo pridobivanje clobbered vsakič. In potem si lahko samo pokliči initialize_db vzpostaviti povezava in ustvarjanje Tabele če je potrebno. Torej, je najbolj običajna stvar da boste želeli storiti, ali je eden izmed najpogostejših stvari, je dejansko vstaviti stvari v svojo bazo podatkov. In tako, namesto da napisati vstavite v izjavo z vsemi Vrednosti določeno, lahko dejansko pokličete funkcija na razred učencev. Torej, ko ustvarite razred da podeduje od modela, ima to ustvarilo metodo. Torej, vam razred name.create, in določite parametre ki ga želite prenesti v. Torej, če želim dodati nekaj študentov na naše CS50 redovalnice primer, Bom dal v Davidov, ki ima zelo dober razred, ima 95. In jaz, kdo je ne delaš tako tudi v CS50, imam 50. In tako se je lepo stvar o kaj to ustvarilo funkcija počne, je, da se vrne na primer, ali vrstica, ki je ustvarjena v tabeli, in tako potem shranite, da je v spremenljivka, in delo z njo kasneje. Lahko spremenite okoli, ki Bom pokazal primer. Obvestilo, da nisem morajo navesti ID, ker saj je PrimaryKeyField, se bo samodejno je prirastek, če ga ne določi. In v resnici, boste verjetno naj bi ga ne določite, ker si morda po nesreči clobber ID nekoga drugega. In želite prepričan, da je edinstven. Torej, pravzaprav, najbolj skupna stvar, ki jo želite storiti, je verjetno izberite iz podatkovne baze, ko boste imajo veliko informacij tam. In tako, če želite, da bi dobili vse, tako da je ekvivalent izberite zvezda iz izjave študentov, ga bi bilo le student.select. In to vam bo dala nazaj niz z vsemi študenta predmetov v njem da ste Ponovil nad hočeš. Lahko dobim stvari od njega. In večino časa, vam ne samo želijo narediti izberite, si dejansko želite določiti nekaj. In tako, se lahko veriga vas skupaj ti klici funkcij, všeč, kako bi jih veriga skupaj izjave v SQL. Torej lahko storite student.select ()., Kjer v tem primeru. In potem, lahko opredeli pogoje, samo z uporabo normalne Python Booleans preveriti stvari. Torej, v tem primeru, ki ga želite omejiti kaj izberete, da, kjer je student.grade enaka 50, in student.name je enaka Ezra, tako da bo samo spravite me od njega. In opazili, eno res subtilna stvar tukaj je da, če želite določiti in / ali in / ali ali, v Python, bi normalno uporabo, Mislim, da je beseda "in" dejansko, ampak tukaj ste uporabili enotno 'znak, ki je običajno operater bitni, vendar v tem posebnem primeru, samo način peewee to počne, uporabo enotnega ampersand določiti "in". To je nekaj, kar Dobim pomešal veliko, vendar pa ne pride do toliko v praksi. In potem, ko imate vse študenti iz baze podatkov, Ko ste storili, da ste select in vaša oblačila ali karkoli, lahko uporabite foreach zanke, tako kot običajno v Python, s kakim iterator ali s kakim array. Torej lahko storite, za S v student.select (). whe re (Student.grade <75), in tako da bo to Ponovil preko vsakega študenta v tabeli čigar ocena je manj kot 75, ki je v tem primeru je še vedno samo mi. In potem bi lahko naredil kaj v da je zanka, kot pošljite mi e-pošto in me dejansko povedati obrniti v moj problem Scena. Torej, še ena stvar, ki jo lahko storiti, je, da je zelo enostavno posodobiti vrstice znotraj tabele. Torej, se spomnite nazaj, si, ko sem vstavil, Vzel sem na vrednost, ki je bila s student.create vrnil, in sem ga dodeljena imena imenovanih Ezra. In zdaj, lahko spremenite Vrednosti v tem primeru, tako kot bi vam normalni razred v Python. Tako da lahko nastavite ezra.grade = 95 in da bo posodobiti lokalno kopijo, ampak če si dejansko želijo zavežejo, da spremembe v podatkovno bazo, boste morali poklicati ezra.save, tako da se imenuje .save metoda na primer. In zdaj, sem uspešno spremenil moja ocena v okviru podatkovne zbirke. Torej, potem recimo, da sem se ujamejo spreminjajo svoj razred v bazi podatkov. Profesor Malan je verjetno, da bo da me želiš izbrisati iz razreda, in tako lahko pokličete .delete Metoda instance samo na to stvar. Torej, če si hotel iti nazaj v to zanko tod in dejansko, namesto za pošiljanje e-pošte vse od študentov, katerih razred manj od 75, boste želeli, da jih izbrisati, v to zanko si lahko pokličite s.delete primerek. In zelo zadnja stvar, ki jo želite storiti, je vsakič, ko boste vzpostavili povezavo, in ste končali s svojim delom, želite poklicati db.close, kjer je db, da podatkovna baza ugovarja, da smo imeli prej. In želite, da se prepričajte, da Vse postane zaprta od. Cool. Torej, zdaj, imam primer aplikacijo. Sem nekako pre-made vse samo tako, da ne bo prišlo v živo kodiranje napake, vendar pa se lahko sprehodimo skozi ga in videli, kako bi si dal Flask in peewee skupaj in bi preprosto aplikacijo. Kličem ga CS50 rant, in to je neke vrste preprost blog platformo. Torej, najprej bom prost in pokazati, kako izgleda, in potem bomo lahko ogledate več v kodo. Ok, tako da je šele teči to. Cool, bom naredil to malo manjši. To ni zelo lepa, samo zato, ker Nisem naredila veliko CSS, ampak kaj počne, je, da ima Ta baza blog delovnih mest, in gre skozi vse njih, in jih bo prikazal na strani v vrstnem redu zadnja. In tako to so le nekateri objav da sem imel shranjene v bazi podatkov. Torej, če želimo ustvariti novo pošta, lahko gremo na Dodaj novo delovno mesto, in bomo lahko vnesete naslov mesto, tako da nekaj podobnega, CS50 seminar. Wow, res uživa seminarja. Cool. Potem ko pritisnete post, in da bo vas preusmeri nazaj na domačo stran, in potem boste videli, da je bil dodan zadnji komentar. In še vedno imamo vse tiste tam. Torej sedaj, kaj je korak skozi vse kodo in videli, kako se to izvaja. Torej, mislim, da je prva stvar, ki Oglejmo si oglejte, je pravzaprav modeli. Veliko časa, ko ste načrtovanju nekaj, želite razmišljati najprej o tem, kako boš, da zastopa svoje podatke, in nato design stvari okoli, da tako da vse, kar ima smisel. In da je pravzaprav, kako sem je to storil, ko sem bil kar ta, Sedel sem in mislil, kaj hočem v post. Torej, tukaj imamo enako strukturo da sem omenil že prej, kjer delamo db = Sqldatabase ("posts.db"). V resnici si verjetno ne želite, na trdi kodo v zbirkah podatkov vašega imena. To bi verjetno morali biti parameter ki je shranjena nekje, morda v nastavitveni datoteki, ampak v mali primer, kot je ta, to je v redu, da trdo kodo, ki v. Torej, zdaj imamo ta post razred, ki podeduje od osnovnega modela. In to je, enkrat, ID = PrimaryKeyField. Pravzaprav, če ne določite, če sem dejansko znebili tega, potem peewee bomo poskrbeli za avtomatično ustvarja ta ID polje, in se bo samodejno da to PrimaryKey, ki Mislim, da je res lepo, saj je običajno, To je nekaj, kar si želite imeti, ampak mi je všeč, da ga v posebej, Samo tako se spomnim, da je tam. Toda, če ne določite, da, da bo tam samodejno. Torej, imam datum, ki je DateTimeField, in vse ti različni polja, če vas poglej peewee dokumentacije, to vam bom dal seznam različnih vrste področij, ki jih lahko uporabite. Za večino del, je analogen kaj bi vi videli v SQL. Torej obstaja CharField, A VarCharFields, TextFields, ki so zelo dolgo besedila, kot blog post potencialno DateTimeFields, DoubleFields, FloatFields, vse stvari, kot je ta. In lahko prenese tudi v drugih argumentov z njim, ki je nisem določite tukaj. Recimo, na primer, ni želel omogočajo dve mesti, da imajo enak naziv, si lahko določite nekaj podobnega edinstven = True, in to je samo dodaten parameter za polje, da ko jo pripravlja navzdol v SQL, navede da mora biti edinstvena. Določite lahko tudi nekaj podobnega ni nič in vse druge stvari, si normalno delati v SQL. Torej, to je zelo preprosta model, ki ima datum. Obvestilo, tukaj, v DateTimeField, I določeno, kaj je privzeta je. Sem določeno, da bo datetime.datetime.now, zaradi načina, da to gets ocenili, dejansko ocenjuje datetime.now ko da dobi vstavi v bazo podatkov. Mislim, da sem imel dvakrat preveriti to, ampak če si naredil kaj takega, potem bi dejansko ocenila, da je nekoč, in nato DateTime bi vedno enak. Torej, samo če delaš nekaj z datetimes, dvojno preveri da je ocenjevanje, ko postane dejansko vstavljena, ali pa vas bo morda zmeden. Naslov je samo CharField, ki tam več argumenti lahko prestanejo pri določanju, kako dolgo si želimo, da je, ampak tukaj, ni važno. In Besedilo, ki se bo besedilo celotno mesto, in da se dogaja, da je TextField samo zato, ker si želiš dovoliti, da je precej dolg niz. Potem imamo to Meta podrazred, da samo določa, da želimo zbirko podatkov če je to dejansko odprla v biti PP predmet, ki ga imamo tukaj. In zadnja stvar, ki jo imajo tukaj, je le ta funkcija da bomo uporabite iz našega glavnega app inicializirati zbirke podatkov za povezavo z je, nato pa ustvariti Post tabelo. Zdaj pa si oglejmo sam glavni app. Torej, tale je precej malo dlje od tistih, da smo videli prej, vendar upam, da ne preveč slabo. Torej, kaj mi to razširi ven. V redu. Torej, opazili in vrh sem uvožene cel kup drugih stvari od Bučka, da imamo ne res videl. In upam, da bomo lahko šli skozi vsak od njih enega po enega in govori malo več o tem jim, razvrščenih po npr. Torej, imamo bučke in render_template, ki smo videli prej, ta zahteva objekt, ki bo prišel, ko gledamo, kako obliko, da sem pokazal dejansko deluje. Preusmeriti, ki vam omogoča, da preusmerijo nazaj od Create New Post nazaj na prvotno strani in nato URL, ki je nekaj, kar vam omogoča ugotoviti, kje na Spletno mesto posebno stran. Torej, naslednji stvar, ki mi je uvoz I vse informacije od modelov Datoteke, ki smo samo gledaš. In, ja. Torej, nekaj drugega, novega, ki prihaja gor, ko imate opravka s, predvsem podatkovne baze, je, da lahko določite funkcija, ki dobi imenovani pred vsaka prošnja, in funkcija, ki dobi imenuje po vsaki zahtevi, ki uporabljajo to Zahteva po funkciji Tapetniško app.before. In tako bo ta dobil usmrčen povsod, kjer je ta funkcija. To pa ni treba imenovani pred zahtevo, vendar običajno, da je nekaj smiselno, da ga pokličete. Določite lahko ne glede na funkcijo želite, da se tam imenuje, tako da sem določeno to initialize_db funkcija, da smo imeli že v Models datoteke, tako da pred vsako zahtevo, ki jih želite povezati z bazo podatkov. Obstajata dva različna načinov, kako lahko to storite. To lahko storiteapp., I Verjamem, da je after_request. In razlika med after_request in teardown_request, je, da bo after_request zgodilo le če zahteva dejansko bil veljaven. In tako, samo če Zahteva je bila uspešna, če ni nič narobe, vendar teardown_request se zgodi v primeru uspešne zahtevek, ali v primeru napake. Torej, običajno, hočeš uporabiti teardown_request, če hočeš narediti nekaj, posebej različna v primeru napake. Ampak samo za zapiranje podatkovne baze, ali uspe ali če ne, delamo želite odklopiti iz baze podatkov. Tako se imenuje, db.close o db objekta. Opazimo, da teardown_request je v izjemo. Torej, lahko preverite, če je bilo dejansko napaka, ko so ga zaprli, ampak tukaj, upam, da obstaja niso cel kup napak, tako da smo nekako spregledali dejstvo, da. Ok, in ostalo od njega ni preveč slabo. Torej, ko gremo na spletno stran, smo postali to home.html predlogo da se bodo odprle. Preval je na delovnem mestu enaka, in kaj je to pa je, ne pozabite, imamo to objavo Model, zato smo izbrali vse prispevke, in potem še ena stvar, ki jo lahko naredite, lahko določite klavzulo, kjer lahko določite naročite jo, in tako smo se vseh delovnih mest, ki dobili izbran, in nato smo jih naročite z post.date.descending. In da se opredeli, kdaj dejansko prišel ven, najnovejša ena bo zelo prvi. In potem se peljemo, da je v predlogo home.html, tako da je dejansko odprla da Predloga res hitro, in si oglejte, kako to deluje. In to ne le HTML, vendar upam, da se lahko osredotočimo na Python. Torej obstaja povezava s dodati nove Post, in tako to določa pot v bučko, ki smo opredeliti, kar je tukaj. To je nova objava pot, in smo določite, da tu gor. In da je povezava, ki bo nato šel na tej progi v bučko strežniku. Bolj zanimiva stvar je to za zanko tukaj. Tako smo določiti, da se ta po parameter, ki je prešla v render_template funkcija, za vsako delovno mesto v post-ih predmet, ki dobi opravil v. Želimo, da natisnete naslov mesto, v H1, in nato v nadaljevanju, želimo natisniti post besedilo v odstavku. In tukaj, lahko smo dejansko pokličete funkcijo Python, zato lahko rečemo strftime, ST-RF-time, in lahko preide v format string da želite natisniti podatke iz. Torej, to je, je zelo lepo, da si lahko dejansko imenujemo to funkcijo Python od znotraj tukaj. Nimate storiti oblikovanje na stran krmilnik, saj res, formatiranje datum je nekaj, kar si želijo poslovati v View. In vse te odstotkov spravil ni zelo pomembna. Če pogledaš gor dokumentacijo za funkcijo strftime v Python, opredeljuje vse te stvari, ampak da je kako, ko smo iskali na domači strani tukaj da oblikuje to z lepo datum, in opredeljuje AM ali PM, ampak normalno, če bomo ni bilo to tukaj, boste verjetno dobili nekaj smeti datum, ki ni videti zelo dobro. In potem smo se opredelijo post.text, in sem lahko so dal par prelomi vrstic tukaj, samo postaviti nekaj presledke med vsako delovno mesto. Torej, mislim, da je najbolj pomembno, stvar v tem primeru je, da lahko uporabite to zanko. In to je analogen stvari, ki jih lahko storite v PHP. Lahko Ponovil skozi, Vse dobi sprejet, in tako, namesto da bi morali narediti copy / paste, copy / paste vse HTML, boste morali napisati enkrat, in nato lahko Ponovil preko vseh delovnih mest. In to je nekaj, skupno to, da hočeš storiti, ko imate veliko podatkov, je, da za vse, kar je v vaših podatkov, hočeš narediti podobno stvar. In potem, samo ne pozabite, da ko vas želite natisniti nekaj izrecno v HTML, uporabite dvojne naramnice tukaj, potem pa, če želite, da določite nekaj informacij o stanju, ali pa za zanke, ki jih uporabite odstotni nosilec. Torej, vrača v Python Koda, tako da razloži kaj se dogaja v glavnem pot, ko smo šli tja, to samo prikazuje vse objav, ampak potem je vprašanje se, kako smo dejansko dobili objave v bazo podatkov, ki je je malo bolj zanimivo. Torej, ko boste kliknili na New Post povezavo, ki smo ga videli tukaj, vas preusmeri na tem obrazcu. In to je samo preprost klic na render_template funkcija, ki nato prehaja na novo delovno mesto v obliki HTML. Torej, kaj je, da pogled na to. Torej, to je ena zelo preprosta. Ima preprost HTML obliko, ki bo videti malo pozna, temelji na obrazcih v CS50 finance. In tako, smo tu določite, dejanje. In tukaj, če delate s PHP, je normalno, bi bilo nekaj podobnega, create.PHP, ampak tukaj smo dejansko določite pot v bučko strežniku. In tako, ustreza tej poti za ustvarjanje poti da imamo tukaj, ki bomo šli v sekundo. In tako smo se določajo, da to je metoda, po, ker želimo poslati ta oblika podatkov, in ponavadi ko ste pošiljanju podatkov z obrazca, boste morda želeli uporabiti zahtevo za pošto, samo zato, da ne boste na koncu s tem velike, počasne URL. Vendar pa lahko uporabite tudi zahtevo GET, in jih prenesti s spremenljivo usmerjanje, ampak za oblike, to je lepo na zahtevo post tukaj. In tako potem, samo ti je všeč bi naredil s HTML in PHP, lahko določite te besedilne vložkov, in lahko določite ime njih, in to je ime, ki bo dobil opravil v dogovoru objekt v bučko. In potem imamo Submit gumb, ki pravi Post. In tukaj, Post je ime od gumb, ker je to blog post, ampak tukaj, post je metoda zahteva. Torej, to so ista beseda ampak dejansko nepovezani. Ja Če se vrnemo k kode Python, ko smo imenovali ustvariti metodo, Opazili tukaj, da boste lahko dejansko podate v relaciji metode zahteva da želite sprejeti, in tako sem, navedite, da sem samo želijo sprejeti Post metodo. Torej, če sem dejansko poskusite obiskati stran neposredno, ki je s pomočjo zahtevo GET, to mi bo povedal, "Metoda ni dovoljena." In tako, imate strani, nekako kot To ustvari stran, ki sem le res uporabljajo kot način za obrazec dobite predložiti, lahko določite, da ne boste želijo ljudi, da bi lahko šel tja neposredno prek zahtevo GET, ali če niste želeli, iz neznanega razloga, Post zahteva, si lahko samo določite tu, toda v tem primeru smo pravkar želijo Post zahteva, da gredo ven. Torej, kadar se create_post imenuje, ko smo obiskali, da preko Post zahtevo vsakič, ko greste na posebno pot, tam je ta zahteva objekt, in smo morali uvoziti prijave na samem vrhu, vendar pa je ta zahtevek predmet, ki dobi opravil v, in lahko dostopate do podatkov obrazca, ki bo dobil avtomatično napolni ko boste poslali zahtevo obliki. In potem, kaj mislim je res kul, se da oblika objekta se prenesejo v, je samo slovar Python, ki vsebuje, če access-- tako sem, naj me dvigni HTML zraven nje, samo tako da lahko imate, da kot referenca, ja, tako imena, ki jih podate tukaj za različna področja, tako naslov in besedilo, smo nato pa uporabite tiste tukaj kot indeksi v podatke v obrazcu. Torej, to je super priročno. Torej pravimo post.create, ki ustvari in samodejno vstavite ta nova objava objekt v bazo podatkov. In mislim, da je to ustvari funkcijo tukaj je res super primer, kako močan Bučko in dela s tem, ker če ste bili delaš nekaj v PHP, boste morda morali storiti veliko potrjevanja, bi morali potem vzpostavitev povezave z bazo podatkov, bi morali potem izvršiti SQL poizvedbo, tukaj pa imamo samo to lepo post.create, ki smo jih lahko potem samo dobili informacije ven na zahtevo objekta, in nato prenesejo v novo objavili, da smo ustvarili. In potem, zelo zadnja kar želimo narediti, je preusmerjanja Uporabnik nazaj do doma. In tako bomo uporabili to Bučko preusmeriti funkcijo. In nekaj, kar ne bi videli preden je bila ta funkcija URL. Torej URL za funkcijo omogoča podaš v resnici ime za funkcije v vašem Python kodo, namesto določeni progi da je na. Torej, jaz bi imel prav tako enostavno preusmerjeni uporabniku, da poševnica, ki bi ga poslali nazaj domov, vendar uporabo URL je funkcija lepo, ker če spremenite kraj, kjer so stvari, tako da recimo, da sem se spremeniti domov biti na / doma, namesto, to bi še potem vrnil / domov, ker dejansko gre in pogleda ime funkcije, in vam bo dala nazaj URL za to. Torej, nekako na Predpostavka, da ste bolj verjetno, da spremenite kjer stvari so, kot imena funkcij. Lahko uporabite to res Lepo URL za funkcijo. In še ena stvar, ki se zaveda da je malce zapleteno, je, da misliš, da si lahko samo klic preusmeri na URL za, ampak dejansko vse poti imajo vrniti neke vrste besedila in HTML, tako da boste dejansko morali vrniti preusmeritev klica. V nasprotnem primeru, boste dobili nekaj neveljavna, o ne vračajo niz, ker vsi ti morali vrniti HTML si dejansko želijo, da postane. In tako, ko pokličete preusmeritev, vas preusmeri na stran, ampak dejansko vrne HTML morate izvesti, da preusmeritev. Pojdi nazaj na domačo stran. Torej imamo ta dva različna mnenja. Imamo doma pogled. Ali pa, mislim da bi moral reči predloge. Imamo teh dveh predloge, doma predlogo, ki prikazuje vseh naših delovnih mest, in potem imamo to ad stvar, in ko boste kliknili na delovno mesto, gre na novi progi v bučko, vendar so pot ne nujno imajo ustrezno predlogo. Nimate videti karkoli, vendar pa še vedno lahko ima to delo bo o zakulisju. In potem dobiš preusmerjeni nazaj na domačo stran. In zagotovo, to je enostavno delo v nekaterih lepši CSS v predlogo in da je ta videti veliko lepše, vendar pa so vsi glavni logike je tam v Python. Vsa vprašanja v zvezi s tem na primer? Vem, da obstaja veliko različne stvari se dogaja tam, Veliko stvari, ki jih ni videl prej, ampak kot nič. Ja. PUBLIKA 1: Ali imate storiti ničesar posebno za čiščenje podatkov, ki je prihajajo iz obrazca? Opazil sem, da si pravkar rekel "ustvariti" Ezra ZIGMOND: Ja, tako da je pravzaprav, da je res dobra točka. Torej je vprašanje, kajne je treba preveriti in se prepričajte, da so podatki veljaven in storiti vse vrste ribanje se prepričajte, da je veljavna, saj, kot lahko vidite tukaj, Jaz ne delam tega. Torej, da vidimo, kaj se zgodi če sem po nekaj prazno. Torej, bo to dejansko samo narediti prazno mesto in izpolnite datetime. Torej, v resnici, bi si verjetno želijo narediti nekaj podobnega, mogoče določiti, če je naslov enak prazen niz, potem ne delaj tega. Ali pa samo to, če je naslov ni enak postavljenega niza. Tako da dejansko ne samodejno skrbeli za tega čiščenja za vas, tako da boste še vedno morali storiti, da. Ja, dobro vprašanje. PUBLIKA 2: Ali grmičevja za injiciranje nadaljevanje? Ali veš? Ezra ZIGMOND: Upajmo, peewee počne. Mislim, da bi bilo vsekakor precej slab knjižnica, če ni storil tega. Ne vem točno. Moral bi pogled na poizvedbe, ki je ustvarila. Mislim, da, če sem tipkal v blog post, ki nekako pogledal kot injiciranje SQL napad, kaj takega, če je to je kot polje z geslom ali kaj podobnega, lahko naredite nekaj takega. Mislim, da bo še dobili dobesedno objavil, ampak mislim, da peewee počne nekakšna ribanjem podatkov preden se dejansko izvede. PUBLIKA 1: To polje besedilo zasnovan tako, da golo besedilo, kajne? Ezra ZIGMOND: Ja, res je. Ja. Zato mislim, da je vse, tako da je to pravilno obnašanje, bo to storil, ampak mislim, da peewee upajmo, da počne neke vrste zaščito na svojem koncu. In če si hotel dvojno preveri, da obstaja so načini, ko ustvarjajo poizvedbo. tako da vam ne bi bilo treba pognati neposredno. Moral bi trajalo poglej dokumentacijo, vendar lahko dejansko ogledati SQL, ki ga ustvarja, in si oglejte to, in da prepričani, da je zbežala stvari. Drug razlog, zakaj boste morda želeli videti na SQL da peewee je prikazovanje, je, če Stvari se zdi, da se bo res počasi, lahko si oglejte in videli, kaj je to dejansko počne, ker je včasih zlahka nehote dodati in, kako jo napisati, lahko po nesreči jo imajo izbrati celotno zbirko podatkov prvega, in nato naredite nekaj operacijo razvrščanja o tem, kdaj ste res pomenilo, da izberete niz. In tako, če se stvari ne kar bo prav, je dobro, da si oglejte na zahtevo da je dejansko dobili ustvarila. Ja. PUBLIKA 2: Kdaj ste prvič začeli, daš v pristanišču kot 5000. Ezra ZIGMOND: Ja. PUBLIKA 2: Je privzeta s peewee, ali je to nekaj, kar lahko spremeni? Ezra ZIGMOND: Ja, tako da je Pristanišče je privzeta z bučko. Če ga boste pognali brez določajo ničesar, se bo samodejno storiti. Verjamem, da sem imel dvakrat preveriti to, vendar lahko določite, da v app.run, Mislim, da lahko narediš nekaj podobnega, port = 8080. Dajmo, da poskusite resnično hitro. Ja, tako da lahko samo določite port = 8080, in da bo teči tam, kar mislim, če bi želel, da bi sistem deloval na IDE, nisem to preizkusili, ampak mislim, da če vas tekel na vratih 8080, boš verjetno lahko za dostop do strežnika, tako kot ste bili za spletno stran. Ja, ampak to je enostavno spremeniti, da če vas imate kakršno koli Port-posredovanje Stvari, ki jih morate storiti. Vsa druga vprašanja? Ja? PUBLIKA 1: Torej, sem videl v vašem modeli, ki, kot ste omenili, imate, da se opredelijo Baza podatkov za vsak predmet. Ali se zgodi, da veste, ne da bi bilo enostavno, če vas imajo veliko SQLite baze podatkov, ki ste želite uporabiti za eno samo spletno aplikacijo, da lahko samo določite kup različnega tisti v vašem modelu? Ezra ZIGMOND: Ja, pustite me odpreti, da se resnično hitro. Torej, praviš, če želite imeti kup različnih nečesa, morda všeč in študenti, za nekatere Razlog, nekaj takega? Ja, mislim, da Še vedno, vsak model bi bilo še vedno samo eno podatkovno bazo njej dodeljena ampak če si hotel imeti različni modeli, ki so različni predmeti zbirke podatkov dodeljena z njo, bi lahko zagotovo naredil. Torej, če sem ustvaril nov, kaj takega, in zdaj je ta študent, ki izgleda čudno kot blog post, Sem lahko določite, da se Podatkovna baza je enaka tukaj db_2. Torej, mislim, da je to Glavni način lahko to storite. Cool. Vsa druga vprašanja? Torej samo do konca gor malo bit, tukaj je nekaj virov, in ti diapozitivi bodo objavljene na spletu tako da lahko dejansko priti do teh povezav. Najboljši viri so res dokumentacija za bučko in se peewee. Oni so napisana zelo dobro, mislim. Torej, na spletni strani Bučka je tukaj, in imajo QuickStart tutorial, ki bo vodil skozi podobno stvari, kar sem šel skozi, če pa želite kakršno koli pregled stvari, da sem šel čez, ali ste mislili, da sem pojasnil nekaj v nejasne poti, oni imajo podobne primere tam. Peewee ima dokumentacijo, in imajo QuickStart tutorial ki gre preko glavnih parametrov da bi si želeli uporabljati. Torej, stvari, ki sem govorila z edinstveno, in ki določajo neplačil, različne vrste področij, ki lahko uporabite tiste, bi bili vsi tam. Tudi, če imate vprašanja o peewee, in jih objavili na stackoverflow, fant, ki je peewee dejansko gre naprej in odgovori tistih, ki včasih. Če imate vprašanje, upajmo je ne boste mogli odgovoriti, ker je pisal vso stvar. Mislim, da je vse, kar je Želel sem kritje. Hvala za prihajajo ven.