[Music kucheza] EZRA Zigmond: Hi, kila mtu. Shukrani kwa kuja nje leo. Semina hii ni "chatu Mtandao Apps kwa chupa. " Kwa hiyo, mimi nina kwenda kuwa kuzungumza kidogo kuhusu nini unaweza kutaka kutumia chupa ya kufanya programu mtandao na chatu, kinyume kwa baadhi mifumo mingine huko nje, kama Django, ambayo ni wengi maalumu. Subtitle ni "na peewee, "ambayo ni kitu sisi ni kwenda kuzungumza kuhusu jinsi kuingiliana na database SQL. Inafanya kweli ni nzuri. Kwa hiyo, hapa tu rundown ya haraka ya nini nataka kwenda juu. Hivyo, kwanza, tu slide moja kwamba kinaendelea kuwa quickstart, ambayo ni jinsi ya kupata kila kitu kuanzisha kwenye kompyuta yako. Mimi nina kwenda kuwa wakiandamana huu juu ya mitaa Mac mashine yangu, kwa sababu tu hapo ndipo mimi tumefanya hii kabla, mimi nina starehe na ni wengi, lakini hii ni dhahiri iwezekanavyo juu CD50 IDE. Hivyo, baada ya hapo, nataka kuanzisha kile chupa ni, na kuwashawishi kwa nini unapaswa matumizi yake katika nafasi ya kwanza. Kisha, mimi nitakupa haraka mfano wa nini anaweza kufanya katika chupa, mfano wa haraka ya nini unaweza kufanya katika peewee, na kisha mimi nitakuonyesha zaidi kamili mfano maombi kwamba mimi kuweka pamoja kwamba sisi Unaweza kutembea kwa njia ya pamoja. Na kisha hatimaye, katika slide mwisho, nina rasilimali baadhi kwamba ukiangalia katika online kwa maelezo zaidi. Hii si kamili mafunzo ya jinsi ya kutumia chupa. Na mimi itabidi kuondoka matumaini muda kwa ajili ya maswali. Mtu yeyote kuangalia ndani ya nchi, tu kama, kelele nje katikati kama una maswali yoyote. Hivyo haraka mambo ufungaji, kama unataka kufuata pamoja, au kama unataka kupata hii up kwenye mashine yako mwenyewe, Mimi itakuwa ni ya kutumia Python 2.7.10. Chupa anafanya kazi kwa Chatu 3, lakini mimi kama kutumia chatu 2, kwa sababu kuna baadhi fedha chatu kwamba hawana kazi na 3 bado. Kama una pip imewekwa, ambayo ni meneja chatu mfuko, Nadhani kama chatu yako ni zaidi au sawa na 2.7.9, una hiyo imewekwa tayari, ni super rahisi kufunga vifurushi haya. Unaweza kufanya pip kufunga Chupa, pip kufunga peewee, Kwa kawaida una kuendesha sudo tu ili ruhusa ya kufanya kazi nje. Na, kama wewe ni kutumia super toleo la zamani wa chatu, Mimi kupendekeza kuhuisha chatu yako, au kutumia EasyInstall kufunga pip. Hivyo, swali la pili ni, ni nini chupa? Na mimi nadhani, kwanza swali busara mimi najiuliza kwa muda mrefu ni, ni nini programu mtandao? Kwa sababu hiyo ni neno kwamba mimi kufikiri ni kutupwa karibu sana kwamba mimi si kweli kujua. Na nadhani kwamba bora mfano wa nini programu mtandao ni, kweli ni CS50 Fedha, ambapo ni kweli si tu tovuti, lakini ni kitu ambacho inaweza aina ya kiutendaji na. Kuna akaunti za watumiaji na kila aina ya mambo mbalimbali. Kwa hiyo, ambapo hasa wewe kuteka mstari kati ya kile ni tovuti, na ni nini programu ya mtandao, ni aina ya holela, lakini mimi nadhani wazo, ni kitu zaidi ya tovuti na ni maombi muhimu. Hivyo, chupa ni mfumo wa kufanya programu mtandao kwa kutumia chatu. Na natumaini ifikapo mwishoni ya hii, mimi itakuwa kuwashawishi kwamba unaweza kweli kuandika kitu kama CS50 Fedha kwa kutumia Python, ambayo mimi kama mengi zaidi kuliko PHP, binafsi. Hivyo, chupa ni, wao kuwaita microframework, na ambayo, maana yake ni sana rahisi, lakini extensible. Hivyo, ina nini unahitaji tu, lakini kama unataka makala zaidi, ni rahisi kuwaleta katika. Lakini kwa sababu tu ni microframework, hana maana kwamba ni tu kwa ajili ya miradi midogo. Nina kiungo hapa kwamba anasema kwamba Obama kutumika chupa mwaka 2012 kwa kampeni zake tovuti, ambayo hopefully, ni kitu cha mhuri. Lakini jambo lile mimi kweli kama kuhusu chupa ni kwamba, haina kweli kufanya aina yoyote ya maamuzi kwa ajili yenu. Tu kwa sababu tuko kuzungumza juu ya programu mtandao, Mimi na kulinganisha kwa Ruby juu ya Reli na Django, wote wawili ambao ni mfumo wa kubwa, lakini wawili hao kufanya mawazo kuhusu jinsi gani unataka kuingiliana na database, jinsi gani unataka kuwasilisha yako maoni, na wao uko dhahiri masuala nzuri ya jambo hilo. Kwa mfano, Ruby juu ya reli ina mfumo huu kazi rekodi, ambayo kwa kweli ni nzuri njia ya kiutendaji na data, lakini kama unataka kutumia Ruby juu Reli, wewe ni aina ya amefungwa katika hiyo. Lakini pamoja na chupa, kama mimi itabidi kuonyesha kwa peewee, unaweza kutumia aina yoyote ya database unataka, na unaweza tu kuvuta kwamba katika kama ugani katika chupa. Hivyo ndiyo sababu mimi kwa kweli kama chupa, ni kwamba haina kufanya mawazo kwa ajili yenu kulingana na mambo huna haja kweli. Hivyo, kwa nini matumizi ya chupa? Faida ni, ni tu ina kweli makala ya msingi kujengwa ndani yake ambayo unahitaji. Hivyo, huna kuwa na wasiwasi kuhusu kuelewa rundo zima la mambo kwamba huna kweli wanahitaji. Wewe huna kuwa na wasiwasi kuhusu kugeuka mbali makala kwamba huna kweli wanahitaji. Na, kama nilivyoeleza, ni super rahisi kuongeza katika upanuzi wa mambo kwamba huna haja. Baadhi yao, chupa ina msaada wao wenyewe kwa ajili yake. Hivyo kuna kitu kinachoitwa chupa admin, ambayo vioo kwamba admin jopo kwamba Django hutoa, ambayo inatoa nzuri Visual njia kusimamia tovuti yako. Lakini tena, kama wewe ni kufanya kitu rahisi, pengine hawana haja admin kubwa jopo, hivyo nadhani hiyo ni super nzuri. Na hasara ni kwamba una uwezo kidogo nje ya boksi. Hivyo, wakati wewe kwanza kufungua chupa, na katika mpango wako chatu, wewe tu aina kutoka chupa kuagiza *, au chochote, huna hasa kupata yote ya Makala unaweza kutaka. Na hivyo kuwa na zaidi waziwazi orodha makala unataka. Hivyo hiyo ni moja hasara, lakini mimi wanadhani kuwa kwa ajili ya kujenga ndogo mtandao programu kama mimi nina kwenda kuwa kuonyesha wewe, hiyo ni kweli si tatizo. Na nini jambo la mwisho ni anapaswa kusema, ambayo ni typo, ni kwamba kuna watu chini sanifu mikataba kwa jinsi ya kutumia chupa, kwa sababu tu kuna si kama walio wengi watu kuitumia kitaaluma ikilinganishwa na Django. Hivyo, kama wewe kuangalia kitu kama, "jinsi gani mimi kufanya x" katika Django, pengine utasikia kupata hiyo. Kuna kubuni nzuri ruwaza unaweza kutumia, lakini kwa chupa, ni aina ya kwenda njia yako mwenyewe, tu kwa sababu ni pretty ndogo maktaba. Basi hizo hasara, lakini nadhani kwamba bado ni maktaba nzuri ya kutumia. Basi hebu tu kuruka haki katika chupa. Hii ni dhahiri si kwenda kuwa mafunzo kamili, lakini ni kukupa wazo ya jinsi ya kuunda vitu, na hivyo kujisikia vizuri kwenda mbali na kuangalia nyaraka na kutafuta zaidi. Hivyo, napenda kufungua kweli rahisi mfano kwa mara ya kwanza, na kuonyesha nini kwamba Inaonekana kama, na kisha tutaweza kuvunja chini kidogo zaidi. Hivyo hii hapa, napenda kupata mbio. Kwa hiyo, mimi sasa wana maombi yangu mbio. Mimi nina kwenda kufungua Safari, na ni mbio juu ya mwenyeji wangu mitaa. Hivyo mimi nina kwenda tu kufanya hili kubwa. Lakini localhost: 5000 Na hivyo, hivi sasa, kila hii haina ni, wakati wewe kutembelea tovuti, Prints nje "Habari chupa," ambayo si super muhimu, lakini nadhani ni baridi kwamba katika hii file kidogo hapa, tuna mtandao wa kompyuta mbio kwamba ni uchapishaji nje kitu. Hivyo, hebu kweli kuangalia katika kanuni kwa ajili ya pili, na kuvunja chini kidogo. Ni ukubwa nzuri kwa kila mtu hapa? Hivyo, pengine, wewe ni kiasi fulani starehe kwa kutumia chatu. Mimi nina kuchukua kwamba tunaweza kuangalia chatu na kusoma kwa njia hiyo. Kama una maswali yoyote kuhusu chochote, siwezi pia kwenda juu kwamba. Hivyo mstari wa kwanza, kutoka chupa, sisi kuagiza, chupa na mji mkuu wa "F" ambayo ni aina ya yote vipengele muhimu kwamba unahitaji. Kila wewe ni kuandika faili na kutumia chupa, wewe ni kwenda unataka kuagiza kwamba, sababu tu kwamba ina mambo yote kuu. Jambo la pili sisi kufanya, ni sisi wito huu chupa kazi, tu kujenga programu kitu, na uko Daima kwenda kutaka kufanya hivyo. Na kisha, kuruka chini kwa chini kwa haraka, sehemu hii hapa ni, 'if_name _ == "_ main_"' ambayo ni aina ya chatu mkataba. Hivyo hii tu kutekeleza kama wewe kukimbia faili hii moja kwa moja kwa kutumia chatu. Kisha, tunatoa wito app.run, ambayo itakuwa kweli kuanza programu wanakwenda. Hivyo, hiyo ni muundo kuu kwamba itabidi katika maombi yoyote chupa, ni utakuwa na hii programu = Flask (_name_), na kisha app.run. Kwa hiyo, mambo mawili ambayo nina humu, ni kile tunachokiita njia. Kwa hiyo, hebu majadiliano juu ya routing kidogo zaidi. Mimi itabidi kurudi nyuma na slide. Hivyo kimsingi zaidi dhana katika chupa ni routing. Na ni wazo kuwa wewe kuwapa kazi katika Python Hasa kwa anwani kwenye mtandao ukurasa wako. Hivyo, wakati wowote unataka kujenga njia mpya, wewe kutumia hii @ app.route kazi decorator. Hivyo, kama wewe ni unfamiliar na kazi decorators katika Python, ni dhana hii kwamba inakuwezesha kuchukua kazi na surround yake na kitu kingine. Hivyo kweli, nini decorator hii haina, ni kwamba inachukua kazi chini yake, na inaongeza habari zaidi nyingine, ila tu kile chupa kweli haina kufanya kutokea ni si super muhimu, lakini nini ni muhimu, ni kwamba kabla ya njia, wewe kuweka hii @ app.route, na kisha pepe ya njia, hivyo kufyeka ni nini sisi aliona wakati sisi tu kufungua ukurasa wa mtandao. Hivyo hiyo ni Mzee. Ni tu njia kufyeka. Na kisha una kazi hii. Jina la kazi inaweza kuwa chochote unataka. Ni hana na lazima kufanya na njia. Na kisha, chochote kurudi kazi wa, kazi lazima kurudi kamba. Na kamba ambayo yanaweza vyenye HTML au kitu chochote, na kwamba ni nini hasa kupata alirejea mtandao browser yako kama HTML, na itakuwa kutoa hiyo. Hivyo hii ni sawa kificho hiyo ilikuwa kutokana na mfano kwamba mimi tu mbio, hivyo wakati sisi kutembelea kufyeka, ni wito kazi Hello World, ambayo tu anarudi kamba, Habari chupa, na kwamba anapata kuchapishwa kwenye screen. Hivyo kuna mfano mwingine, ambayo ni, wakati wa ziara / hello, Prints nje Habari Neno, ambalo lazima kweli kusema, Hello World, lakini hebu kujifanya kuwa alikuwa kukusudia. Basi hebu vuta kuwa hadi halisi haraka. Hivyo kama wewe kwenda kwenda kwenye localhost / hello, itakuwa sasa magazeti kitu kingine. Hivyo hiyo ni mfano tu wa haraka wa jinsi unaweza kuunda njia mbili tofauti. Kwa hiyo, hadi sasa hii si super muhimu, kuna si mengi yote unaweza kufanya, unaweza tu kufanya yote kwa kuwa kurasa tofauti HTML, na wakati wa ziara hasa ukurasa tu mizigo ukurasa. Basi hebu angalia baadhi zaidi mambo muhimu unaweza kufanya. Kwa hiyo, jambo moja kwamba unaweza kuwa niliona katika mfano kwamba mimi vunjwa up, ni kwamba nilikuwa app.run (utatuzi = Kweli). Na hivyo, jambo hili Hoja utatuzi gani, ni kwamba wakati wewe kukimbia mtandao wa kompyuta yako, wakati uko katika maombi yako, kama mabadiliko ya faili, itakuwa moja kwa moja upya kompyuta. Na hivyo si kweli kuwa kwa kuanzisha upya chatu, ambayo ni super muhimu. Siwezi kuonyesha kwamba. Hebu vuta hadi kificho wangu kwa typo ndani yake, na kujifanya kuwa typo ilikuwa kuweka huko makusudi kwa madhumuni mazingatio. Basi hebu kuongeza hii nyuma katika. Hivyo sasa anasema Hello World. Mimi atayaokoa. Na kama sisi kuvuta nyuma hadi wastaafu, utasikia kusema kwamba ni kuanzisha, kwa sababu wanaona mabadiliko, na hivyo sasa wakati sisi upya ukurasa huu, itakuwa magazeti nje kitu sahihi. Hivyo utatuzi ni super muhimu kwa ajili hiyo. Pia, kama una aina ya ajali, hivyo napenda kufanya ajali hii ya maombi kwa kuwa ni asirudi kamba. Hivyo, hebu tu kuwa ni kurudi Hakuna kwa sababu fulani. Na kisha wakati mimi kutembelea hii ukurasa, itakuwa tu ajali, lakini seva haina tu ajali, ni kweli anatoa nyuma super muhimu kuwaeleza ya kila kitu ambacho potoka. Na nini ni nzuri, ni kwamba katika hatua yoyote katika hii kuwaeleza nyuma, unaweza kufungua shirikishi shell hapa, na aina ya magazeti nje nini vigezo unataka kuangalia. Na hivyo debugging ni kweli muhimu kwa ajili ya kuhesabia kinachoendelea na yako server, badala ya kuona tu kitu katika PHP kama 500 ndani hitilafu ya seva, ambayo ni super maana. Jambo moja kuwa na ufahamu wa, ni kwamba kama wewe kuweka programu yako online hivyo ni wazi kwa umma, wewe kamwe wanataka kuondoka Debug mode juu, kwa sababu watu wanaweza kweli kutumia console kwamba mimi ilionyesha wewe kutekeleza kificho holela. Ili waweze magazeti nje kama yoyote codes siri una huko, wanaweza kuangalia hasa jinsi tovuti yako ni kazi. Hivyo ni muhimu kweli kweli kwa ajili ya kupima, lakini daima kuhakikisha kuchukua nje kabla kuchapisha kitu chochote online. Hivyo wakati wewe ni kutumia kitu kama PHP, kuna wazo hili uweze kupita habari kati ya kurasa za mtandao kwa kuweka maelezo kwa kweli katika URL, ambayo ni ombi GET, lakini katika chupa, unaweza kweli kufanya kitu aina ya kama kwamba, kwa kuwa njia ambayo ina kutofautiana kama sehemu yake. Hivyo kama wewe kuangalia hii mfano kwenye screen hapa, tuna njia hiyo ni ('/ hodi /'), na hivyo, kama wewe kutembelea / hodi / kitu fulani, kitu ambacho ni kwenda kweli kupata kujazwa ndani ya jina kutofautiana. Na taarifa kwamba kazi kuja na njia hiyo ina kuchukua katika vigezo jina, hivyo kwamba itakuwa kweli kupata kupita katika kazi. Na kisha, mara moja uko ndani ya kazi kwamba, unaweza kutibu kwamba kama kawaida chatu kutofautiana, na hivyo basi, itakuwa magazeti nje Habari, na ni kujaza katika jina kwa kutumia baadhi kamba formatting. Hivyo kwa kuongeza sehemu kutofautiana kwa routing, matumizi pembe mabano kuashiria. Na kwa hiari, unaweza kutumia kile kinachoitwa kubadilisha fedha. Na hivyo, kama wewe kuweka hii Dokezo kwa matumbo, unaweza kutaja kwamba ni int, au kuelea, au njia, na itakuwa moja kwa moja kubadili hilo. Unaweza pia kufanya uongofu ndani ya kazi chatu, tu kwa kutumia kutupwa, lakini wakati mwingine kama unataka kuhakikisha kwamba ni int, unaweza kuweka kwamba kubadilika utawala katika huko. Basi hebu vuta hadi mfano ya baadhi ya sheria kutofautiana. Hivyo hapa, hii ina sawa ya msingi muundo na kutoka chupa kuagiza Chupa, programu = chupa (_name_), na kisha ni mbio mwishoni. Tuna hizi mbili tofauti njia kutofautiana hapa. Na moja ya kwanza, ni moja kwamba mimi ilionyesha katika slide, ambayo ilikuwa kwamba tu inachukua katika jina kamba na itakuwa magazeti nje Hello, Jina. Na kisha, pili mtu anatumia kubadilika. Hivyo hii moja kwa moja kubadili kwa int, na kisha mara mbili int, na magazeti kwamba nje. Na, hatufanyi aina yoyote ya kubadilika ndani yake kwa sababu chupa inachukua huduma ya kwamba. Basi hebu kupata hii kukimbia. Wakati una chupa maombi mbio, unaweza Kudhibiti-C nje yake kuacha server mbio. Na kisha mimi inakwenda vigezo. Basi hebu kwenda kwa localhost / hodi / ezra na hopefully, hii kusema hello kwangu. Hivyo alichukua kwa jina langu, katika kutofautiana Njia, ukaijaza katika hapa. Hivyo mimi itabidi pia kuonyesha haraka Mfano wa mara dufu. Hivyo kama wewe kwenda / mbili / 3, itakuwa magazeti nje 6. Hivyo hii alichukua huduma ya kubadilika kwa ajili yetu. Hivyo unaweza pia kufanya hivyo kwa kuelea, na kitu maalum, kama unahitaji kutaja kitu kama njia, ambayo inakuwezesha ni kukubali mikwaju, lakini kwamba haipaswi kawaida kuwa suala hilo. Hadi sasa tuna, bado wana tu imekuwa kurudi masharti, ambayo si ya kuvutia sana. Tunaweza kweli kurudi halisi HTML kamba. Hivyo katika kanuni tunaweza kuingiza kitu kama b-tag kufanya hivyo ujasiri, lakini wengi wakati wewe si kweli wanataka kuwa kuandika HTML code katika Python kanuni yako. Ni kweli anapata messy, na siyo wakati mzuri. Chupa inaruhusu sisi kutenganisha HTML katika kile kinachoitwa Kigezo, na hivyo kama wewe ni kufikiri katika suala la mfano MVC kwamba wewe ni ukoo na, hopefully, kutokana na kufanya kazi kwa CS50 Fedha kidogo, unaweza kufikiria mafaili chatu kuwa ni zaidi ya Mdhibiti, ambapo wao ni mazungumzo na chochote data mfano unaweza kuwa. Na kisha wao ni wito nje kwa Maoni na kupita maelezo kwa kuwa View kujaza habari katika HTML kwamba inahitaji. Na nini sisi kuwaita wale Maoni Matukio ni katika darasa. Hivyo chupa anatumia chatu mwingine moduli kwamba itakuwa moja kwa moja kufunga wakati wewe PIP kufunga Chupa inayoitwa Jinja, ambayo inakuwezesha kuongeza hizi annotations kwa HTML kwamba unaweza kuona kwenye screen, ambayo inakuwezesha kuweka katika mambo kama conditionals, na loops katika HTML. Hivyo inaonekana kidogo kama jinsi wanaweza kutumia PHP ndani ya faili HTML, lakini hili ni jambo jema wakati chupa server mtumishi up faili HTML, itakuwa kukimbia injini huu templating na Hazrat kupitia huu na kujaza mambo katika. Hivyo chupa ina render_template kazi uweze kuona chini hapa. Na hivyo wakati wewe kutembelea ukurasa huu, ni ingekuwa atatoa hii hello.html Kigezo, na kisha kujaza ukurasa huu HTML. Basi hebu kukimbia tu halisi huu haraka, na kuona nini inaonekana kama, na kisha nitakwenda kupitia kidogo kwa undani zaidi. Hivyo, Matukio yako ni kwenda kwenda katika Matukio folder. Itakuwa moja kwa moja kuangalia ndani ya Matukio folder kwa kuwa Kigezo. Basi hebu kufungua hili. Kwa hiyo, mimi itabidi kukimbia Templating mfano. Hivyo kama mimi kwenda / hodi / ezra, ina hii ya kutisha, obnoxious marquee tag kwamba mimi kuweka katika. Nzuri sana, nguvu sana. Mimi ni shabiki mkubwa. Lakini kile kinachotokea kama Mimi tu kwenda, / hodi? Hivyo tu anasema Hello World. Sikuwa kupita jina, na ukaijaza ni moja kwa moja. Basi hebu angalia jinsi gani alifanya hivyo, na jinsi tunaweza kujikwamua kwamba marquee labda. Hivyo hapa, hii ni aina ya mfano kuvutia ya, kama wewe ni ukoo na jinsi ya kubadili kauli kazi katika lugha. Kusema hii ni aina ya kama, aina ya kuanguka kwa njia ya, ambapo kwa kweli zinatokana mbili njia tofauti tofauti kwa kazi moja. Hivyo sisi ambatisha / hodi njia na / hodi / jina njia ya Habari, na sisi kutaja using-- chatu inakuwezesha kutaja chaguo-msingi kazi arguments-- hivyo kama hakuna jina, hivyo kama sisi kwenda tu / hello, itakuwa moja kwa moja kuchuja kwa jina ni sawa na Hamna. Hivyo basi, sisi atatoa Kigezo na jina = jina, hivyo itakuwa kupita katika jina parameter sawa na hii parameter jina kazi, ndani ya Kigezo. Hiyo bado haina kueleza jinsi ni kuamua kama magazeti Hello World, au magazeti jina langu. Basi hebu kweli kuangalia ndani ya Kigezo yenyewe, na kuona ni wapi kwamba anakuja kutoka. Kwa hiyo, ndani ya Kigezo hii, sisi kweli kuwa baadhi mantiki masharti, ambayo baadhi ya watu wanasema, wewe kweli haipaswi kuwa na mengi ya masharti mantiki ndani ya Kigezo yako yenyewe. Ni lazima kuwa zaidi ndani ya Mdhibiti, lakini kwa mfano huu ni kitu pretty ndogo. Hivyo hapa, sisi kuangalia, kama jina, hivyo kama jina si sawa na Hakuna, kama jina ni kweli kupita katika, basi sisi kusema Hello, Jina na kichwa na marquee, HTML haya yote ya kawaida, vinginevyo, sisi magazeti nje Hello, Dunia tu kama kawaida. Hivyo mambo kadhaa taarifa hapa kuhusu jinsi muundo templating, ni kwamba, yote haya kauli masharti, aina ya kama jinsi sisi PHP ni wakati unataka kuingiza baadhi PHP, matumizi chini-kuliko swali alama, ni aina ya sawa hapa na {%. Hivyo hapa, tuna kificho wetu masharti. Na kisha, wakati wewe kweli unataka halisi kutathmini kitu, na magazeti hivyo nje screen, kutumia braces mbili. Hivyo hapa ni braces mara mbili, na kisha sisi kutaja jina, hivyo ndani ya kwamba, itakuwa kutathmini kwa jina kutofautiana, ambayo ilipitishwa katika kutoka atatoa template kazi, badala ya uchapishaji tu nje, kama sisi got kuondoa hizi, ingekuwa tu magazeti nje neno "jina." Hivyo, hiyo ni kitu cha kuangalia nje kwa. Hivyo kitu kingine ilani ni kwamba, wakati sisi wanataka kutumia kazi render_template, sisi kweli kuwa kuagiza ni wazi kutoka chupa. Na hii ni mfano wa modularity ya chupa, kwamba huna kuagiza mambo ambayo huna haja. Unaweza tu kuleta katika kazi kweli huna haja, ambayo ni wakati mwingine nzuri, hivyo huna kuwa na kazi hizi zote wamekaa kuzunguka kwamba wewe si kutumia, lakini pia, kama wewe kusahau kuwa wewe haja ya kuagiza render_template, pengine utasikia kupata onyo ambayo basi wewe kujua kuhusu hilo. Hivyo, kwamba ni templating. Hivyo, tumekuwa umeonyesha jinsi ya kufanya kurasa rahisi mtandao, na kuongeza mantiki kidogo zaidi kwa hivyo, katika suala la routing kutofautiana. Inakuwezesha kufanya mambo mbalimbali kulingana na nini URL kwenda, na pia wakati huo, kutoa maana HTML kidogo zaidi katika suala la jinsi gani unataka kutoa mambo. Huna kuweka yote HTML yako katika Python yako, lakini kwa pretty much kila maombi ya mtandao, wewe ni kwenda kutaka aina fulani wa takwimu mfano yanayohusiana na hayo. Na hivyo kijadi, hii ingekuwa kuwa kitu kama SQL database. Na unaweza tu kuingiliana moja kwa moja na SQL. Chatu ana, nadhani ni kuitwa. SQLite 3. Unaweza tu kuagiza SQLite 3 na kutekeleza maswali SQL moja kwa moja, lakini sijui kuhusu wewe, lakini mimi kwa kweli si kama, tu, kuandika maswali SQL. Inaelekea kupata kweli muda mrefu na ngumu. Na hivyo, kitu ambacho Mimi kama kutumia ni nini inayojulikana kama ORM, ambayo ni kitu-kimahusiano ramani. Na hatua ya kitu-kimahusiano ramani, ni kwamba kuna mambo mawili tofauti njia unaweza kufikiri juu ya database. Hivyo mfano kwamba Profesa Malan kawaida anatumia darasani, ni Excel meza, ambapo una safu hizi na nguzo hizi, na kwamba muhimu kweli kweli kwa jinsi ni kuwakilishwa katika SQL na jinsi kiutendaji na hivyo, lakini njia nyingine ambayo ni kweli muhimu kufikiri juu yake wakati mwingine, ni katika suala la madarasa na vitu. Hivyo badala ya kufikiri ya kila meza kama kuwa huu mfululizo ambayo ina baadhi ya Maelezo, unaweza kweli kufikiria kama kuwa kila meza ni darasani, na kisha kila mfano wa darasa ina tabia fulani. Hivyo, katika mfano huu, matukio ya darasa ni safu katika meza, na kisha kila mali ingekuwa kuwa safu katika meza. Hivyo, ORM kwamba mimi kama kutumia inaitwa peewee. Ni kweli dogo, aina ya kama chupa. Nadhani wao kwenda vizuri pamoja, lakini kuna mengi ya Orms mengine kwamba unaweza kutumia. Moja maarufu zaidi ni inayojulikana kama SQLAlchemy, na siwezi kukumbuka kwa nini mimi awali waliamua peewee zaidi SQLAlchemy, au napenda kukuambia kwa nini mimi nadhani ni moja bora, lakini sisi ni kwenda tu kutumia hii moja kwa sababu ninajua jinsi ya kutumia hiyo. Hivyo, swali moja ni, kwa nini unapaswa kujisumbua kwa kutumia ORM, badala ya moja kwa moja kuandika maswali SQL? Na nadhani kesi bora, ni kwamba si kweli kuandika maswali SQL. Ni rahisi, kama mimi nitakuonyesha, kwa kufanya mambo kama uteuzi, kuingizwa, kufutwa, hasa kujenga meza. Ni rahisi zaidi kwa kuandika muundo wa darasani, kuliko ilivyo kuunda Kujenga Meza kauli, lakini jambo moja kuwa na ufahamu wa, ni kwamba ORM kujaribu wake bora kufikiri nini zaidi ufanisi swala SQL itakuwa, lakini wakati mwingine anapata ni mbaya. Na hasa kama wewe ni kufanya kazi na database kubwa, unaweza taarifa kwamba swala kwamba lazima kukimbia kwa haraka, ni kweli kuchukua muda mrefu. Na kama ukiangalia chini ya kofia na jinsi ORM ni kutafsiri kwamba katika SQL, inaweza kuwa kufanya kitu kweli ujinga, kwa sababu tu ni aina ya gestured nia yako mbaya. Na, kumekuwa na wakati ambapo Nimepata kuipuuza, na tu kutekeleza maswali yangu mwenyewe SQL, tu sababu ilikuwa parsing kwa namna ya ajabu. Kwa hiyo, kuna baadhi ya uendeshaji, tu kwa njia kwamba inaandaa yako kauli chini katika SQL. Kwa hiyo, hebu angalia super haraka katika mfano rahisi ya data mfano kwamba unaweza kutumia. Hivyo, hii ni Python kificho, na hivyo Jambo la kwanza unataka kufanya ni kutoka peewee kuagiza *. Hivyo, tofauti na chupa, ambapo una modules haya yote ya mtu binafsi, na unataka kuagiza chupa, na kuandika Kigezo, na baadhi ya watu wengine kwamba tutaweza kuona baadaye, kutoka peewee, unaweza tu kuagiza kila kitu, kwa sababu ni maktaba pretty ndogo. Hivyo, jambo la kwanza unataka kufanya, ni kweli kujenga hii kitu database. Hivyo, una db = SqliteDatabase, na kisha jina la orodha yako. Na hii itakuwa kweli kujenga database kitu kwamba unaweza kuingiliana na, na peewee. Na kisha, tuna halisi mfano kwamba tunataka kujenga. Hivyo meza tunataka kujenga. Kwa hiyo, ndani ya peewee, kila darasa ina meza yake mwenyewe ndani ya orodha yako. Hivyo, wote wa madarasa kurithi kutoka mfano msingi, na mji mkuu wa M mfano ni kitu ambacho inavyoelezwa katika peewee. Kwa hiyo, yote ya mifano yako lazima kurithi kama superclass yao juu, wanapaswa kurithi kutoka mfano, lakini nini kweli baridi, ni kwamba unaweza kweli kuwa yako mifano wanarithiana. Na muda mwingi, yako mifano data si lazima kufanya nzuri urithi uongozi, lakini Mara ambapo wao kufanya, ni kweli ni nzuri, kwa sababu una mtindo asili kutoka kwa kila mmoja. Kwa hiyo, sisi kuelezwa darasa hili 'mwanafunzi,' ambayo kurithi mfano, na ina mali watatu. Ina ID, ambayo ni PrimaryKeyField, ambayo ni kitu ambacho zinazotolewa na peewee, jina lake ni Charfield, na daraja ni IntegerField. Hivyo hii wanaweza au kuwa jinsi CS50 kweli maduka yote wanafunzi wa darasa. Sio, lakini hii ni jinsi napenda kufanya hivyo. Na kisha ina, ndani ya darasa hili, na hii ni kitu unaweza kufanya na Chatu, unaweza kuwa na madarasa Furushi. Na hili ni jambo hiyo ni kwa mujibu wa peewee. Hivyo, Meta hii darasani, una bayana kwamba orodha ni sawa na kitu kwamba sisi aliumba hapo juu. Na hii anasema faili ndicho meza hii kweli kwenda kuwa zilizomo katika. Hivyo hii ni kitu ambacho una kufanya ndani ya yote ya mifano yako. Wewe tu na kutaja ndani ya darasa hili Meta kwamba orodha ni sawa na db. Kwa hiyo kile Mimi kawaida kufanya, kama nina rundo la mifano mbalimbali, ni kwamba nina msingi moja mfano, kwamba mimi kawaida wito tu "msingi mfano" ambayo ina tabaka la Meta, na unaweka orodha sawa na db. Na kisha wote wa mifano yangu baadae atarithi kutoka kwamba darasa msingi. Na kisha mimi si kuwa na wasiwasi kuhusu kuweka tabaka la Meta. Hivyo, wakati huu kweli anapata ulioandaliwa chini katika SQL taarifa, inaonekana kama jambo hili nasty chini hapa, "Kujenga meza mwanafunzi ID integer, "Chochote. Na, nadhani kwamba ni mfupi, hii swala SQL haki hapa, lakini kama ukiangalia darasa hili hapa unaweza kuona hasa nini kinaendelea. Unaweza kuona aina gani ya mashamba kuna watu, nini re walioitwa, na hivyo, nadhani kwamba kuangalia hii chatu kificho ni mengi zaidi kuliko someka kujaribu kuandika hii swala SQL. Hivyo, ili kweli kutumia orodha, tuna kuungana na ndani ya chatu. Kwa hiyo, mimi kawaida kuandika kazi kuitwa initialize_db kwamba anafanya mambo mawili. Inachukua katika orodha kitu db na inaunganisha hiyo, ambayo kuufungua tu up sehemu ya database. Kama wewe ni kukimbia tu ingawa tovuti kwenye mashine yako, siyo mpango super kubwa ya kuwa na wasiwasi kuhusu kuunganisha na kujiondoa, lakini kama wewe ni mbio hiyo kwenye tovuti, wewe unataka kuhakikisha kwamba, wakati mtumiaji inaunganisha hiyo, wakati wao wa karibu nje tovuti, wao kukatwa ili uweze hawana rundo la watu kushikamana Mbegu yako yote kwa mara moja. Na kisha, wakati kuungana na database, unataka simu db.create_tables, na orodha ya mifano kwa nini unataka kujenga meza. Hivyo hapa, mimi nataka tu kujenga ni kwa mwanafunzi hii. Na kisha, jambo muhimu, ni kwa kutaja salama = Kweli wengi wakati. Kwa hiyo kile kauli hii atafanya, ni kwamba inajenga meza kwa mwanafunzi mfano, lakini tu kama meza ambayo ina si imeanzishwa tayari. Hiyo ni nini bayana salama. Hivyo itakuwa si overwrite meza yako zilizopo, itakuwa tu kujenga mpya meza kama kuna hata mmoja hapo. Kwa hiyo, unaweza kujenga tu meza mara moja kwa kutumia SQL. Na kisha kuwa na kwamba orodha kikao huko, na kisha kuungana na kila wakati, lakini ni kawaida nzuri tu kuweka katika wito huu create_tables, hivyo kwamba, kama wewe milele kufuta yako Mbegu wakati kukimbia mtandao wako programu tena, itakuwa recreate yake. Kwa hiyo, tu kuhakikisha kwamba ni salama ni maalum kwa kuwa Ni kweli kwamba au utapata taarifa yako tu kupata clobbered kila wakati. Na kisha, unaweza kupiga tu initialize_db kuanzisha uhusiano, na kujenga meza kama ni lazima. Kwa hiyo, jambo ya kawaida kwamba wewe unataka kufanya, au moja ya mambo ya kawaida, ni kwa kweli kuingiza mambo katika orodha yako. Na hivyo, badala ya kuwa kuandika kuingiza KATIKA Kauli na wote wa maadili maalum, unaweza kweli kuwaita kazi juu ya mwanafunzi darasani. Hivyo, wakati wewe kujenga darasa kwamba kurithi kutoka mfano, ina hii kuunda mbinu. Hivyo, unaweza kufanya darasa name.create, na bayana vigezo kwamba unataka kupita katika. Hivyo, kama Nataka kuongeza baadhi ya wanafunzi kwa CS50 daraja kitabu yetu mfano, Mimi itabidi kuweka katika Daudi, ambaye ana daraja nzuri sana, ana 95. Na mimi mwenyewe, ambaye ni kutofanya vizuri katika CS50, nina 50. Na hivyo, Jambo zuri nini hii kujenga kazi gani, ni kwamba kuirudisha mfano, au mstari, ili kuundwa ndani ya meza, na hivyo basi wewe kuhifadhi kwamba katika kutofautiana, na kazi na baadaye. Unaweza kubadilisha karibu, ambayo Mimi itabidi kuonyesha mfano wa. Taarifa kwamba sikuwa kuwa na bayana ID, kwa sababu kwa vile ni PrimaryKeyField, itakuwa moja kwa moja increment yake kama huna bayana yake. Na, kwa kweli, pengine lazima bayana jambo hilo, kwa sababu waweza ajali clobber ID ya mtu mwingine. Na unataka kufanya kuhakikisha kwamba ni ya kipekee. Kwa hiyo, kwa kweli, wengi jambo la kawaida unataka kufanya, pengine kuchagua nje ya database mara moja na mengi ya habari huko. Na hivyo, kama unataka kupata kila kitu, hivyo sawa na nyota kuchagua kutoka wanafunzi taarifa, ni ingekuwa tu kuwa student.select. Na kwamba nitakupa nyuma safu na wote wa mwanafunzi vitu ndani yake kwamba iterate juu unataka. Unaweza kupata mambo ya nje ya hiyo. Na zaidi ya muda, wewe hawataki tu kufanya kuchagua, wewe kweli unataka kutaja kitu. Na hivyo, unaweza mlolongo pamoja simu hizi kazi, kama jinsi wewe ungekuwa mlolongo pamoja kauli katika SQL. Hivyo unaweza kufanya student.select (). Ambapo katika mfano huu. Na kisha, unaweza kutaja masharti, tu kwa kutumia chatu kawaida Booleans kuangalia mambo. Kwa hiyo, katika kesi hii, unataka kikomo nini wewe kuchagua kwa, ambapo student.grade ni sawa na 50, na student.name ni sawa na Ezra, ili tu kupata nami nje ya hiyo. Na taarifa, moja kwa kweli Jambo hila hapa ni kwamba, kama unataka kutaja an na / au na au / au, katika Python, kwa kawaida kutumia, Nadhani neno "na" kwa kweli, lakini hapa kutumia ampersand moja, ambayo ni kawaida bitwise operator, lakini katika kesi hii maalum, njia tu peewee anafanya hivyo, matumizi moja ampersand kutaja "na." Hiyo ni kitu ambacho Mimi kupata mchanganyiko juu sana, lakini haina kuja kwamba sehemu kubwa katika mazoezi. Na kisha, mara moja una yote ya wanafunzi kutoka katika orodha, mara moja umefanya uko kuchagua na kuvaa yako au chochote, unaweza kutumia foreach kitanzi, kama kawaida katika Python, na aina yoyote ya iterator au kwa aina yoyote ya safu. Hivyo unaweza kufanya, kwa s katika student.select (). whe re (Student.grade <75), na hivyo mapenzi hii iterate juu ya kila mwanafunzi katika meza ambao daraja ni chini ya 75, ambayo katika kesi hiyo, bado mimi tu. Na kisha unaweza kufanya kitu ndani ya kuwa kitanzi, kama kutuma barua pepe yangu na kuniambia kwa kweli kugeuka katika Tatizo langu Sets. Hivyo, jambo lingine unaweza kufanya, ni ni kweli rahisi update safu ndani ya meza. Hivyo, kumbuka nyuma hapa, yako wakati mimi kuingizwa, Mimi alichukua thamani hiyo ilikuwa akarudi na student.create, na mimi kupewa kwa jina inaitwa Ezra. Na hivyo sasa, unaweza kubadilisha maadili ndani ya mfano kwamba, tu kama wewe ungekuwa kawaida darasani katika Python. Hivyo unaweza kuweka ezra.grade = 95 na kwamba update nakala za mitaa, lakini kama wewe kweli unataka kufanya mabadiliko ambayo kwa Mbegu, una kuwaita ezra.save, hivyo aitwaye njia .save juu ya mfano. Na hivyo sasa, mimi kuwa na mafanikio iliyopita Daraja yangu mwenyewe ndani ya database. Kwa hiyo, basi hebu kusema kwamba mimi kupata hawakupata kubadilisha Daraja yangu ndani ya database. Profesa Malan pengine ni kwenda kutaka kufuta mimi kutoka darasani, na hivyo unaweza kupiga .delete mfano mbinu tu juu ya jambo hilo. Hivyo, kama wewe alitaka kwenda tena ndani ya kitanzi hii hapa, na kwa kweli, badala ya kutuma barua pepe zote ya wanafunzi ambao daraja ni chini ya 75, alitaka kufuta yao, ndani ya kitanzi hii inaweza piga mfano s.delete. Na jambo la mwisho kabisa unataka kufanya, ni wakati wowote kuanzisha uhusiano, na wewe ni kosa na kazi yako, unataka simu db.close, ambapo db ni kwamba orodha kitu kwamba tulikuwa na kabla. Na unataka kuhakikisha kwamba kila kitu anapata imefungwa nje ya. Baridi. Hivyo sasa, nina mfano maombi. Nimekuwa aina ya kabla ya kufanywa kila kitu tu ili hakutakuwa na coding yoyote kuishi makosa, lakini tunaweza kutembea kwa njia ya na kuona jinsi gani kuweka chupa na peewee pamoja, na kufanya programu rahisi. Mimi simu yake CS50 rant, na ni aina ya rahisi blog jukwaa. Hivyo, kwanza, mimi itabidi kuendesha na kuonyesha nini inaonekana kama, na kisha tunaweza kuangalia zaidi katika kanuni. Sawa, hivyo hebu kukimbia tu hii. Baridi, mimi itabidi kufanya hii kidogo kidogo. Siyo mzuri sana, kwa sababu tu Sikuweza kufanya mengi ya CSS, lakini kile yake ni, ina Mbegu hii ya blog posts, na huenda kwa njia zote za nao, na itakuwa kuonyesha yao juu ya ukurasa katika utaratibu wa hivi karibuni zaidi. Na hivyo hizi ni baadhi tu ya posts kwamba nilikuwa kuokolewa katika database. Hivyo kama tunataka kujenga mpya baada, tunaweza kwenda Kuongeza New Post, na tunaweza kuingia jina la baada, hivyo kitu kama, CS50 semina. Wow, kweli kufurahia semina. Baridi. Kisha vyombo vya habari baada, na itakuwa kuelekeza wewe nyuma ya ukurasa wa nyumbani, na kisha utaona kwamba karibuni baada alikuwa aliongeza. Na bado tuna wale wote huko. Hivyo sasa, hebu hatua kwa njia zote za kanuni na kuona jinsi hii ni kutekelezwa. Kwa hiyo, nadhani jambo la kwanza kwamba hebu tuangalie, ni kweli mifano. Muda mwingi, wakati wewe ni kubuni kitu, unataka kufikiria kwanza juu ya namna wewe ni kwenda kuwakilisha data yako, na kisha kubuni mambo kote kwamba, hivyo kila kitu kuwa hufanya akili. Na kwamba ni kweli jinsi mimi alifanya hivyo wakati mimi nilikuwa kufanya hii, Nikaketi, mawazo, je, nataka katika nafasi hiyo. Kwa hiyo, hapa, tuna muundo huo kwamba nilikuwa kutaja awali, ambapo sisi kufanya db = Sqldatabase ('posts.db'). Katika hali halisi, pengine hawataki kwa kificho ngumu katika database jina yako. Kwamba lazima pengine kuwa vigezo ambayo imehifadhiwa mahali fulani, labda katika config faili, lakini katika mfano mdogo kama huu, ni sawa na kanuni ngumu kuwa katika. Hivyo sasa, tuna hii darasani Post, ambayo kurithi kutoka mfano msingi. Na ina, tena, ID = PrimaryKeyField. Kwa kweli, kama huna bayana, kama mimi kwa kweli got kuondoa hii, kisha peewee sisi itachukua huduma ya moja kwa moja kujenga shamba hilo ID, na itakuwa moja kwa moja kufanya hivyo PrimaryKey, ambayo Nadhani kwa kweli ni nzuri, kwa sababu kwa kawaida, hiyo ni kitu unataka kuwa, lakini mimi kama kuiweka katika hasa, hivyo tu Nakumbuka kwamba ni katika huko. Lakini kama huna bayana kwamba, kwamba atakuwa huko moja kwa moja. Hivyo basi, nina tarehe ambayo ni DateTimeField, na wote mashamba hayo mbalimbali, ikiwa kuangalia nyaraka peewee, nitakupa orodha ya tofauti aina ya mashamba uweze kutumia. Kwa sehemu kubwa, ni sawa kwa nini ungependa kuona katika SQL. Kwa hiyo, kuna Charfield, VarCharFields, textfields, ambayo ni kwa muda mrefu sana maandiko, kama baada ya blog uwezekano, DateTimeFields, DoubleFields, FloatFields, zote mambo kama hayo. Na unaweza kupita katika hoja nyingine kwa hiyo, ambayo sikuweza kutaja hapa. Sema, kwa mfano, wewe hakutaka kuruhusu nafasi hizo mbili kuwa na cheo hicho, unaweza kutaja kitu kama kipekee = Kweli, na kwamba tu parameter ziada ili shamba hilo wakati inaandaa ni chini ndani ya SQL, itakuwa bayana kwamba ina kuwa ya kipekee. Unaweza pia kutaja kitu kama si batili na mambo mengine yote wewe kawaida kufanya katika SQL. Hivyo, hii ni pretty rahisi mfano kwamba ina tarehe. Taarifa hapa, ndani ya DateTimeField, Mimi bayana jambo la msingi ni. Mimi maalum kuwa ni datetime.datetime.now, kwa sababu ya njia hiyo hii anapata tathmini, ni kweli kutathmini datetime.now wakati anapata kuingizwa katika orodha. Nadhani, Ningependa kuwa mara mbili kuangalia hii, lakini kama alivyofanya kitu kama hii, basi ingekuwa kweli kutathmini kwamba mara, na kisha DateTime ingekuwa daima kuwa sawa. Hivyo, tu kama wewe ni kufanya kitu na datetimes, kuangalia mara mbili kwamba ni kutathmini wakati kweli anapata kuingizwa, la sivyo unaweza kuwa na kuchanganyikiwa. Cheo ni tu Charfield, ambayo kuna hoja zaidi unaweza kupita katika kubainisha hasa ni muda gani unataka kuwa, lakini hapa, haikuwa kweli jambo. Na Nakala ni kwenda kuwa Nakala ya goli nzima, na kwamba itakuja kuwa TextField kwa sababu tu unataka kwa kuruhusu kuwa kamba pretty muda mrefu. Basi tuna Meta hii Aina kwamba tu bayana kwamba tunataka orodha ambapo hii ni kweli wazi juu katika kuwa db kitu kwamba sisi hapa. Na jambo la mwisho tuna hapa, ni tu kazi hii kwamba tunakwenda kutumia kutoka kwa programu yetu kuu initialize orodha kuungana na yake, na kisha kujenga meza Post. Sasa, hebu tuangalie programu kuu yenyewe. Hivyo hii ni moja ya kabisa kidogo tena kuliko wale kwamba tumeona kabla, lakini hopefully si mbaya sana. Hivyo, napenda kupanua hii nje. Sawa. Hivyo, taarifa na juu mimi kutoka nje rundo zima la mambo mengine kutoka chupa kwamba tuna si kweli kuona mbele. Na hopefully, tunaweza kwenda kwa njia ya kila mmoja wa haya moja kwa moja na kuongea kidogo zaidi kuhusu nao, yamepangwa kwa mfano. Hivyo, tuna chupa, na render_template, ambayo tumeona kabla, ombi hili kitu, ambayo itakuwa kuja wakati sisi kuangalia jinsi aina ya kuwa mimi alikuwa akionyesha kweli kazi. Kuelekeza, ambayo inakuwezesha kuelekeza nyuma kutoka Kujenga New Post nyuma kwa asili Mzee, na kisha URL, ambayo ni kitu ambayo inakuwezesha kufikiri ambapo juu ya tovuti ukurasa fulani ni. Hivyo basi, karibu Jambo mimi, ni mimi kuagiza wote wa habari kutoka Mifano mafaili kwamba tulikuwa tu kuangalia. Na, yeah. Kwa hiyo, kitu kingine kipya ambacho huja juu wakati wewe ni kushughulika na, hasa database, ni kwamba unaweza kutaja kazi ambayo anapata kuitwa kabla kila ombi, na kazi ambayo anapata aitwaye baada ya kila ombi, kwa kutumia hii kazi decorator app.before ombi. Na hivyo hii kupata kunyongwa popote kazi hii ni. Hii haina kuwa aitwaye kabla ya ombi, lakini kwa kawaida hiyo ni kitu busara kwa simu yake. Unaweza kutaja chochote kazi unataka kupata kuitwa huko, hivyo mimi maalum initialize_db hii kazi ambayo tulikuwa nyuma katika Models faili, hivyo kabla ya kila ombi, wewe wanataka kuungana na database. Kuna mambo mawili tofauti njia unaweza kufanya hivyo. Unaweza kufanyaapp., I kuamini ni after_request. Na tofauti kati ya after_request na teardown_request, ni kwamba after_request kutokea tu kama ombi kwa kweli ilikuwa halali. Na hivyo, tu kama ombi alikuwa na mafanikio, kama hakuna potoka, lakini teardown_request hutokea katika kesi ya mafanikio ombi, au katika kesi ya upotevu. Hivyo, kwa kawaida, unataka kutumia teardown_request, isipokuwa unataka kufanya kitu, hasa mbalimbali katika kesi ya upotevu. Lakini tu kwa ajili ya kufunga Mbegu, kama ikifanikiwa au kama inashindwa, tunafanya unataka kukatwa kutoka orodha. Hivyo ni kuitwa, db.close juu ya db kitu. Taarifa kwamba teardown_request inachukua katika ubaguzi. Hivyo unaweza kuangalia kama kulikuwa na kwa kweli makosa wakati ilikuwa kufungwa, lakini hapa, hopefully, huko si mengi yote ya makosa, hivyo sisi ni tu aina ya kupuuza jambo hilo. Sawa, na wengine ni si mbaya sana. Hivyo, wakati sisi kwenda kwenye ukurasa wa nyumbani, sisi kulipwa huu home.html Kigezo ambayo kufungua. Kupita ni katika wadhifa sawa na, na yale huu anafanya yaani, kumbuka tuna post hii mfano, hivyo sisi kuchagua nafasi zote, na kisha kitu kingine unaweza kufanya, unaweza kutaja WAPI kifungu, unaweza kutaja ili kwa, na hivyo tunachukua yote ya posts kwamba kupata kuchaguliwa, na kisha sisi ili nao na post.date.descending. Na kwamba bayana, wakati wao kweli kuja nje, moja ya hivi karibuni itakuwa moja ya kwanza. Na kisha, sisi kupita kwamba katika home.html template, hivyo hebu kweli kufungua kwamba Kigezo kweli haraka, na kuangalia jinsi hiyo kazi. Na hii si HTML kubwa, lakini hopefully, tunaweza kuzingatia chatu. Hivyo kuna kiungo kwa Kuongeza New Baada, na hivyo hii inabainisha njia ndani ya chupa kwamba sisi kufafanua, ambayo ni haki hapa. Hii ni mpya baada ya njia, na sisi bayana kwamba hapa. Na hivyo kuwa ni kiungo ambayo kisha kwenda kwa kuwa njia ndani ya kompyuta chupa. Jambo zaidi ya kuvutia ni hii kwa kitanzi hapa. Hivyo sisi kutaja kuwa hii baada parameter ambayo ilipitishwa katika kazi render_template, kwa kila baada katika wadhifa wa kitu kwamba anapata kupita katika. Tunataka magazeti nje kichwa cha habari, katika H1, na kisha chini, tunataka magazeti nje baada maandishi ndani ya aya. Na hapa, tunaweza kweli piga chatu kazi, hivyo tunaweza kuwaita strftime, ST-RF muda, na unaweza kupita katika string format kwamba unataka magazeti data kutoka katika. Hivyo ni pretty nzuri kwamba unaweza kweli kuwaita hii kazi chatu kutoka ndani hapa. Huna kufanya formatting juu ya upande mtawala, kwa sababu kwa kweli, formatting tarehe ni kitu ambacho unataka kukabiliana ndani ya View. Na wote wa asilimia hizi mambo si super muhimu. Kama wewe kuangalia juu nyaraka kwa strftime kazi katika Python, inabainisha haya yote mambo, lakini hiyo ya jinsi gani, wakati tulikuwa kuangalia katika ukurasa wa nyumbani hapa, ni format hii na nzuri tarehe, na ni bayana AM au PM, lakini kwa kawaida, kama sisi hawakuwa na hii hapa, pengine utasikia kupata baadhi ya takataka tarehe hiyo hakuwa na kuangalia nzuri sana. Na kisha sisi taja post.text, na mimi naweza kuweka wanandoa wa mstari mapumziko hapa, tu kuweka baadhi ya maeneo kati ya kila post. Kwa hiyo, nadhani muhimu zaidi Jambo katika mfano huu, ni kwamba unaweza kutumia hii kwa kitanzi. Na hii ni sawa na mambo unaweza kufanya katika PHP. Unaweza iterate kupitia, kila kitu anapata kupita katika, na hivyo, badala ya kuwa na kufanya nakala / kuweka, nakala / kuweka HTML wote, wewe tu na kuandika ni mara moja, na kisha unaweza iterate juu ya yote ya vyeo. Na hili ni jambo kawaida kwamba unataka kufanya, wakati una mengi ya data, ni kwamba kwa kila kitu katika data zako, unataka kufanya jambo kama hilo. Na kisha, kumbuka tu, kwamba wakati unataka magazeti nje kitu kwa uwazi katika HTML, wewe kutumia braces mara mbili hapa, lakini kisha wakati unataka kutaja baadhi ya taarifa kuhusu hali, au juu ya kwa kitanzi, wewe kutumia asilimia mabano. Hivyo, kurejea chatu kanuni, ili anaelezea nini kinatokea katika kuu njia, wakati sisi kwenda huko, ni tu maonyesho zote posts, lakini basi swali ni, jinsi gani sisi kweli kupata posts katika orodha, ambayo ni kidogo zaidi ya kuvutia. Hivyo, unapobonyeza New Baada kiungo, ambayo tuliona hapa, ni maelekezo wewe na fomu hii. Na kwamba tu wito rahisi kazi render_template, ambayo kisha hupita katika baada ya mwezi katika HTML fomu. Basi hebu tuangalie hiyo. Hivyo hii ni moja ya pretty rahisi. Ina rahisi HTML fomu, ambayo utaangalia kidogo utambuzi, kulingana na aina katika CS50 Fedha. Na hivyo, sisi kutaja hapa, hatua. Na hapa, kama wewe ni kufanya kazi na PHP, kwa kawaida, ni itakuwa kitu kama, create.PHP, lakini hapa sisi kweli bayana njia ndani ya kompyuta chupa. Na hivyo, njia hii sambamba kujenga njia kwamba sisi hapa, ambayo tutaweza kwenda katika katika pili. Na hivyo, sisi kutaja kuwa ni njia ya posta, kwa sababu tunataka kutuma taarifa hii fomu, na kwa kawaida wakati wewe ni kutuma taarifa kutoka fomu, unaweza kutaka kutumia ombi baada, tu hivyo huna kuishia na hii kubwa, unwieldy URL. Lakini pia unaweza kutumia ombi GET, na kuupitisha katika na kutofautiana routing, lakini kwa namna, ni nzuri na baada ya ombi hapa. Na hivyo basi, tu kama wewe atafanya na HTML na PHP, unaweza kutaja pembejeo hizi maandishi, na unaweza kutaja jina yao, na kwamba jina kwamba kupata kupita ndani ya ombi kitu ndani ya chupa. Na kisha sisi Kuwasilisha kifungo kwamba anasema baada. Na hapa, idadi ni jina la kifungo, kwa sababu ni baada ya blog, lakini hapa, baada ya ni mbinu ya ombi. Basi hizo neno hilo hilo lakini kwa kweli lisilohusiana. Yeah Kurejea chatu kificho, wakati sisi kuitwa kujenga mbinu, taarifa hapa kwamba unaweza kweli bayana ndani ya njia mbinu ombi kwamba unataka kukubali, na hivyo hapa, mimi kutaja kwamba mimi tu wanataka kukubali njia Post. Hivyo, kama mimi kwa kweli kujaribu kutembelea ukurasa moja kwa moja, ambayo ni kwa kutumia ombi GET, itakuwa kuniambia "Mbinu hairuhusiwi." Na hivyo, una kurasa, aina ya kama huu kuunda ukurasa, ambayo mimi nina tu kweli kutumia kama njia ya fomu ya kupata kuwasilishwa, unaweza kutaja kwamba huna wanataka watu kuwa na uwezo wa kwenda huko moja kwa moja kupitia ombi GET, au kama wewe hakutaka, kwa sababu fulani, baada ya ombi, unaweza tu kutaja kupata hapa, lakini katika mfano huu, sisi tu wanataka Baada ya ombi kwenda nje. Hivyo, wakati create_post inaitwa, wakati sisi kutembelea kwamba kupitia Baada ya ombi, wakati wowote kwenda fulani Njia, kuna ombi hili kitu, na tulikuwa na kuagiza maombi juu sana, lakini kuna ombi hili kitu kwamba anapata kupita katika, na unaweza kupata data za fomu, ambayo moja kwa moja kupata kujazwa wakati kutuma ombi kutoka fomu. Na kisha, nini nadhani ni kweli baridi, ni ile namna kitu kwa kupata kupita katika, ni tu chatu kamusi kwamba Ina, kama wewe access-- hivyo hapa, hebu mimi kuvuta up HTML karibu na hiyo, tu hivyo unaweza kuwa na kwamba kama rejea, ndiyo, hivyo majina kwamba sisi kutaja hapa kwa nyanja mbalimbali, hivyo cheo na asilia, sisi kisha kutumia tu wale zaidi hapa kama fahirisi katika data za fomu. Hivyo hiyo ni super rahisi. Hivyo basi tunatoa wito post.create, ambayo kujenga na moja kwa moja kuingiza huu mpya baada kitu katika database. Na nadhani hii kujenga kazi hapa ni mfano wa jinsi ya kweli ya baridi nguvu chupa ni na kufanya kazi na hii, kwa sababu kama wewe walikuwa wakifanya kitu katika PHP, unaweza kuwa na kufanya mengi ya uthibitisho, ingekuwa kisha kuanzisha uhusiano database, ingekuwa kisha kutekeleza swala SQL, lakini hapa sisi tu hii nzuri post.create, ambayo tunaweza kisha tu kupata taarifa nje ya ombi kitu, na kisha kupita ndani ya mwezi baada ya kwamba sisi ni kujenga. Na kisha, mwisho kabisa Jambo tunataka kufanya, ni kuelekeza user kurudi nyumbani. Na hivyo sisi kutumia hii Chupa kuelekeza kazi. Na kitu ambacho tulikuwa na si kuonekana kabla, ilikuwa hii kazi URL. Hivyo URL kwa ajili ya kazi inakuwezesha kupita katika kweli jina ya kazi katika Python kanuni yako, badala ya njia fulani kuwa ni katika. Ili niweze kuwa na urahisi tu kama itaelekezwa mtumiaji kupunguza, ambayo itakuwa kutuma nyuma nyumbani, lakini kutumia URL kwa ajili ya kazi ni nzuri, kwa sababu kama mabadiliko ya eneo ambapo mambo ni, hivyo hebu kusema kwamba mimi mabadiliko nyumbani kuwa katika / nyumbani badala yake, hii itakuwa bado kisha kurudi / nyumbani, kwa sababu kwa kweli inakwenda na inaonekana hadi jina la kazi, na nitakupa nyuma URL kwa ajili hiyo. Hivyo, aina ya juu ya dhana kwamba uko zaidi uwezekano wa kubadili ambapo mambo ni, kuliko majina ya kazi. Unaweza kutumia hii kwa kweli nzuri URL kwa ajili ya kazi. Na jambo moja kuwa na ufahamu wa kuwa ni kidogo suala gumu, ni kwamba unafikiri anaweza tu piga kuelekeza juu ya URL kwa, lakini kwa kweli wote wa njia na kurudi aina fulani ya maandishi na HTML, kweli hivyo kuwa na kurudi kuelekeza simu. Vinginevyo, utapata kitu batili kuhusu si kurudi kamba, kwa sababu yote haya na kurudi kweli HTML unataka kutoa. Na hivyo, wakati wewe piga kuelekeza, ni maelekezo wewe na ukurasa, lakini kwa kweli anarudi HTML wewe haja ya kutekeleza kwamba kuelekeza. Kurudi nyuma kwenye ukurasa wa nyumba. Hivyo tuna hizi maoni mawili tofauti. Tuna mtazamo nyumbani. Au, mimi nadhani ni lazima kusema templates. Tuna templates hizi mbili, template nyumbani ambayo maonyesho yote ya posts yetu, na basi tuna jambo hili tangazo, na unapobonyeza baada, unaendelea kwa njia mpya ndani ya chupa, lakini njia hiyo haina si lazima na template sambamba. Huna kuona kitu chochote, lakini bado unaweza na kazi hii kwenda juu ya nyuma ya pazia. Na kisha kupata itaelekezwa nyuma kwa ukurasa wa nyumbani. Na dhahiri, ni rahisi kufanya kazi katika baadhi CSS nicer katika template na kufanya hii kuangalia mengi nicer, lakini wote wa mantiki kuu ni pale katika Python. Maswali yoyote kuhusu mfano huo? Najua kuna mengi ya mambo mbalimbali kinachoendelea huko, mambo mengi sisi alikuwa si kuonekana kabla, lakini kama kitu chochote. Naam. Watazamaji 1: Je, una kufanya kitu chochote maalum scrub data hiyo ni anatoka fomu? Niliona wewe tu alisema "kujenga," EZRA Zigmond: Yeah, hivyo hiyo ni kweli, hiyo ni hatua nzuri kwa kweli. Hivyo swali lilikuwa, je haja ya kuangalia na kuhakikisha kwamba data ni halali, na kufanya aina yoyote ya scrubbing kuhakikisha kwamba ni halali, kwa sababu kama unaweza kuona hapa, Mimi si kufanya hivyo. Basi hebu angalia nini kinatokea kama mimi baada ya kitu tupu. Kwa hiyo, kutakuwa na kweli tu kufanya tupu ya mwisho na kujaza DateTime. Hivyo katika hali halisi, wewe ingekuwa pengine wanataka kufanya kitu kama, labda kutaja kama cheo ni sawa na kamba tupu, basi si kufanya hivyo. Au, tu kufanya hivyo kama cheo ni si sawa na kamba tupu. Hivyo haina kweli moja kwa moja utunzaji wa kwamba scrubbing kwa wewe, hivyo bado haja ya kufanya hivyo. Yeah, swali zuri. Watazamaji 2: Je, ni scrub kwa mwema sindano? Unajua? EZRA Zigmond: Hopefully, peewee anafanya hivyo. Nadhani bila ya shaka itakuwa pretty maktaba mbaya kama hakuwa na kufanya hivyo. Sijui hasa. Ningependa kuwa na kuangalia swala kwamba yanayotokana. Nadhani, kama mimi typed katika baada ya blog kwamba aina ya inaonekana kama mashambulizi SQL sindano, kitu kama hii, kama hii Ni kama uwanja password au kitu, unaweza kufanya kitu kama hiki. Nadhani itakuwa bado kupata halisi posted, lakini nadhani kuwa peewee haina kufanya aina fulani ya scrubbing ya data kabla ni kweli executes yake. Watazamaji 1: Hiyo shamba maandishi ni iliyoundwa na kuchukua Nakala wazi, sawa? EZRA Zigmond: Yeah, ni. Naam. Hivyo nadhani kwamba wote wa, hivyo hii ni tabia sahihi, ambayo kufanya hivyo, lakini nadhani kuwa peewee hopefully gani kufanya aina fulani ya ulinzi juu ya mwisho wao. Na kama alitaka kuangalia mara mbili kwamba, kuna njia wakati wewe kuzalisha swala. hivyo huna kwa nitafanya hivyo moja kwa moja. Ningependa kuwa na kuchukua kuangalia nyaraka, lakini unaweza kweli kuona SQL kwamba ni kuzalisha, na tuangalie kwamba, na kufanya kuhakikisha kwamba ni kuponyoka mambo. Sababu nyingine waweza wanataka kuangalia SQL kwamba peewee ni outputting, ni kama mambo yanaonekana kuwa kwenda kwa kweli polepole, unaweza kuchukua kuangalia na kuona nini ni kweli kufanya, kwa sababu ni wakati mwingine rahisi ajali kuongeza katika, njia ya kuandika hayo, unaweza ajali kuwa ni kuchagua database nzima ya kwanza, na kisha kufanya baadhi ya operesheni aina juu ya kwamba, wakati kweli maana ya kuchagua subset. Na hivyo, kama mambo si kabisa kwenda kulia, ni vizuri tuangalie ombi hiyo ni kweli kupata yanayotokana. Naam. Watazamaji 2: Wakati kwanza kuanza, kuweka katika bandari kama 5000. EZRA Zigmond: Naam. Watazamaji 2: Je, chaguo-msingi kwa peewee, au ni kitu ambacho unaweza kubadilisha? EZRA Zigmond: Ndiyo, hivyo bandari ni msingi kwa chupa. Kama wewe kukimbia bila kubainisha kitu chochote, itakuwa moja kwa moja kufanya hivyo. Naamini, Ningependa kuwa mara mbili kuangalia hii, lakini unaweza kutaja kwamba katika app.run, Nadhani unaweza kufanya kitu kama, bandari = 8080. Hebu kutoa kwamba kujaribu halisi haraka. Yeah, hivyo unaweza tu kutaja bandari = 8080, na itakuwa kukimbia huko, ambayo nadhani, kama alitaka kuendesha juu ya IDE, mimi si walijaribu hii nje, lakini nadhani kwamba kama wewe mbio ni juu bandari 8080, wewe d pengine kuwa na uwezo kupata server, tu kama wewe walikuwa kwa ajili ya tovuti. Yeah, lakini ni rahisi mabadiliko hayo kama wewe na aina yoyote ya bandari kama-usambazaji mambo ambayo unahitaji kufanya. Yoyote maswali mengine? Yeah? Watazamaji 1: Kwa hiyo, nikaona katika yako mifano ya kwamba, kama zilizotajwa, una bayana Mbegu kwa kila kitu. Je, kutokea kwa kujua, je, kwamba kufanya hivyo ni kweli ni rahisi kama wewe kuwa na kura ya SQLite database kwamba wanataka kutumia kwa moja programu ya mtandao, uweze tu kutaja kundi ya ndio tofauti katika mfano wako? EZRA Zigmond: Yeah, napenda kufungua kuwa hadi halisi haraka. Hivyo, wewe ni kusema, kama unataka kuwa rundo la tofauti kitu, labda kama na wanafunzi, kwa baadhi sababu, kitu kama hicho? Yeah, hivyo nadhani kwamba wewe bado, kila mfano ingekuwa bado wana haki Mbegu moja kwa ajili ya jambo hilo, lakini kama wewe alitaka kuwa mifano mbalimbali kwamba kuwa vitu database mbalimbali kwa ajili kwa hiyo, unaweza dhahiri kufanya hivyo. Hivyo, kama mimi umba mpya, kitu kama hii, na sasa hii ni mwanafunzi kuwa Inaonekana kama oddly baada ya blog, Mimi naweza bayana kwamba Mbegu ni sawa na db_2 hapa. Kwa hiyo, nadhani hiyo ni njia kuu unaweza kufanya hivyo. Baridi. Yoyote maswali mengine? Hivyo tu kumaliza juu kidogo kidogo, hapa ni baadhi ya rasilimali, na slides hizi itakuwa posted online hivyo unaweza kweli kupata viungo hivi. Rasilimali bora ni kweli nyaraka kwa chupa na peewee wenyewe. Re kuandikwa vizuri, nadhani. Hivyo, tovuti chupa ni hapa, na wana quickstart mafunzo ambayo kutembea kwa njia ya sawa mambo ya kile kutembea kwa njia, lakini kama unataka aina yoyote ya mapitio ya mambo ambayo mimi akaenda juu, au wewe walidhani kwamba nilivyoeleza kitu katika njia utata, wao itabidi mifano kama hiyo huko. Peewee ina nyaraka, na wana quickstart mafunzo kwamba huenda juu ya vigezo kuu kuwa wewe unataka kutumia. Kwa hiyo, mambo mimi kuongelea kwa kipekee, na kubainisha defaults, aina mbalimbali ya mashamba kwamba unaweza kutumia, wale ingekuwa wote kuwa huko. Pia, kama una maswali kuhusu peewee, na wewe baada yao kwenye stackoverflow, guy ambaye alifanya peewee kweli unaendelea na majibu hayo wakati mwingine. Kama una swali, hopefully yeye utakuwa na uwezo wa kujibu hilo, kwa sababu yeye aliandika jambo zima. Nadhani hiyo ni kila kitu Nilitaka cover. Shukrani kwa kuja nje.