[MIZIK jwe] EZRA Zigmond: Hi, tout moun. Mèsi pou vini soti jodi a. Seminè Sa a se "Piton Entènèt Apps ak Flask. " Se konsa, mwen pral yo dwe pale yon ti kras sou poukisa ou ta ka vle itilize Flask fè apps entènèt ak Piton, kòm opoze nan kèk lòt cadres yo deyò, tankou Django, ki se pi byen li te ye la-. Subtitles an se "ak peewee, "ki se yon bagay nou ap ale nan pale sou fason yo kominike avèk baz done SQL. Li fè li vrèman bèl. Se konsa, isit la nan jis yon fatige rapid nan sa m 'vle ale sou. Se konsa, premye, jis yon sèl glise ki k ap pase yo dwe QuickStart, ki se kòman ou kapab jwenn tout bagay mete kanpe sou òdinatè ou. Mwen pral yo dwe demontre sa a sou Mac machin lokal mwen, jis paske sa a, se kote mwen te fè sa a anvan, mwen se pi konfòtab ak li, men sa a se definitivman posib sou CD50 IDE a. Se konsa, apre sa, mwen vle prezante sa Flask se, ak konvenk ou poukisa ou ta dwe sèvi ak li nan plas an premye. Lè sa a, Mwen pral ba yon rapid egzanp sou sa ou ka fè nan Flask, se yon egzanp rapid nan sa ki ou ka fè nan peewee, ak Lè sa a mwen pral montre w yon pi plis konplè aplikasyon egzanp ke mwen mete tèt yo ansanm ke nou ka mache nan ansanm. Lè sa a, finalman, nan dènye glise nan, mwen gen kèk nan resous ke ou gade a sou entènèt pou plis enfòmasyon. Sa a se pa yon konplè leson patikilye sou kouman yo sèvi ak Flask. Apre sa, mwen pral espere yo kite kèk tan pou kesyon. Nenpòt moun ki ap gade lokalman, jis tankou, rele soti nan mitan an si ou gen nenpòt kesyon. Se konsa, rapid bagay enstalasyon, si ou vle yo swiv ansanm, oswa si ou vle jwenn sa a moute sou machin pwòp ou a, Mwen pral lè l sèvi avèk Piton 2.7.10. Flakon fè travay ak Piton 3, men mwen renmen lè l sèvi avèk Piton 2, paske gen nan kèk pakè Piton ki pa travay ak 3 ankò. Si ou te enstale pip, ki se yon manadjè pake Piton, Mwen panse ke si ou se Piton pi gran pase oswa egal a 2.7.9, ou genyen li enstale deja, li nan super fasil enstale pakè sa yo. Ou ka enstale pip Flakon, pip enstale peewee, anjeneral ou gen kouri sudo jis se konsa ke autorisations yo travay deyò. Epi, si w ap itilize yon super fin vye granmoun vèsyon an Piton, Mwen rekòmande à Piton ou, oswa lè l sèvi avèk EasyInstall yo enstale pip. Se konsa, kesyon an pwochen se, ki sa ki Flask? Apre sa, mwen devine, premye yon kesyon ki rezonab Map mande mwen pou yon tan long se, ki sa ki yon app entènèt? Paske sa a, se yon mo ke mwen panse yo jete nan yon lot ke mwen pa t 'reyèlman konnen. Apre sa, mwen panse ke pi bon an egzanp nan sa ki yon app entènèt se, vrèman se CS50 Finans, kote li pa vrèman jis yon sit entènèt, men li la yon bagay ke ou te kapab sòt de kominike avèk yo. Gen kont itilizatè yo ak tout kalite bagay diferan. Se konsa, kote egzakteman ou trase la liy ant sa ki se yon sit entènèt, ak sa ki yon app entènèt, se sòt de abitrè, men mwen devine lide a, li nan yon bagay pi plis pase yon sit entènèt ak li nan yon aplikasyon itil. Se konsa, Flask se yon kad pou fè apps entènèt lè l sèvi avèk Piton. Ak èspere ke, nan fen nan sa a, mwen pral konvenk ou ke ou ta ka aktyèlman ekri yon bagay tankou CS50 Finans lè l sèvi avèk Piton, ki mwen tankou yon bann pi bon pase PHP, pèsonèlman. Se konsa, Flask se yo, yo rele yon microframework, pa ki, yo vle di li trè senp, men rnouvlabl. Se konsa, li gen jis sa ou bezwen, men si ou vle plis karakteristik, li fasil yo pote yo nan. Men, jis paske li nan yon microframework, pa fè sa vle di ke li nan sèlman pou pwojè ki piti yo. Mwen gen yon ap mennen isit la ki di ke Obama itilize Flask nan 2012 pou kanpay li sit entènèt, ki èspere ke, se yon bagay nan yon andòsman. Men, bagay la ke mwen reyèlman renmen sou Flask se ke, li pa vrèman fè nenpòt ki sòt de desizyon pou ou. Jis paske nou ap ap pale de apps entènèt, Mwen gen yo konpare l 'bay Ruby sou Ray ak django, tou de kote yo cadres gwo, men yo tou de fè sipozisyon sou ki jan ou vle kominike avèk baz done, ki jan ou vle prezante ou opinyon, e yo ap definitivman aspè bon nan sa. Pou egzanp, Ruby sou ray gen sistèm dosye aktif sa a, ki se yon reyèlman bon fason yo kominike avèk done, men si ou vle sèvi ak Ruby sou Ray, w ap sòt de mare nan sa. Men, avèk Flask, kòm mwen pral montre ou ak peewee, ou ka sèvi ak tou sa sòt nan baz done ou vle, epi ou ka jis rale ke nan kòm yon ekstansyon nan Flask. Se konsa, sa a, se poutèt sa mwen reyèlman tankou Flask, li nan ke li pa fè sipozisyon pou ou ki baze sou bagay sa yo ou pa bezwen vrèman. Se konsa, poukisa ou ta dwe itilize Flask? Avantaj ki genyen yo, li jis gen reyèlman karakteristik yo ki nwayo bati nan li ke ou bezwen. Se konsa, ou pa gen enkyete sou konprann yon pakèt antye de bagay sa yo ke ou pa reyèlman bezwen. Ou pa oblije gen enkyete sou sinon koupe karakteristik ke ou pa reyèlman bezwen. Epi, menm jan mwen mansyone, li nan super fasil yo ajoute nan ekstansyon de bagay sa yo ke ou bezwen. Kèk nan yo, Flask gen pwòp sipò yo pou li. Se konsa, gen nan yon bagay yo rele Flask admin, ki miwa ki admin panèl ki Django bay, sa ki ba ou yon fason bèl vizyèl yo administre sit entènèt ou. Men, ankò, si w ap fè yon bagay senp, pwobableman ou pa bezwen yon gwo admin panèl, se konsa mwen panse ke sa ka super bèl. Ak dezavantaj yo se, ki ou gen mwens pouvwa soti nan bwat la. Se konsa, lè w ou fèk louvri moute Flask, ak nan pwogram Piton ou, ou jis tape nan Flask enpòte *, oswa kèlkeswa sa, ou pa egzakteman jwenn tout karakteristik yo ki ou ta ka vle. Se konsa, ou gen nan plis klèman lis karakteristik yo ki ou vle. Se konsa, sa a, se yon sèl dezavantaj, men mwen panse ke pou bati ti entènèt apps tankou mwen pral yo dwe ki montre ou, sa a, se pa reyèlman yon pwoblèm. Ak sa ki bagay la pase a se sipoze vle di, ki se yon Typo, se ke gen mwens ofisyèl konvansyon pou kouman yo sèvi ak Flask, jis paske pa gen kòm anpil moun ki sèvi ak li pwofesyonèl konpare ak django. Se konsa, si ou gade yon bagay tankou, "ki jan m 'fè x" nan django, ou pral pwobableman jwenn li ankò. Genyen bon konsepsyon modèl ou ka itilize, Men, se avèk Flask, li nan sòt de al fè wout pwòp ou a, jis paske li nan yon bèl ti bibliyotèk. Se konsa, sa yo se nan dezavantaj, men mwen panse ke li la toujou yon bon bibliyotèk yo sèvi ak. Se konsa, kite yo jis so dwa nan Flask. Sa a se definitivman pa pral yo dwe yon leson patikilye konplè, men li la l 'ban nou yon lide pou konnen kijan pou estrikti bagay sa yo, e konsa ou santi ou alèz ale koupe ak gade nan dokiman an epi jwenn konnen plis. Se konsa, kite m 'louvri moute yon vrèman senp egzanp nan premye, epi montre w ki sa sa sanble, ak Lè sa a nou pral kraze li desann yon ti jan ti kras pi plis. Se konsa, sa a isit la, kite m 'jwenn li kouri. Se konsa, mwen kounye a gen kouri aplikasyon mwen an. Mwen pral louvri moute Safari, ak li nan kouri sou lame lokal mwen. Se konsa, mwen jis ale nan fè sa-a pi gran. Men, localhost: 5000 Se konsa, kounye a, tout bagay sa a fè se, lè ou vizite sit entènèt la, li simagri soti "Alo Flask," ki se pa super ki itil, men mwen panse ke li nan fre ki nan dosye sa a ti kras isit la, nou gen yon kouri sèvè wèb ki enprime soti yon bagay. Se konsa, kite a aktyèlman gade a kòd la pou yon dezyèm fwa, ak kraze li desann yon ti kras. Se gwosè a bon pou tout moun isit la? Se konsa, èspere ke, w ap yon ti jan konfòtab lè l sèvi avèk Piton. Mwen an konsideran ke nou ka gade nan Piton a ak li nan li. Si w gen nenpòt kesyon sou anyen, mwen ka ale tou sou sa. Se konsa, liy la premye se, ki soti nan Flask, nou enpòte, Flask ak yon kapital "F" ki se sòt de nan tout karakteristik kle ke ou bezwen. Chak fwa w ap ekri yon dosye epi itilize Flask, w ap ale nan vle enpòte sa, jis paske ki gen tout bagay prensipal la. Bagay nan pwochen nou fè sa, se nou rele sa a fonksyon Flask, jis yo kreye yon objè app, epi w ap toujou ale nan vle fè sa. Lè sa a,, sote desann nan la anba byen vit, pati sa a isit la se, 'if_name _ == "_ main_"' ki se sòt de yon konvansyon Piton. Se konsa, sa a pral sèlman egzekite si ou kouri sa a ranpli dirèkteman lè l sèvi avèk Piton. Lè sa a, nou rele app.run, ki pral aktyèlman kòmanse app a prale. Se konsa, sa a, se estrikti a prensipal ki ou pral gen nan nenpòt aplikasyon Flask, se ou pral gen sa a app = Flask (_name_), ak Lè sa a app.run. Se konsa, de bagay sa yo ke mwen gen nan isit la, yo se sa ki nou rele wout. Se konsa, kite nan pale sou routage yon ti jan ti kras pi plis. Mwen pral tounen nan glise la. Se konsa, pi fondamantal nan konsèp nan Flask se routage. Lè li nan lide ki fè konnen ou bay fonksyon nan Piton nan adrès patikilye nan paj entènèt ou an. Se konsa, nenpòt lè ou vle yo kreye yon nouvo wout, ou sèvi ak sa a app.route @ fonksyon dekoratè. Se konsa, si ou se enkoni ak dekorasyon fonksyon nan Piton, li nan konsèp sa a ki pèmèt ou pran yon fonksyon ak antoure l 'ak yon lòt bagay. Se konsa, reyèlman, ki sa sa a fè dekoratè, se ke li pran fonksyon ki anba a li, epi li ajoute plis enfòmasyon nan li, men sa ki Flask aktyèlman fè ki rive se pa super enpòtan, men ki sa ki enpòtan, se ke anvan wout la, ou mete sa a app.route @, ak Lè sa adrès ki nan wout la, se konsa koupe a se sa nou wè lè nou jis louvri moute paj wèb la. Se konsa, sa a, se paj dakèy la. Se jis wout la koupe. Lè sa a, ou gen fonksyon sa a. Non a nan fonksyon an kapab tou sa ou vle. Li pa gen yo nesesèman gen fè ak wout la. Lè sa a,, tou sa retounen fonksyon an nan, fonksyon an ta dwe retounen yon kòd. Epi sa fisèl kapab gen HTML oswa nenpòt bagay, e ke se aktyèlman ki sa ki pral jwenn retounen nan navigatè entènèt ou kòm HTML, epi li pral rann sa. Se konsa, sa a se kòd la menm ki te soti nan egzanp lan ke mwen jis kouri, se konsa lè nou vizite koupe, li rele yon fonksyon Alo Mondyal, ki jis retounen yon fisèl, Alo Flask, ak ki vin enprime sou ekran an. Se konsa, gen nan yon lòt egzanp, ki se, lè ou vizite / hello, li simagri soti Alo Pawòl, ki ta dwe aktyèlman di, Bonjou Mondyal, men kite a pretann ke te entansyonèl. Se konsa nou rale ki moute reyèl rapid. Se konsa, si ou ale nan localhost / hello, li pral kounye a enprime yon lòt bagay. Se konsa, sa se sèlman yon egzanp rapid nan ki jan ou kapab kreye de wout diferan. Se konsa, byen lwen tèlman sa a se pa super ki itil, pa gen yon lot antye ou kapab fè, ou ta ka jis fè tout sa ak gen paj HTML diferan, ak ki lè ou ale nan yon patikilye paj li jis charj paj la. Se konsa, kite a wè kèk plis bagay sa yo itil ou kapab fè. Se konsa, yon sèl bagay ke ou ta ka gen remake nan egzanp lan ke mwen rale moute, se ke mwen te app.run (dbug = Vrè). Se konsa, ki sa sa a agiman dbug fè, se ke lè ou kouri sèvè entènèt ou an, lè w ap nan aplikasyon w lan, si ou chanje yon dosye, li pral otomatikman Reload sèvè a. Se konsa, ou pa gen aktyèlman yo rekòmanse Piton, ki se super itil. Mwen ka montre sa. Kite m 'rale moute kòd m' ak Typo a nan li, ak pretann te ke Typo mete ladan l ' entansyonèlman pou rezon édikatif. Se konsa, kite a ajoute sa a tounen nan. Se konsa, kounye li di Bonjou Mondyal la. Mwen pral sove li. Men, si nou rale tounen moute tèminal la, ou pral di ke li nan rekòmanse, paske li detekte yon chanjman, ak konsa koulye a lè nou Reload paj sa a, li pral enprime soti bagay ki kòrèk la. Se konsa, dbug se super itil pou sa. Epitou, si ou gen nenpòt sòt de yon aksidan, se konsa kite m 'fè sa-a aksidan aplikasyon pa gen li pa retounen yon fisèl. Se konsa, kite yo jis genyen li retounen Okenn pou kèk rezon. Lè sa a, lè m 'ale nan sa a paj, li pral jis aksidan, men sèvè a pa sèlman aksidan, li aktyèlman ba ou yon tounen super itil tras nan tout bagay ki ale mal. Ak sa ki nan vrèman bèl, se ke nan nenpòt ki etap nan sa a tounen tras, ou te kapab louvri moute yon entèaktif koki isit la, ak sòt de enprime konnen ki sa ki varyab ou vle pran yon gade nan. Se konsa, debogaj se reyèlman itil pou n ap kalkile konnen sa k ap pase ak ou sèvè, olye ke sèlman wè yon bagay nan PHP tankou yon entèn 500 erè sèvè, ki se super initil. Youn nan bagay yo dwe okouran de, se ke si ou mete app ou sou entènèt se konsa li a vizib nan piblik la, ou pa janm vle kite mòd dbug sou li a, paske moun ka aktyèlman sèvi ak sa konsole ke mwen te montre ou al touye abitrè kòd. Se konsa, yo ka enprime soti tankou nenpòt ki kòd sekrè ou gen nan la, yo ka gade nan egzakteman ki jan sit entènèt ou ap travay. Se konsa, li reyèlman itil pou fè tès, men toujou asire w ke w pran li soti anvan ou pibliye anyen sou entènèt. Se konsa, lè w ap itilize yon bagay tankou PHP, gen nan ide sa a ke ou ka pase enfòmasyon ant paj wèb pa mete enfòmasyon ki aktyèlman nan URL la, ki se yon demann JWENN, men nan Flask, ou ka aktyèlman fè yon bagay sòt de tankou sa yo, pa gen yon wout ki gen yon varyab kòm yon pati nan li. Se konsa, si ou gade nan sa a egzanp sou ekran an isit la, nou gen yon wout sa a, se ('/ alo /'), ak Se konsa, si w ap vizite / alo / yon bagay, ke yon bagay ki pral aktyèlman jwenn ranpli nan varyab la non. Apre sa, remake ke fonksyon an ki vini ak ki wout gen yo pran nan paramèt la non, se konsa ke li pral aktyèlman debarase pase nan fonksyon an. Lè sa a,, yon fwa w ap andedan nan ki fonksyon, ou ka trete ke tankou yon nòmal Piton varyab ★ ak pou lè sa a, li pral enprime soti Hello, epi li ap ranpli nan non lè l sèvi avèk kèk fòma fisèl. Se konsa, yo ajoute pati varyab nan yon routage, ou itilize bracket a ang regilye nèf semenn klas. Apre sa, opsyonèlman, ou ka itilize sa ki rele yon konvètisè. Se konsa, si ou mete sa a komantèr ak kolon an, ou ka presize ke li nan yon int, oswa yon flote, oswa chemen, epi li pral otomatikman konvèti sa. Ou kapab tou fè konvèsyon an nan fonksyon an Piton, jis lè l sèvi avèk yon jete, men pafwa si ou vle asire ke li nan yon int, ou ka mete sa règ konvèsyon nan la. Se konsa nou rale moute yon egzanp nan kèk règ varyab. Se konsa, isit la, sa a gen menm bagay la tou debaz estrikti ak nan soti nan Flask enpòte Flakon, app = flakon (_name_ la), ak Lè sa a li nan kouri nan fen an. Nou gen de sa yo diferan wout varyab isit la. Yonn nan premye, se yon sèl la ki mwen te montre nan glise la, ki te ke li jis pran nan yon non fisèl epi li pral enprime soti Hello, Non. Lè sa a, yo, dezyèm nan youn sèvi ak konvèsyon an. Se konsa, sa pral otomatikman konvèti li nan yon int, ak Lè sa double int a, epi enprime ki deyò. Epi, nou pa fè nenpòt ki sòt nan konvèsyon nan li paske Flask pran swen de sa. Se konsa nou jwenn sa a kouri. Lè ou gen yon flakon aplikasyon kouri, Ou ka kontwole-C soti nan li yo sispann kouri a sèvè. Lè sa a, mwen pral kouri varyab yo. Se konsa, kite a ale nan localhost / alo / Ezra ak èspere ke, sa a pral di alo m '. Se konsa, li te pran nan non mwen, nan varyab la wout, epi li plen l 'nan isit la. Se konsa, mwen pral montre tou yon rapid egzanp sou double a. Se konsa, si ou ale nan / doub / 3, li pral enprime soti 6. Se konsa, sa te pran swen nan konvèsyon an pou nou. Se konsa, ou kapab tou fè l 'ak flote, ak yon bagay espesyal, si ou bezwen presize yon bagay tankou yon chemen, ki pèmèt li aksepte bar, men sa pa ta dwe anjeneral dwe yon pwoblèm. Se konsa, lwen nou, toujou gen jis te retounen strings, ki se pa trè enteresan. Nou te kapab aktyèlman retounen literal HTML fisèl. Se konsa, nan Kòd la nou ka insert yon bagay tankou b-tag la fè li fonse, men pifò tan an ou pa aktyèlman vle yo dwe ekri kòd HTML nan kòd Piton ou yo. Li vin reyèlman sal, epi li pa yon bon moman. Flakon pèmèt nou separe soti nan HTML nan sa yo rele Modèl la, ak Se konsa, si w ap panse an tèm de modèl la mv ke w ap abitye ak, èspere ke, soti nan ap travay ak CS50 Finans yon ti jan, ou ka panse a dosye yo Piton tankou se te plis nan contrôleur a, kote yo kominike avèk tou sa done modèl ou ta ka genyen. Apre sa, lè sa a yo ap rele soti nan Pwen de vi yo, e pase enfòmasyon yo ki Gade ranpli nan enfòmasyon ki nan HTML ke li bezwen. Ak sa ki nou rele moun Pwen de vi se Templates nan klas la. Se konsa, sèvi ak yon lòt Piton Flask modil ke li pral otomatikman enstale lè ou enstale pip Flakon rele Jenja, ki pèmèt ou ajoute sa yo anote ak HTML a sa ou wè sou ekran an, ki pèmèt ou mete nan bagay sa yo tankou kondisyonal, ak pasan nan HTML a. Se konsa, li sanble yon ti jan tankou ki jan ou ti kras ta ka sèvi ak PHP nan yon dosye HTML, men sa a se jis lè flakon an sèvè sèvi moute dosye a HTML, li pral kouri sa a motè templating ak analizan nan sa a, epi nwasi bagay sa yo nan. Se konsa, Flask gen yon fonksyon render_template ke ou ka wè nan pati anba a isit la. Se konsa, lè ou vizite paj sa a, li ta rann sa a Modèl hello.html, ak Lè sa a ranpli nan paj HTML sa a. Se konsa, kite yo jis kouri sa a reyèl rapid, ak wè sa ki li sanble, ak Lè sa a mwen pral ale nan yon ti jan nan plis detay. Se konsa, Templates ou yo ale yo ale nan yon katab Templates. Li pral otomatikman gade nan nan Templates folder pou sa Modèl. Se konsa nou louvri sa a leve. Se konsa, mwen pral kouri egzanp lan templating. Se konsa, si m 'ale nan / alo / Esdras, li gen sa a terib, insuportabl tag chapito ke mwen mete nan. Trè bèl, trè dinamik. Mwen gen yon gwo fanatik. Men, sa ki k ap pase si Mwen jis ale nan, / alo? Se konsa, li jis di Bonjou Mondyal la. Mwen pa t 'pase li yon non, ak li plen l 'nan otomatikman. Se konsa nou wè ki jan li te fè sa, e ki jan nou ka debarase m de ki chapito petèt. Se konsa, isit, sa a se sòt de yon egzanp enteresan nan, si ou yo abitye avèk ki jan switch deklarasyon travay nan yon lang. Di sa a se sòt de tankou, ki sòt de yon sezon otòn nan, kote ou aktyèlman tache de wout diferan nan fonksyon an menm. Se konsa, nou tache / alo wout la ak / alo / wout la non yo Bonjou, epi nou presize using-- Piton pèmèt ou presize default arguments-- fonksyon Se konsa, si pa gen okenn Non, se konsa si nou ale nan jis / hello, li pral otomatikman filtre nan non ki egal a Okenn. Se sak fè, nou rann nan Modèl ak non = non, se konsa li pral pase nan paramèt nan non egal a sa a paramèt fonksyon non, nan Modèl la. Ki toujou pa eksplike ki jan pou n ap deside si l ap enprime Alo Mondyal, oswa enprime non mwen. Se konsa, kite a aktyèlman gade nan Modèl nan tèt li, epi wè ki kote ki ap vini soti nan. Se konsa, ki nan Modèl sa a, nou aktyèlman gen kèk lojik kondisyonèl, ki kèk moun ki ta diskite, ou aktyèlman pa ta dwe gen yon anpil nan kondisyonèl lojik nan modèl ou tèt li. Li ta dwe gen plis nan a Kontwolè, men pou egzanp sa a li nan yon bagay bèl ki piti yo. Se konsa, isit la, nou tcheke, si non, se konsa si non se pa egal a Okenn, si yon non se aktyèlman te pase nan, lè sa a nou pral di Hello, non ak nan header ak chapito a, tout HTML nòmal sa a, otreman, nou pral enprime soti Hello, Mondyal jis nòmalman. Se konsa, yon koup bagay a yon avi isit la sou ki jan ou fòma templating a, se ke, tout moun sa yo deklarasyon kondisyonèl, sòt de tankou ki jan nou PHP li lè ou vle insert kèk PHP, ou itilize mwens la-pase kesyon make, li nan sòt de analoji isit la ak {% an. Se konsa, isit, nou gen Kòd kondisyonèl nou an. Lè sa a,, lè ou aktyèlman vle literalman evalye yon bagay, epi enprime li soti nan ekran an, ou itilize aparèy òtopedik yo doub. Se konsa, isit la yo se aparèy òtopedik yo doub, ak Lè sa a nou presize non, se konsa nan ki, li pral evalye nan non an varyab, ki te pase nan soti nan la rann fonksyon modèl, olye ke sèlman enprime soti, si nou te debarase m de sa yo, li ta jis enprime soti mo "Non." Se konsa, sa a, se yon bagay yo gade soti pou. Se konsa, yon lòt bagay yo avi se ke, lè nou vle sèvi ak nan fonksyon render_template, nou gen aktyèlman yo enpòte li klèman soti nan Flask. Lè sa a se yon egzanp sou modularite nan Flask, ke ou pa gen yo enpòte bagay sa yo ke ou pa bezwen. Ou ka jis pote nan nan fonksyon ou aktyèlman bezwen, ki se pafwa bèl, se konsa ou pa fè sa gen gen tout fonksyon sa yo chita alantou ke ou pa ap lè l sèvi avèk, men tou,, si ou bliye ke ou bezwen enpòte render_template, ou pral pwobableman jwenn yon avètisman ki pral fè w konnen sou sa. Se konsa, se sa ki templating. Se konsa, nou te montre ki jan yo fè paj wèb ki senp, epi ajoute yon ti jan ti kras pi plis lojik yo li, an tèm de routage nan varyab. Li pèmèt ou fè bagay sa yo diferan ki baze sou sa URL ou ale nan, epi tou li lè sa a, bay HTML a yon ti jan ti kras pi plis sans nan tèm de ki jan ou vle rann bagay sa yo. Ou pa oblije mete tout HTML ou a Piton ou, men pou bèl anpil chak aplikasyon sou sit wèb ★ w ap ale nan vle kèk sòt nan done modèl asosye ak li. Se konsa, tradisyonèlman, sa a ta gen yon bagay tankou yon baz done SQL. Epi ou ka jis kominike dirèkteman ak SQL. Piton gen, mwen panse ke sa yo rele. Sklit 3. Ou ka jis enpòte sklit 3 ak egzekite queries SQL dirèkteman, men mwen pa konnen sou ou, men mwen reyèlman pa renmen, jis, ekri soti queries SQL. Li gen tandans fè jwenn vrèman long ak konplike. Se konsa, yon bagay ki Mwen renmen yo sèvi ak se sa ki nan li te ye kòm yon ORM, ki se yon objè-relasyon kat. Ak pwen a nan yon kat objè-relasyon, se ke gen de diferan fason ou kapab panse osijè de baz done. Se konsa, egzanp lan ki Pwofesè Malan anjeneral sèvi ak nan klas, se tab la Excel, kote ou gen ranje sa yo ak kolòn sa yo, e ke sa a vrèman itil pou kijan li se reprezante nan SQL ak fason ou kominike avèk li, men li yon lòt fason ke li la aktyèlman itil nan panse sou li pafwa, se an tèm de klas ak objè yo. Se konsa, olye pou yo panse nan chak tab tankou ke li gen ranje sa a ki gen sèten enfòmasyon, ou kapab aktyèlman panse a li tankou se te chak tab se yon klas, ak Lè sa a chak egzanp nan la klas gen sèten pwopriyete. Se konsa, nan egzanp sa a, ka yo nan klas la se ranje yo nan tablo a, ak Lè sa a chak pwopriyete ta gen yon kolòn nan tablo a. Se konsa, ORM a ke mwen renmen yo sèvi ak yo rele sa peewee. Li nan reyèlman piti, sòt de tankou Flask. Mwen panse ke yo ke yo mache byen ansanm, men gen yon anpil nan lòt ORMs ke ou ka itilize. Yon yon sèl plis popilè se li te ye tankou SQLAlchemy, epi mwen pa ka sonje poutèt sa mwen orijinal te chwazi peewee sou SQLAlchemy, oswa mwen ta di ou poutèt sa mwen panse ke li nan yon sèl la pi byen, men nou ap jis ale nan sèvi ak sa a youn paske mwen konnen ki jan yo sèvi ak li. Se konsa, yon sèl kesyon se, poukisa ou ta dwe deranje lè l sèvi avèk yon ORM, olye pou yo jis dirèkteman ekri queries SQL? Apre sa, mwen panse ke ka a pi bon, se ke ou pa fè sa aktyèlman gen yo ekri queries SQL. Li nan pi fasil, jan mwen pral montre w, nan fè bagay sa yo tankou seleksyon, ensèsyon, sipresyon, espesyalman kreye tab. Li nan pi fasil yo ekri yon estrikti klas, pase sa li se yo estrikti yon Kreye Deklarasyon Table, men se yon sèl bagay yo dwe okouran de, se ke ORM a ap eseye pi byen li yo konnen sa ki pi plis la rechèch SQL efikas ta dwe, men pafwa li vin li sa ki mal. Epi sitou si w ap travay ak yon baz done gwo, ou ka remake ke yon demann ki ta dwe kouri vit, se aktyèlman pran pi long lan. Men, si ou gade anba kapo machin lan nan ki jan ORM a ap entèprete ki nan SQL, li ta ka fè yon bagay reyèlman ridikil, jis paske li sòt de siy entansyon ou mal. Epi, te gen fwa kote Mwen te gen pase sou desizyon l ', li jis egzekite queries pwòp SQL mwen, jis paske li te analyse nan yon fason etranj. Se konsa, gen kèk sou tèt li, jis nan wout la ke li compiles ou deklarasyon desann nan SQL. Se konsa, kite pou yo gade super byen vit nan yon egzanp ki senp nan yon modèl done ke ou ta ka sèvi ak. Se konsa, sa a se Piton Kòd, e konsa nan Premye bagay ou vle fè se soti nan peewee enpòte *. Se konsa, yo, kontrèman ak Flask, kote ou gen tout bagay sa yo modil endividyèl, , epi ou vle enpòte Flask, ak ekri yon Modèl, ak kèk lòt moun ke nou pral wè pita, ki soti nan peewee, ou ka jis enpòte tout bagay, paske li nan yon bibliyotèk bèl ki piti yo. Se konsa, premye bagay la ou vle fè, se aktyèlman kreye sa a objè baz done. Se konsa, ou gen db = SqliteDatabase, ak Lè sa a non an nan baz done ou. Ak sa a pral aktyèlman kreye yon baz done objè ke ou ka kominike avèk, ak peewee. Lè sa a,, nou gen aktyèl la modèl ke nou vle kreye. Se konsa, tab la nou vle kreye. Se konsa, ki nan peewee, chak klas gen tab pwòp li yo nan lespas baz done ou. Se konsa, tout nan klas yo eritye soti nan modèl la baz, ak kapital M modèl la se yon bagay ki nan sa defini nan peewee. Se konsa, tout nan modèl ou ta dwe eritye kòm pi wo supèr yo, yo ta dwe pran ki soti nan modèl, men sa ki nan vrèman fre, se ke ou ka gen aktyèlman ou modèl eritye soti nan chak lòt. Ak yon anpil nan tan an, ou modèl done pa fè sa nesesèman fè yon yerachi pòsyon tè bèl, men fwa kote yo fè, li vrèman bèl, paske ou gen modèl la nannan ki soti nan chak lòt. Se konsa, nou defini klas sa a 'elèv,' ki erite yon modèl, epi li gen twa pwopriyete. Li te gen yon ID, ki se yon PrimaryKeyField, ki se yon bagay ki nan bay pa peewee, non se yon CharField, ak yon klas se yon IntegerField. Se konsa, sa ka oswa ka pa gen ki jan CS50 aktyèlman estoke tout klas elèv yo. Li se pa, men sa a se ki jan mwen ta fè li. Lè sa a, li gen, nan klas sa a, ak sa a se yon bagay ou kapab fè avèk Piton, ou ka gen klas enbrike. Lè sa a se yon bagay ki nan egzije sa peewee. Se konsa, Meta klas sa a, ou gen ou presize ki baz done a se egal a objè a ke nou kreye pi wo a. Lè sa a di sa dosye se tablo sa a aktyèlman pral yo dwe genyen nan yo nan. Se konsa, sa a se yon bagay ki di ou gen fè nan tout nan modèl ou yo. Ou jis bezwen presize nan klas sa a Meta ki baz done ki egal a db. Se konsa, sa m te toujou konn fè, si mwen gen yon pakèt moun sou modèl diferan, se ke mwen gen yon sèl baz modèl, pou m 'anjeneral jis rele "modèl baz" ki gen klas la Meta, epi li kouche baz done a egal a db. Lè sa a, tout nan modèl ki vin apre m ' pral eritye soti nan ki klas baz. Lè sa a, mwen pa gen enkyete sou mete klas la Meta. Se konsa, lè sa a aktyèlman vin konpile desann nan yon deklarasyon SQL, li sanble bagay sa a anbarasan desann isit la, "Kreye tab nonb antye relatif ID elèv, "Kèlkeswa sa. Epi, mwen panse ke li se pi kout, sa a sijè rechèch SQL dwa isit la, men si ou gade nan klas sa a isit la ou ka wè ekzakteman ki sa k ap pase sou. Ou ka wè sa ki kalite nan jaden gen, ki sa yo ap rele yo, e konsa, mwen panse ke gade nan sa a Kòd Piton se yon anpil plis lizib pase ap eseye ekri sa a sijè rechèch SQL. Se konsa, yo nan lòd yo aktyèlman itilize baz done a, nou gen pou konekte avèk li nan Piton. Se konsa, mwen anjeneral ekri yon fonksyon rele initialize_db ki fè de bagay sa yo. Li pran nan baz done a db objè epi li konekte nan li, ki jis ouvè moute seksyon nan baz done a. Si w ap jis kouri menm si sit sou machin lokal ou a, li se pa yon kontra gwo super enkyete sou konekte ak debranche, men si ou se kouri l 'sou yon sit entènèt, ou vle asire w ke, nenpòt lè yon itilizatè konekte nan li, lè yo fèmen soti sit entènèt la, yo dekonekte pou ke ou pa gen yon pakèt moun sou moun ki konekte nan baz done ou tout nan yon fwa. Lè sa a,, lè ou konekte avèk baz done a, ou vle rele db.create_tables, ak lis modèl yo pou sa ou vle yo kreye tab. Se konsa, isit la, mwen jis vle kreye li pou elèv sa a. Apre sa, lè sa a, sa ki enpòtan, se yo presize ki an sekirite = Vrè pi tan an. Se konsa, sa deklarasyon sa a pral fè, se ke li kreye tab pou la modèl elèv, men se sèlman si sa a pa gen anyen tab te kreye deja. Sa a ki sa Espesifik yo an sekirite. Se konsa, li pa pral recouvrir tab ki egziste deja ou, li pral sèlman kreye yon nouvo tab si gen se pa yon sèl la. Se konsa, ou ta ka jis kreye tab yo yon fwa lè l sèvi avèk SQL. Lè sa a, gen sa chita baz done a, ak Lè sa a konekte nan chak fwa, men li la anjeneral bèl jis yo mete nan sa a apèl create_tables, pou ke, si ou te janm efase ou baz done lè ou kouri entènèt ou app ankò, li pral rkree li. Se konsa, jis asire w ke san danje se espesifye yo dwe vre, oswa ou pral jwenn done ou jis ap resevwa clobbered chak fwa. Lè sa a,, ou ka jis rele initialize_db yo etabli yon koneksyon, ak kreye tab si sa nesesè. Se konsa, bagay ki pi komen ke ou pral vle fè a, oswa yon sèl nan bagay sa yo ki pi komen, se aktyèlman Insert bagay nan baz done ou. Se konsa, olye ke gen yo ekri yon insert nan deklarasyon ak tout valè yo espesifye, ou ka aktyèlman rele fonksyon sou klas la elèv yo. Se konsa, lè ou kreye yon klas ki erite soti nan modèl, li gen sa a kreye metòd. Se konsa, ou fè name.create klas, epi ou presize paramèt yo ke ou vle pase nan. Se konsa, si mwen vle ajoute kèk elèv nan egzanp liv klas yo CS50 nou an, Mwen pral mete nan David la, ki gen yon trè bon ane, li te gen yon 95. Ak tèt mwen, ki moun ki pa nan fè sa byen nan CS50, mwen gen yon 50. Se konsa, bagay la bèl sou ki sa sa a fonksyon kreye fè, se ke li retounen egzanp lan, oswa nan ranje, ki li te kreye nan tablo a, e konsa Lè sa a, ou sere ke nan yon varyab, ak travay ak li pita. Ou ka chanje alantou li, ki Mwen pral montre yon egzanp sou. Remake mwen pa t ' gen ou presize ID a, paske depi li se nan PrimaryKeyField, li pral otomatikman kantite li si ou pa presize li. Epi, an reyalite, pwobableman ou pa ta dwe presize li, paske ou ta ka aksidantèlman batr ID yon lòt moun nan. Epi ou vle fè asire w ke li nan inik. Pi plis nan Se konsa, aktyèlman, bagay ki komen ou vle fè, se pwobableman chwazi soti nan baz done a yon fwa ou gen yon anpil nan enfòmasyon nan la. Se konsa, si ou vle jwenn tout bagay, se konsa sa ki egal a zetwal nan chwazi nan men elèv deklarasyon, li ta jis pou student.select. Apre sa, ki pral ba ou tounen yon etalaj ak tout elèv la objè nan li ke ou repekte sou ou vle. Ou ka jwenn bagay sa yo soti nan li. Ak pi fò nan tan an, ou pa sèlman vle fè chwazi, ou aktyèlman vle presize yon bagay. Se konsa, ou kapab chèn ansanm apèl fonksyon sa yo, tankou ki jan ou ta chèn ansanm deklarasyon sa yo nan SQL. Se konsa, ou kapab fè student.select () kote. nan egzanp sa a. Lè sa a,, ou kapab presize kondisyon yo, jis lè l sèvi avèk Piton nòmal Booleans tcheke bagay sa yo. Se konsa, nan ka sa a, ou vle limite sa w ap chwazi a, kote student.grade ki egal a 50, ak student.name ki egal a Esdras, se konsa ke pral jis jwenn m 'soti nan li. Apre sa, remake, youn vrèman bagay sibtil isit la se sa a, si ou vle ou presize yon ak / ak oswa yon oswa / oswa, nan Piton, ou ta nòmalman itilize, Mwen panse ke pawòl Bondye a "ak" aktyèlman, men isit la ou itilize comercial a sèl, ki se nòmalman yon operatè lojik, men nan ka sa a espesyal, jis peewee nan fason fè li, ou itilize yon sèl la comercial ou presize "ak." Sa a yon bagay ki Mwen jwenn melanje moute yon anpil, men li pa vini ke anpil nan pratik. Lè sa a,, yon fwa ou gen tout elèv yo soti nan baz done a, yon fwa ou te fè w ap chwazi ak mete ou oswa kèlkeswa sa, ou ka itilize yon bouk fortch, jis tankou nòmal nan Piton, ak nenpòt ki sòt de iterator oswa avèk nenpòt ki sòt de etalaj. Se konsa, ou ka fè, pou la nan student.select (). Whe re (Student.grade <75), e konsa volonte sa a repekte sou chak elèv nan tablo a ki gen klas ki pi piti a pase 75, ki nan ka sa a, se toujou jis m '. Lè sa a, ou ta ka fè yon bagay ki nan ki bouk, tankou voye m 'yon imèl , di m 'ki aktyèlman vire nan ansanbl pwoblèm mwen. Se konsa, yon lòt bagay ou kapab fè, se li vrèman fasil mete ajou ranje ki nan tab la. Se konsa, sonje tounen isit la, ou lè m 'antre, Mwen te pran valè a ki te tounen pa student.create, ak mwen asiyen li nan non rele Esdras. Se konsa, kounye a, ou kapab chanje a valè nan ki egzanp, jis tankou ou ta yon klas nòmal nan Piton. Se konsa, ou ka mete ezra.grade = 95 ak ki pral mete ajou kopi lokal la, men si ou aktyèlman vle komèt ki chanjman nan baz done, ou gen yo rele ezra.save, se konsa ou rele metòd la .Sove sou egzanp lan. Se konsa, koulye a, mwen gen anpil siksè chanje klas yo pwòp mwen nan baz done a. Se konsa, Lè sa a, se pou yo di ke mwen jwenn kenbe chanje klas yo m 'nan baz done a. Pwofesè Malan se pwobableman pral vle efase m 'anba klas la, ak pou ou ka rele .Efase nan egzanp metòd jis sou ke bagay. Se konsa, si ou te vle ale tounen nan sa a riban isit la, ak aktyèlman, olye pou nan voye Imèl tout elèv klas yo ki gen ki pi piti a pase 75, ou te vle efase yo, nan sa a riban ou ta ka rele s.delete egzanp. Epi bagay la trè dènye ou vle fè, se nenpòt lè ou etabli yon koneksyon, ak w ap fè ak travay ou, ou vle rele db.close, kote se ke baz done db objè ke nou te anvan. , Epi ou vle asire w ke tout bagay vin fèmen soti nan. Fre. Se konsa, kounye, mwen gen yon aplikasyon egzanp. Mwen te sòt de pre-te fè tout bagay jis se konsa ke gen pa yo pral nenpòt ki kodaj viv erè, men nou ka mache nan li epi wè ki jan ou ta ka mete Flask ak peewee ansanm, , epi fè yon app ki senp. Mwen rele l 'CS50 divage, epi li sòt de yon platfòm blog ki senp. Se konsa, premye, mwen pral kouri li ak montre sa li sanble, ak Lè sa a nou ka gade plis nan kòd la. Oke, kidonk kite a jis kouri sa a. Cool, mwen pral fè sa-a yon ti kras pi piti. Li pa trè bèl, jis paske Mwen pa t 'fè yon anpil nan CSS, men ki sa li fè sa ki, li gen sa a baz done nan posts blog, epi li ale nan tout nan yo, epi li pral montre yo nan paj la yo nan lòd a ki pi resan an. Se konsa, sa yo, se sèlman kèk posts ke mwen te sove nan baz done a. Se konsa, si nou vle kreye yon nouvo pòs, nou ka ale nan Ajoute yon Nouvo Post, epi nou ka antre nan tit la nan la pòs, se konsa yon bagay tankou, CS50 seminè. Wow, reyèlman jwi seminè a. Fre. Lè sa a, ou peze post, epi li pral redireksyon ou tounen nan paj an kay, ak Lè sa a ou ap wè ke te post la dènye te ajoute. Apre sa, nou toujou gen tout moun yo la. Se konsa, kounye, se pou yo etap nan tout nan nan Kòd ak wè kòman sa a se aplike. Se konsa, mwen panse ke nan premye bagay ki se pou yo pran yon gade nan, se aktyèlman modèl yo. Yon anpil nan tan an, lè w ap desine yon bagay, ou vle panse sou ki jan premye w ap ale nan reprezante done ou a, ak Lè sa a konsepsyon bagay alantou sa, se konsa ke tout bagay fè sans. Apre sa se aktyèlman ki jan mwen te fè li lè mwen te fè sa a, Mwen chita bò tab la ak panse, sa m 'vle nan yon pòs. Se konsa, isit la, nou gen estrikti nan menm ke mwen te mansyone pi bonè, kote nou fè db = Sqldatabase ('posts.db'). An reyalite, pwobableman ou pa vle nan kòd difisil nan baz done non ou lan. Sa ta dwe pwobableman gen yon paramèt ki nan ki estoke yon kote, petèt nan yon dosye config, men nan yon ti egzanp tankou sa a, li nan oke nan kòd difisil ke nan. Se konsa, kounye a, nou gen sa a klas Post, ki erite soti nan modèl la baz. Apre sa, li gen la, ankò, ID = PrimaryKeyField. Aktyèlman, si ou pa presize, si mwen aktyèlman te debarase m de sa a, Lè sa a, nou pral peewee pran swen nan otomatikman kreye ke jaden ID, epi li pral otomatikman fè l 'yon PrimaryKey, ki Mwen panse ke se reyèlman bon, paske anjeneral, sa a, se yon bagay ou vle genyen, men mwen renmen mete l 'nan espesyalman, jis pou mwen sonje ke li nan nan la. Men, si ou pa presize sa, ki pral dwe la otomatikman. Se sak fè, mwen gen yon dat ki se yon DateTimeField, ansanm ak tout jaden sa yo diferan, si ou gade nan dokiman an peewee, li pral ba ou yon lis diferan nan kalite nan jaden ke ou ka itilize. Pou pati ki pi, li nan analoji nan sa ou ta wè nan SQL. Se konsa, gen se yon CharField, se yon VarCharFields, TextFields, ki se pou trè long tèks, tankou yon pòs blog potansyèlman, DateTimeFields, DoubleFields, FloatFields, tout bagay sa yo tankou sa. Epi ou ka pase nan lòt agiman nan li, ki mwen pa te spesifye isit la. Di, pou egzanp, ou pa t 'vle pèmèt de pòs yo gen menm tit la, ou te kapab presize yon bagay tankou inik = Vre, e ke sa a jis yon paramèt siplemantè nan jaden an ke lè li compiles li desann nan SQL a, li pral presize ke li gen yo dwe inik. Ou kapab tou presize yon bagay tankou pa nil ak tout lòt bagay sa yo nòmalman ou fè nan SQL. Se konsa, sa a se yon trè senp modèl ki gen dat la. Avi isit la, nan DateTimeField a, Mwen espesifye sa default la se. Mwen espesifye li nan dwe datetime.datetime.now, paske yo te wout la ki sa a vin evalye, li aktyèlman evalye datetime.now an lè li vin mete nan baz done a. Mwen panse ke, Mwen ta gen a doub tcheke sa a, men si ou te fè yon bagay tankou sa a, Lè sa a, li ta aktyèlman evalye ke yon fwa, ak Lè sa a dattim nan ta toujou gen menm bagay la. Se konsa, jis si w ap fè yon bagay ak datetimes, doub chèk ke li nan evalye lè aktyèlman vin eleman, oswa lòt moun ou ta ka dwe bay konfizyon. Tit la se jis yon CharField, ki gen yo gen plis agiman ou ka pase nan ki espesifye egzakteman konbyen tan ou vle li nan dwe, men isit la, li pa t 'reyèlman gen pwoblèm. Ak tèks a pwal tèks la nan pòs la tout antye, e ke k ap pase yo dwe yon Textfield jis paske ou vle yo ki pèmèt li nan dwe yon fisèl bèl lontan. Lè sa a, nou gen sa a Meta souklas ki jis presize ke nou vle baz done a kote sa a se aktyèlman louvri moute nan yo dwe objè a db ke nou gen isit la. Epi bagay pase a nou gen isit la, se jis sa a fonksyon ke nou ap ale nan itilize soti nan app prensipal nou an inisyalize baz done a pou konekte avèk li, ak Lè sa a yo kreye tab la Post. Koulye a, kite pou yo gade nan app a prensipal tèt li. Se konsa, yon sèl sa a se byen yon ti jan pi long pase sa yo ke nou te wè anvan, men èspere ke pa twò move. Se konsa, kite m 'yon ekstansyon pou sa a soti. Oke. Se konsa, remake ak tèt la mwen enpòte yon pakèt antye nan lòt bagay soti nan Flask ke nou pa gen reyèlman wè anvan. Ak èspere ke, nou ka ale nan chak youn nan sa yo youn pa youn epi pale yon ti kras plis enfòmasyon sou yo, Ranje pa egzanp. Se konsa, nou gen Flask a, ak render_template a, ki nou te wè anvan, sa a objè demann, ki pral vini lè nou gade nan ki jan fòm nan ke mwen te ki montre aktyèlman travay. Redirect, ki pèmèt ou redireksyon tounen soti nan Kreye nouvo Post la do nan Homepage orijinal la, ak Lè sa a URL, ki se yon bagay ki pèmèt ou konnen ki kote sou mòn lan sit yon paj an patikilye se. Se konsa, lè sa a, pwochen an bagay m 'fè, se mwen enpòte tout enfòmasyon ki soti nan la Modèl dosye ke nou te jis gade nan. Epi, yeah. Se konsa, yon lòt bagay nouvo ki vini moute lè w ap fè fas ak, espesyalman bazdone, se ke ou ka presize yon fonksyon ki vin rele anvan chak demann, ak fonksyon ki vin rele apre chak demann, lè l sèvi avèk sa a dekoratè fonksyon app.before demann. Se konsa, sa a pral jwenn egzekite tout kote sa a fonksyon se. Sa a pa gen yo dwe rele anvan demann, men anjeneral sa a, se yon bagay sansib yo rele li. Ou ka presize tou sa fonksyon ou vle jwenn rele a, Se konsa, mwen espesifye initialize_db sa a fonksyon ki nou te gen tounen nan la Modèl dosye, se konsa anvan chak demann, ou vle pou konekte avèk baz done a. Gen de diferan fason ou kapab fè sa. Ou ka fèapp., Mwen kwè li nan after_request. Apre sa, diferans ki genyen ant after_request ak teardown_request, se ke after_request pral sèlman rive si demann lan aktyèlman te valab. Se konsa, sèlman si la demann te gen siksè, si pa gen anyen ale mal, men teardown_request k ap pase nan ka a nan yon siksè demann, oswa nan ka a nan yon erè. Se konsa, anjeneral, ou vle yo sèvi ak teardown_request, sof si ou vle fè yon bagay, espesyalman diferan nan ka a nan yon erè. Men, jis pou fèmen baz done a, si li reyisi oswa si li echwe, nou fè ou vle dekonekte soti nan baz done a. Se konsa, sa yo rele, db.close sou objè a db. Remake teardown_request nan pran nan yon eksepsyon. Se konsa, ou ka tcheke si te gen aktyèlman yon erè lè li te fèmen desann, men isit la, èspere ke, gen yo pa yon lot antye nan erè, se konsa nou ap jis sòt de inyore sa. Oke, ak rès la nan li se pa twò move. Se konsa, lè nou ale nan paj an kay, nou rann sa a Modèl home.html ki pral louvri leve. Pas la se nan pòs egal a, e ki sa sa a fè se, sonje nou gen pòs sa a modèl, se konsa nou chwazi tout poto yo, ak Lè sa a yon lòt bagay ou kapab fè, ou ka presize kloz nan KI KOTE, ou ka presize yon lòd pa, e konsa nou pran tout nan poto yo ki jwenn chwazi, ak Lè sa a nou lòd yo pa nan post.date.descending. Apre sa, ki pral presize, lè yo aktyèlman soti, yon sèl la ki pi resan pral trè premye yon sèl. Lè sa a,, nou konsa, nan modèl la home.html, kidonk kite a aktyèlman louvri moute ki Modèl reyèlman rapid, ak pran yon gade nan ki jan ki nan travay. Lè sa a se pa gwo HTML, men èspere ke, nou ka konsantre sou Piton a. Se konsa, gen nan yon ap mennen nan Add New nan Post, ak kidonk sa a presize wout la nan flakon an ke nou defini, ki se dwa isit la. Sa a se nouvo wout la pòs, epi nou presize ke moute isit la. Se konsa, ki se yon lyen ki pral lè sa a ale ak sa yo ki wout ki nan sèvè a Flask. Bagay la plis enteresan se sa a pou riban isit la. Se konsa, nou presize ke sa a pòs paramèt ki te pase nan an fonksyon render_template, pou chak pòs nan la a post objè ki vin pase nan. Nou vle enprime soti tit la post, nan H1, Lè sa a, pi ba a ak, nou vle enprime soti tèks la pòs ki nan yon paragraf. Ak isit la, nou kapab aktyèlman rele yon fonksyon Piton, pou nou ka rele strftim, ST-RF-tan, epi ou ka pase nan fòma fisèl la ke ou vle enprime done yo soti nan. Se konsa, li la se trè bèl ke ou ka aktyèlman rele fonksyon sa a Piton soti nan isit la. Ou pa dwe fè fòma a sou bò kontwolè, paske reyèlman, fòma dat la se yon bagay ki ou vle fè fas nan View. Apre sa, tout moun sa yo pousan bagay sa yo se pa super enpòtan. Si ou gade moute dokiman an pou fonksyon an strftim nan Piton, li presize tout bagay sa yo bagay sa yo, men sa a ki jan, lè nou te kap nan paj an kay isit la, li fòma sa a ak yon bèl dat, epi li espesifye AM oswa PM, men nòmalman, si nou pa t 'gen sa a isit la, ou pral pwobableman jwenn kèk fatra dat sa a pa t 'gade trè bon. Lè sa a, nou presize an post.text, ak mwen te kapab te mete yon koup la liy kraze isit la, jis yo mete kèk espas ant chak pòs. Se konsa, mwen panse ke pi enpòtan an bagay nan egzanp sa a, se ke ou ka sèvi ak sa a pou riban. Lè sa a se analoji nan bagay ou ka fè nan PHP. Ou ka repekte nan, tout bagay vin te pase nan, e konsa, olye pou yo gen fè kopi / keratin, kopi / keratin tout HTML a, ou jis gen yo ekri li yon fwa, ak Lè sa ou ka repekte sou tout nan poto yo. Lè sa a se yon bagay komen ki ou vle fè, lè ou gen yon anpil nan done, se ke pou tout bagay nan done ou a, ou vle fè yon bagay menm jan an. Lè sa a,, jis sonje, ke lè ou vle enprime soti yon bagay klèman nan HTML a, ou sèvi ak aparèy òtopedik yo doub isit la, men Lè sa a lè ou vle ou presize kèk enfòmasyon sou yon kondisyon, oswa sou yon pou riban, ou itilize bracket a pousan. Se konsa, pral tounen nan Piton a Kòd, se konsa ke eksplike sa k ap pase nan prensipal la wout, lè nou ale la, li jis montre tout nan posts, men Lè sa a kesyon an se, ki jan nou aktyèlman jwenn posts nan baz done a, ki se yon ti jan ti kras pi plis enteresan. Se konsa, lè ou klike sou New a Post lyen, ki nou te wè isit la, li redireksyon yo ou nan fòm sa a. Epi sa a, jis yon apèl nan senp yo fonksyon render_template, ki Lè sa a pase nan post la nouvo nan HTML fòm. Se konsa, kite a pran yon gade nan sa. Se konsa, yon sèl sa a se trè senp. Li te gen yon fòm HTML ki senp, ki pral gade yon ti jan yo konnen yo, ki baze sou fòm yo nan CS50 Finans. Se konsa,, nou presize isit la, aksyon an. Ak isit la, si w ap travay ak PHP, nòmalman, li ta dwe yon bagay tankou, create.PHP, men isit la nou aktyèlman presize yon wout nan sèvè a Flask. Se konsa, sa a koresponn wout nan wout la kreye ke nou gen isit la, ki nou pral antre nan nan yon dezyèm fwa. Se konsa,, nou presize ke li nan yon metòd post, paske nou vle voye fòm sa a done, epi anjeneral lè w ap voye done ki sòti nan yon fòm, ou ta ka vle itilize yon demann pòs, jis pou ou pa fini ak sa a gwo, maladwa URL. Men, ou ta ka tou sèvi ak yon demann JWENN, epi yo pase li nan ak varyab routage, men pou fòm, li nan bèl a yon demann pòs isit la. Se konsa, lè sa a, jis tankou ou ta fè ak HTML ak PHP, ou ka presize sa yo entrain tèks, epi ou ka presize non an nan yo, e ke sa a non an ki pral jwenn te pase nan objè a demann nan Flask. Lè sa a, nou te yon soumèt bouton ki di Post. Ak isit la, Post se non an nan la bouton, paske li nan yon pòs blog, men isit la, pòs se metòd la demann. Se konsa, moun yo se menm bagay pawòl Bondye a men aktyèlman gen rapò. Yeah Pral tounen nan kòd la Piton, lè nou rele kreye nan metòd, remake isit la ke ou kapab aktyèlman presize nan wout la metòd yo demann ke ou vle aksepte, e konsa isit la, mwen presize ke mwen sèlman vle aksepte yon metòd Post. Se konsa, si mwen aktyèlman eseye vizite paj la dirèkteman, ki se lè l sèvi avèk yon demann JWENN, li pral fè m 'konnen "Metòd pa pèmèt." Se konsa, ou gen paj, sòt de tankou sa a kreye paj, ki se sèlman mwen reyèlman lè l sèvi avèk kòm yon fason pou fòm nan yo debarase soumèt, ou ka presize ke ou pa fè sa vle moun yo pral kapab ale la dirèkteman atravè yon demann JWENN, oswa si ou pa t 'vle, pou kèk rezon, se yon Post demann, ou ta ka jis presize JWENN isit la, men nan egzanp sa a, nou jis vle Post demann lan ale deyò. Se konsa, lè se create_post rele, lè nou vizite ki via Post demann lan, chak fwa ou ale nan yon patikilye wout, gen nan demann sa a objè, epi nou te gen yo enpòte demann nan tèt la anpil, men gen nan demann sa a objè ki vin pase nan, epi ou kapab jwenn aksè nan fòm done yo, ki pral otomatikman jwenn plen lè ou voye mande ki sòti nan yon fòm. Lè sa a,, ki sa mwen panse se vrèman fre, se ki nan fòm objè a jwenn te pase an, se jis yon diksyonè Piton ki gen, si ou access-- se konsa isit la, se pou m 'rale moute HTML a akote l, jis konsa ou ka gen sa kòm yon referans, wi, se konsa non sa yo ke nou presize isit la pou jaden yo diferan, se konsa tit la ak tèks la, nou Lè sa a, jis itilize sa yo sou isit la kòm endis nan fòm done yo. Se konsa, sa a, se super pratik. Se sak fè nou rele post.create, ki pral kreye ak otomatikman Insert sa a nouvo pòs objè nan baz done a. Apre sa, mwen panse ke sa a kreye fonksyon isit la se yon egzanp vrèman fre nan ki jan pwisan Flask se ak ap travay ak sa a, paske si ou te fè yon bagay nan PHP, ou ka gen yo fè yon anpil nan validation, ou ta gen Lè sa a, etabli yon koneksyon baz done, ou ta gen Lè sa a, egzekite rechèch la SQL, men isit la nou jis gen sa a bèl post.create, ki sa nou kapab lè sa a jis jwenn enfòmasyon an soti nan objè a demann, ak Lè sa a pase li nan yon nouvo afiche ke nou ap kreye. Lè sa a,, dènye a trè bagay nou vle fè, se yo redireksyon nan itilizatè tounen nan kay la. Se konsa, nou sèvi ak sa a Flakon redireksyon fonksyon. Apre sa, yon bagay ke nou pa te wè anvan, te fonksyon URL sa a. Se konsa, URL la pou fonksyon pèmèt ou pase nan aktyèlman non an nan yon fonksyon nan kòd Piton ou, olye ke wout la patikilye ke li nan nan. Se konsa, mwen te kapab gen menm jan fasil reyorante resous yon itilizatè yo koupe, ki ta voye li tounen lakay, men lè l sèvi avèk URL la pou fonksyon se bèl, paske si ou chanje a kote kote bagay sa yo ye a, kidonk kite a di ke mwen chanje a lakay yo nan fèt nan / Home olye de sa, sa a ta toujou Lè sa a, retounen / kay la, paske aktyèlman ale ak sanble moute non an nan fonksyon an, epi li pral ba ou tounen URL la pou sa. Se konsa, sòt de sou mòn lan sipozisyon ke w ap plis chans yo chanje kote bagay sa yo ye a, pase non yo nan fonksyon yo. Ou kapab sèvi ak sa a vrèman bèl URL pou fonksyon. Apre sa, yon sèl bagay yo dwe okouran de ki se yon ti jan difisil, se ke ou panse ou ta ka jis rele redireksyon sou URL la pou, men aktyèlman tout nan wout yo gen retounen kèk sòt de tèks ak HTML, kidonk, ou gen aktyèlman yo retounen apèl la redireksyon. Sinon, ou pral jwenn yon bagay valab sou pa retounen yon fisèl, paske tout moun sa yo gen retounen HTML a ou aktyèlman vle rann. Se konsa, lè ou rele redireksyon a, li redireksyon yo ou nan paj la, men li aktyèlman retounen HTML a ou bezwen egzekite ki redireksyon. Tounen nan paj an kay. Se konsa, nou gen de opinyon sa yo diferan. Nou gen gade nan kay la. Oswa, Mwen devine mwen ta dwe di modèl. Nou gen de modèl sa yo, modèl nan kay ki montre tout nan posts nou an, epi Lè sa a, nou gen bagay sa a anons, ak ki lè ou klike sou post la, li ale nan yon wout nouvo nan flakon an, men sa pa nesesèman fè wout gen yon modèl koresponn lan. Ou pa gen yo wè anyen, men ou ka toujou gen travay sa a pral sou dèyè sèn nan. Lè sa a, ou jwenn reyorante resous do nan paj la lakay yo. Ak definitivman, li fasil nan travay nan kèk CSS joli nan modèl la , epi fè sa a gade yon anpil joli, men tout nan lojik nan prensipal ki gen la nan Piton a. Nenpòt kesyon sou sa egzanp? Mwen konnen gen yon anpil nan bagay sa yo diferan pase sou la, yon anpil nan bagay sa yo nou pa te wè anvan, men tankou anyen. Yeah. ODYANS 1: sa ou dwe fè anyen espesyal nan fwote done yo sa a, se vini nan soti nan fòm nan? Mwen remake ou jis te di "kreye," EZRA Zigmond: Yeah, se konsa sa a, se aktyèlman, sa a, se yon pwen reyèlman bon. , Ou Se konsa, kesyon an te bezwen yo tcheke, epi fè sèten ke done a se ki valab, ak fè nenpòt ki sòt de épuration a asire w ke li se ki valab, paske jan ou ka wè isit la, Mwen pa fè sa. Se konsa nou wè sa ki rive si mwen afiche yon bagay vid. Se konsa, li pral aktyèlman jis fè yon vid pòs, epi nwasi nan dattim la. Se konsa, an reyalite, ou ta pwobableman vle fè yon bagay tankou, petèt presize si tit ki egal a fisèl la vid, lè sa a pa fè sa. Oswa, sèlman fè li si tit la se pa egal a fisèl la vid. Se konsa, li fè sa ki pa aktyèlman otomatikman pran swen nan ke foubi pou ou, pou ou toujou bezwen fè sa. Yeah, bon kesyon. ODYANS 2: Èske li fwote pou piki fen? Eske ou konnen? EZRA Zigmond: Èspere ke, peewee fè sa. Mwen panse ke li ta sètènman gen yon bèl move bibliyotèk si li pa t 'fè sa. Mwen pa konnen egzakteman. Mwen ta gen fè yon gade nan nan sijè rechèch ke li pwodwi. Mwen panse ke, si mwen tape nan yon pòs blog ki sòt de gade tankou yon atak piki SQL, yon bagay tankou sa a, si sa a se tankou yon jaden modpas oswa yon bagay, ou ta ka fè yon bagay tankou sa a. Mwen panse ke ap toujou jwenn literalman afiche, men mwen panse ke peewee fè kèk sòt de épuration nan done yo anvan li aktyèlman ègzekutra li. ODYANS 1: Sa jaden tèks se fèt yo pran tèks plenn, dwa? EZRA Zigmond: Yeah, li ye. Yeah. Se konsa, mwen panse ke tout moun nan la, se konsa sa a se konpòtman kòrèk, ki pral fè sa, men mwen panse ke peewee èspere ke fè fè kèk sòt de pwoteksyon sou fen yo. Men, si ou te vle doub chèk sa, gen fason lè ou jenere yon query. se konsa ou pa bezwen egzekite li dirèkteman. Mwen ta dwe pran yon gade nan kopi dokiman yo, men ou ka aktyèlman wè nan SQL ke li se génération, ak pran yon gade nan sa a, epi fè asire w ke li se chape bagay sa yo. Yon lòt rezon ki fè ou ta ka vle gade nan SQL an ki se peewee sorti, se si bagay sanble yo dwe ale reyèlman dousman, ou ka pran yon gade ak wè sa ki li a aktyèlman fè, paske li nan pafwa fasil yo aksidantèlman ajoute nan, wout la ou ekri li, ou ka aksidantèlman genyen li chwazi baz done a tout antye premye, ak Lè sa a fè kèk operasyon sòt sou sa, lè ou reyèlman vle di ke yo chwazi yon sou. Se konsa, si bagay sa yo yo pa byen ale dwat, li nan bon pran yon gade nan demann lan ki nan aktyèlman ap resevwa pwodwi. Yeah. ODYANS 2: Lè ou fèk kòmanse, ou mete nan pò a kòm 5000. EZRA Zigmond: Yeah. ODYANS 2: Èske default la ak peewee, oswa se ke yon bagay ou kapab chanje? EZRA Zigmond: Wi, se konsa nan pò se default ak Flask. Si ou kouri li san yo pa espesifye anyen, li pral otomatikman fè sa. Mwen kwè, mwen ta gen a doub tcheke sa a, men ou ka presize ke an app.run a, Mwen panse ke ou ka fè yon bagay tankou, pò = 8080. Se pou nou bay ki yon eseye reyèl rapid. Yeah, se konsa ou ka jis presize pò = 8080, epi li pral kouri li a, ki mwen panse ke, si ou te vle kouri li sou IDE a, mwen pa te eseye sa a soti, men mwen panse ke si ou kouri l 'sou pò 8080, ou ta pwobableman kapab jwenn aksè nan sèvè a, jis tankou ou te pou sit entènèt la. Yeah, men li la fasil chanje ke si ou gen nenpòt sòt de tankou port-voye bagay sa yo ke ou bezwen fè. Nenpòt lòt kesyon? Yeah? ODYANS 1: Se konsa, mwen te wè nan ou modèl ki, menm jan ou mansyone, ou gen ou presize nan baz done pou chak objè. Ou rive konnen, fè sa ki ki fè li reyèlman fasil si ou gen anpil bagay nan baz done sklit ke ou vle pou itilize pou yon sèl app sou sit wèb ★ ke ou ka jis presize yon pakèt moun nan yo menm diferan nan modèl ou a? EZRA Zigmond: Yeah, kite m ' louvri ki moute reyèl rapid. Se konsa, ou ap di, si ou vle gen yon pakèt moun sou diferan yon bagay, petèt renmen ak elèv yo, pou kèk rezon ki fè, yon bagay tankou sa? Yeah, se konsa mwen panse ke ou toujou, chak modèl ta gen yo toujou gen jis youn baz done asiyen nan li, men si ou te vle gen modèl diferan ki te diferan objè baz done asiyen nan li, ou ta ka definitivman fè sa. Se konsa, si mwen te kreye yon nouvo, yon bagay tankou sa a, e kounye a, sa a se yon elèv ki sanble etranj tankou yon pòs blog, Mwen te kapab presize ke an baz done ki egal a db_2 isit la. Se konsa, mwen panse ke sa ka a fason prensipal ou ka fè sa. Fre. Nenpòt lòt kesyon? Se konsa, jis a fini moute yon ti kras ti jan, isit la gen kèk resous, ak glisad sa yo pral afiche sou entènèt pou ou kapab aktyèlman ale nan lyen sa yo. Resous yo pi byen yo se reyèlman dokiman an pou Flask ak peewee tèt yo. Yo ap ekri vrèman byen, mwen panse ke. Se konsa, sit entènèt la Flask se isit la, ak yo gen yon leson patikilye ki QuickStart pral mache nan menm jan an bagay sa yo ki sa mwen te mache nan tout, men si ou vle nenpòt ki sòt de revizyon nan bagay sa yo ke mwen te ale sou yo, oswa ou te panse ke mwen eksplike yon bagay nan yon fason konfizyon, yo pral gen egzanp menm jan an a. Peewee gen dokiman, ak yo gen yon leson patikilye QuickStart ki ale sou paramèt prensipal yo ke ou ta vle sèvi ak. Se konsa, bagay sa yo mwen te pale osijè de ak défaut yo inik, ak ki espesifye, kalite sa yo diferan nan jaden yo ki ou ka itilize, sa yo ki ta tout dwe la. Epitou, si ou gen kesyon sou peewee, epi ou afiche yo sou Stackoverflow, nèg la ki te fè peewee aktyèlman ale sou yo ak sou reponn moun pafwa. Si ou gen yon kesyon, èspere ke li pral kapab reponn li, paske li te ekri tout bagay la. Mwen panse ke sa a, se tout bagay Mwen te vle kouvri. Mèsi pou vini soti.