[MUSIC nagpe-play] EZRA Zigmond: Hi, sa lahat. Salamat para sa darating sa labas ngayon. Seminar na ito ay "Python Web Apps sa prasko. " Kaya, ako pagpunta sa pakikipag-usap nang kaunti tungkol sa kung bakit baka gusto mong gamitin ang prasko upang gumawa ng web apps na may Python, bilang kabaligtaran sa ilang iba pang mga balangkas out doon, tulad ng Django, kung saan ay ang pinaka-kilalang. Subtitle ay "at peewee, "kung saan ay isang bagay na kami ay pagpunta sa makipag-usap tungkol sa kung paano makipag-ugnayan sa SQL database. Ito ay ginagawang talagang maganda. Kaya, narito ang isang mabilis na rundown ng kung ano ang gusto kong balikan. Kaya, una, isa lamang sa slide na magiging quickstart, na kung saan ay kung paano makakuha ng lahat ng bagay i-set up sa iyong computer. Pupunta ako sa nagpapakita ito sa aking mga lokal Mac machine, dahil lang iyon kung saan ko na gawin ito bago, ako pinaka-komportable sa ito, ngunit ito ay tiyak posible sa CD50 IDE. Kaya, matapos na, gusto ko na ipakilala kung ano ang prasko ay, at kumbinsihin sa iyo kung bakit dapat mong gamitin ito sa unang lugar. Pagkatapos, kukunin ko na magbigay ng isang mabilis na halimbawa ng kung ano ang iyong maaaring gawin sa prasko, isang mabilis na halimbawa ng kung ano ang maaari mong gawin sa peewee, at pagkatapos ay ako ay magpapakita ng isang mas mo kumpletong halimbawa application na ako magkasama na kami maaaring maglakad sa pamamagitan ng sama-sama. At pagkatapos ay sa wakas, sa huling slide, mayroon akong ang ilang mga mapagkukunan na ang pagtingin mo sa online para sa karagdagang impormasyon. Ito ay hindi isang kumpletong tutorial sa kung paano gamitin prasko. At makikita ko pag-asa na mag-iwan ilang oras para sa mga katanungan. Kahit sino nanonood nang lokal, lamang tulad ng, shout out sa gitna kung ikaw ay may anumang mga katanungan. Kaya mabilis stuff pag-install, kung gusto mong upang sundin kasama, o kung nais mong makakuha ng ito up sa iyong sariling machine, Pupunta ako sa maging gamit Python 2.7.10. Flask gumagana sa Python 3, pero gusto ko gamit Python 2, dahil mayroong ilang Python pakete na hindi pa gumagana sa 3. Kung pip iyong na-install, na kung saan ay isang Python package manager, Sa tingin ko na kung ang iyong Python ay mas malaki kaysa sa o katumbas ng 2.7.9, install mo ito nagagawa, ito ay napakadaling i-install ang mga pakete. Maaari mong huwag pip install Flask, tuldukan install peewee, karaniwang kailangan mong patakbuhin sudo lamang upang ang mga pahintulot magtrabaho sa labas. At, kung ikaw ay gumagamit ng super lumang bersyon ng Python, Inirerekumenda ko ang pag-update ng iyong Python, o gamit EasyInstall upang i-install pip. Kaya, ang susunod na tanong ay, kung ano ang prasko? At sa palagay ko, ang unang isang makatwirang katanungan ko ba para sa isang mahabang panahon ay, kung ano ang isang web app? Dahil na isang salita na ako Sa tingin ay itinapon sa paligid ng isang pulutong na hindi ko talaga alam. At sa tingin ko na ang pinakamahusay na halimbawa ng kung ano ang isang web app ay, talaga ay CS50 Finance, kung saan ito ay hindi talagang isang website lamang, ngunit ito ay isang bagay na iyong maaaring uri ng makipag-ugnayan sa. May mga user account at lahat ng uri ng iba't ibang mga bagay. Kaya, kung saan ang eksaktong ikaw gumuhit ng linya sa pagitan ng kung ano ang isang website, at kung ano ang isang web app, ay isang uri ng arbitrary, ngunit hulaan ko ang mga ideya, ito ay isang bagay ng higit sa isang website at ito ay isang kapaki-pakinabang na aplikasyon. Kaya, prasko ay isang framework para paggawa ng web apps gamit Python. At sana, sa pagtatapos ng mga ito, ako ay kumbinsihin sa iyo na maaaring tunay na sumulat ng isang bagay tulad ng CS50 Finance gamit Python, na aking tulad ng isang pulutong ng mas mahusay kaysa sa PHP, personal. Kaya, prasko ay, tumawag sila ng isang microframework, sa pamamagitan ng kung saan, ang ibig nilang sabihin ay masyadong simple, ngunit extensible. Kaya, ito ay may lamang kung ano ang kailangan mo, ngunit kung nais mong mas maraming mga tampok, ito ay madaling dalhin ang mga ito in. Ngunit dahil lamang ito ay isang microframework, ay hindi nangangahulugan na ito ay para lamang sa mga maliliit na proyekto. Mayroon akong isang link dito na nagsasabing na Obama ginamit Prasko sa 2012 para sa kanyang kampanya website, na sana, ay isang bagay ng isang liham ng paglilipat. Subalit ang bagay na ako talagang gusto ang tungkol Flask ay na, ito ay hindi talagang gumawa anumang uri ng mga desisyon para sa iyo. Dahil lang sa hindi namin pakikipag-usap tungkol sa mga web apps, Kailangan ko bang ihambing ito sa Ruby sa Daang-bakal at Django, na parehong ay malaki Framework, ngunit pareho silang gumawa ng pagpapalagay tungkol sa kung paano nais mong makipag-ugnayan sa mga database, kung paano mo nais na ipakita ang iyong mga view, at ang mga ito ay talagang magandang aspeto na iyon. Halimbawa, Ruby sa daang-bakal na ito ay may mga aktibong record system, kung saan ay isang tunay na ganda paraan upang makipag-ugnayan sa data, ngunit kung nais mong gamitin ang Ruby sa Daang-bakal, uri ng ikaw ay nakatali sa na. Ngunit sa prasko, tulad ng makikita ko ipakita sa iyo ng peewee, Maaari mong gamitin ang anumang uri ng database na nais mo, at maaari mo lamang hilahin na sa bilang isang extension sa prasko. Kaya na ang dahilan kung bakit ko talaga tulad Flask, ito ay na ito ay hindi gumawa ng mga pagpapalagay para sa iyo batay sa mga bagay na hindi mo na kailangan talaga. Kaya, kung bakit dapat mong gamitin ang prasko? Ang kagandahan ay, ito lamang Wala talagang ang pangunahing tampok binuo sa mga ito na kailangan mo. Kaya, hindi mo na kailangang mag-alala tungkol sa pag-unawa ng buong bungkos ng mga bagay-bagay na hindi mo na kailangan talaga. Hindi mo kailangang mag-alala tungkol sa pag-off ng mga tampok na hindi mo na kailangan talaga. At, tulad ng nabanggit ko, ito ay sobrang madaling upang idagdag sa mga extension ng mga bagay-bagay na iyong kailangan. Ang ilan sa kanila, prasko ay kanilang sariling mga suporta para sa mga ito. Kaya mayroong isang bagay na tinatawag Flask admin, na salamin na admin panel na nagbibigay Django, na kung saan ay nagbibigay sa iyo ng isang magandang visual na paraan upang pangasiwaan ang iyong mga website. Ngunit muli, kung ikaw ay paggawa ng mga simpleng bagay, marahil ay hindi mo kailangan ng isang malaking admin panel, kaya tingin ko na super nice. At ang mga disadvantages ay gayon, ikaw ay may mas mababa kapangyarihan sa labas ng kahon. Kaya, noong una mong buksan up prasko, at sa inyong Python programa, i-type lamang sa iyo mula sa prasko import *, o kahit ano, hindi mo eksaktong makakuha ng lahat ng mga ang mga tampok na maaaring gusto. At kaya kailangan mong mas malinaw ilista ang mga tampok na gusto mo. Kaya na ang isa sa kawalan, ngunit ako isipin na para sa pagbuo ng mga maliliit na web apps tulad ako pagpunta sa pagpapakita mo, na hindi talaga isang problema. At kung ano ang huling bagay ay dapat na sabihin, na kung saan ay isang typo, ay na may mas mababa standardized convention para sa kung paano gamitin ang prasko, dahil lang sa may mga hindi bilang ng maraming mga tao na gamitin ito propesyonal kumpara sa Django. Kaya, kung titingnan mo ang isang bagay tulad ng, "paano ang gagawin ko x" sa Django, ikaw ay malamang na mahanap ito. May magandang disenyo pattern na maaari mong gamitin, ngunit may Flask, ito ay sort pumunta ng iyong sariling paraan, dahil lang sa ito ay isang medyo maliit na library. Kaya ang mga ay ang disadvantages, ngunit sa palagay ko na ito ay isang magandang library upang gamitin pa rin. Kaya sabihin tumalon lamang ni pakanan papunta prasko. Ito ay tiyak na hindi pagpunta upang maging isang kumpletong tutorial, ngunit ito ay upang mabigyan ka ng ideya ng kung paano buuin ang mga bagay-bagay, at iba tingin mo ay kumportable pagpunta off at pagtingin sa mga babasahin at paghahanap ng karagdagang impormasyon. Kaya, hayaan mo akong magbukas ng isang talagang simpleng halimbawa sa una, at ipakita sa iyo kung ano na ang ganito ang hitsura, at pagkatapos ay bibigyan namin ng break down na ito nang kaunti pa. Kaya ito dito, hayaan mo akong makakuha ito tumatakbo. So, ako ngayon ang aking mga application na tumatakbo. Pupunta ako upang buksan ang Safari, at ito ay tumatakbo sa aking mga lokal na host. Kaya lang ako pagpunta sa gawin ito ng mas malaki. Ngunit localhost: 5000 At kaya, sa ngayon, ang lahat ng ito ay, kapag binisita mo ang mga website, ito mga print out "Hello Flask," na kung saan ay hindi sobrang kapaki-pakinabang, ngunit sa palagay ko ay malamig-lamig na sa maliit na file dito, kami ay may isang tumatakbong web server na pag-print out ang isang bagay. Kaya, sabihin aktwal na hitsura sa code para sa isang segundo, at ito break down nang kaunti. Mabuti para sa lahat ng tao dito ay ang laki? So, sana, ikaw ay medyo kumportable ang paggamit ng Python. Ako ipagpalagay na maaari naming tumingin sa ang Python at basahin sa pamamagitan nito. Kung mayroon kang anumang mga katanungan tungkol sa kahit ano, maaari ko ring pumunta sa paglipas na. Kaya ang unang linya ay, mula sa prasko, import namin, prasko na may malaking titik na "F" na kung saan ay uri ng lahat ng mga pangunahing katangian na kailangan mo. Tuwing ikaw ay sumusulat isang file at paggamit ng prasko, ikaw ay pagpunta sa nais mag-import na, dahil lang na may lahat ng mga pangunahing bagay. Ang susunod na bagay ang ginagawa namin, ay namin tawagan ang function na ito Flask, makatarungan lumikha ng isang app na bagay, at ikaw ay palaging pagpunta sa nais na gawin iyon. At pagkatapos, tumatalon pababa sa ilalim ng mabilis, ang bahagi na ito dito ay, 'if_name _ == "_ main_"' na kung saan ay uri ng isang Python convention. Kaya ito ay execute lamang kung ikaw tumakbo ang file na ito nang direkta gamit ang Python. Pagkatapos, tumawag app.run namin, na kung saan ay talagang simulan ang app pagpunta. Kaya, na ang pangunahing istraktura na magkakaroon ka sa anumang Prasko application, ay magkakaroon ka ito app = prasko (_NAME_), at pagkatapos app.run. Kaya, ang dalawang bagay na mayroon akong sa dito, ay kung ano ang tawag namin sa mga ruta. Kaya, sabihin makipag-usap tungkol ipaalam pagruruta nang kaunti pa. Kukunin ko bumalik sa slide. Kaya ang pinaka-pangunahing konsepto sa prasko ay routing. At ito ay ang mga ideya na ikaw ay magtalaga ng mga function sa sawa sa mga partikular na mga address sa iyong web page. Kaya, kahit kailan mo gusto upang lumikha ng isang bagong ruta, gamitin mo ito @ app.route function na dekorador. Kaya, kung hindi ka pamilyar sa function na decorators sa Python, ito ay ang konsepto na ito na Hinahayaan kang kumuha ng isang function at palibutan ito sa ibang bagay. Kaya talaga, kung ano ang ibig dekorador, na ito ay tumatagal ang pag-andar na ito sa ibaba, at ito ay nagdadagdag ng karagdagang impormasyon sa mga ito, ngunit kung ano ang tunay na Flask ay gumawa na mangyari ay hindi super mahalaga, ngunit kung ano ang mahalaga, ay na bago ang ruta, ikaw ay ilagay ito @ app.route, at pagkatapos ay ang address ng ruta, kaya ang slash ay kung ano ang aming Nakita nang buksan lamang namin ang mga web page. Kaya na ang homepage. Ito lang ang ruta slash. At pagkatapos ay mayroon kang mga ito function. Ang pangalan ng function ay maaaring maging kahit anong gusto mo. Hindi nito kailangang palaging kailangang gawin sa ruta. At pagkatapos, ano man return ang function, ang dapat ibalik ang pag-andar ng isang string. At na string Maaari naglalaman ng HTML o anumang bagay, at iyon ay ang tunay na kung ano ang makukuha bumalik sa iyong web browser tulad ng HTML, at ito ay render na. Kaya ito ay ang parehong code iyon ay mula sa halimbawa na ako lang tumakbo, kaya kapag binisita namin slash, ito tawag ng Hello World function, kung saan nagbabalik lamang ng isang string, Hello prasko, at na ang makakakuha ng naka-print sa screen. Kaya may isa pang halimbawa, na kung saan ay, kapag binisita mo / hello, ito mga print out Kamusta Salita, na Dapat talagang sabihin, Hello World, ngunit magpanggap na ay intensyonal ipaalam. Kaya ng hilahin na up tunay na mabilis na ipaalam. Kaya kung pupunta ka sa localhost / hello, ito ngayong mag-print sa ibang bagay. Kaya na lang ang isang mabilis na halimbawa ng kung paano maaari kang lumikha ng dalawang magkaibang mga ruta. Kaya, sa ngayon ito ay hindi sobrang kapaki-pakinabang, diyan ay hindi isang buong maraming na maaari mong gawin, maaari mo lamang gawin ang lahat na may pagkakaroon ng iba't ibang mga pahina ng HTML, at kapag bumisita ka sa isang partikular na pahina ay naglo-load lang ito sa pahina. Kaya tingnan natin ang ilang mga karagdagang kapaki-pakinabang na bagay na maaari mong gawin. Kaya, ang isang bagay na maaaring mayroon ka napansin sa halimbawa na ako hinila up, ay na ako ay app.run (debug = True). At kaya, kung ano ang mga ito debug argument ay, ay na kapag nagpatakbo ka ng iyong web server, kapag ikaw ay nasa iyong mga application, kung babaguhin mo ang isang file, ito ay awtomatikong i-reload ang server. At kaya hindi mo talaga kung restart Python, na kung saan ay sobrang kapaki-pakinabang. Maaari ko bang ipakita na. Hayaan akong makuha ang aking code may typo sa loob nito, at magpanggap na typo ay ilagay doon sadyang para nakapagtuturo layunin. Kaya sabihin magdagdag ng ito pabalik sa. Kaya ngayon sinasabi nito Hello World. Ay i-save ko ito. At kung hilahin namin back up mga terminal, makikita mo sabihin na ito ay i-restart, dahil nakita ito sa isang pagbabago, at kaya ngayon kapag reload namin ang pahinang ito, ito ay i-print out ang tamang bagay. Kaya debug ay sobrang kapaki-pakinabang para sa na. Gayundin, kung mayroon kang anumang mga uri ng isang crash, kaya hayaan mo akong gumawa ng pag-crash ang application na ito sa pamamagitan ng pagkakaroon ng hindi ito ay babalik ng isang string. Kaya, sabihin kung ito lamang bumalik None para sa ilang kadahilanan. At pagkatapos ay kapag binisita ko ang pahina, ito lamang crash, ngunit ang server ay hindi lang basta pag-crash, ito ang tunay na nagbibigay sa iyo ng isang sobrang kapaki-pakinabang sa likod bakas ng lahat ng bagay na nangyaring mali. At kung ano ang talagang maganda, ay na sa anumang hakbang na ito sa trace back, maaari mong buksan up ng isang interactive magbigay ng pera dito, at ang uri ng mga print out kung ano variable na gusto mong tingnan ang. At kaya debugging ay talagang kapaki-pakinabang para sa pag-uunawa out kung ano ang nangyayari sa iyong server, sa halip na lamang ang nakakakita isang bagay sa PHP tulad ng isang 500 panloob error ng server, na kung saan ay sobrang walang silbi. Ang isang bagay na dapat malaman, ay na kung inilagay mo ang iyong app online kaya makikita ng publiko, ikaw hindi mo nais na mag-iwan ng debug mode on, dahil ang mga tao ay maaaring aktwal na gamitin ang console na na ako nagpakita sa iyo upang maipatupad arbitrary code. Kaya maaaring i-print ang mga ito out tulad ng anumang lihim na code na mayroon ka sa doon, maaari silang tumingin sa eksakto kung paano ang iyong website ay gumagana. Kaya ito ay talagang kapaki-pakinabang para sa pagsubok, ngunit palagi tiyakin na kumuha ng ito bago nag-publish ka ng kahit ano online. Kaya kapag ikaw ay gumagamit ng isang bagay tulad ng PHP, may mga ideya na ito na maaari mong ipasa impormasyon sa pagitan ng mga pahina ng web sa pamamagitan ng paglagay ng impormasyon na talagang sa URL, kung saan ay isang Kumuha ng kahilingan, ngunit sa prasko, maaari mong talagang gawin ang isang bagay uri ng mga tulad nito, sa pamamagitan ng pagkakaroon ng isang ruta na may isang variable bilang bahagi ng mga ito. Kaya kung titingnan mo ito Halimbawa sa screen dito, kami ay may isang ruta na ('/ hello /'), at sa gayon, kung bisitahin mo / hello / bagay, na ang isang bagay ay pagpunta sa aktwal na makakuha ng napuno sa variable na pangalan. At pansinin na ang pag-andar na nanggagaling sa na ruta Wala na kumuha sa mga parameter pangalan, upang ito ay talagang makakuha ng lumipas sa function. At pagkatapos, sa sandaling ikaw ay sa loob ng na function, maaari mong ituring na tulad ng isang normal na Python variable, at kaya pagkatapos, ito ay i-print out Hello, at ito ay punan ang pangalan gamit ang ilang mga string formatting. Kaya si variable bahagi sa isang routing, gamitin mo ang angle bracket pagmamarka. At opsyonal, maaari mong gamitin ang kung ano ang tinatawag na isang converter. At kaya, kung ikaw ay ilagay ito annotation sa colon, maaari mong tukuyin na ito ay isang int, o isang float, o landas, at ito ay awtomatikong i-convert iyon. Maaari mo ring gawin ang mga conversion sa loob ng Python function, sa pamamagitan lamang ng paggamit ng isang cast, ngunit kung minsan ay kung Gusto mo upang matiyak na ito ay isang int, maaari mong ilagay na rule conversion sa doon. Kaya sabihin pull up ng isang halimbawa ng ilang mga alituntunin variable. Kaya dito, ito ay may parehong basic istraktura sa mga mula Prasko import Flask, ang app = prasko (_NAME_), at pagkatapos ito ay tumatakbo sa dulo. Mayroon kaming mga dalawang magkaibang variable ruta dito. At ang unang isa, ay ang isa na ako ay nagpakita ng sa slide, na kung saan ay na ito lamang ay tumatagal sa isang pangalan string at ito ay i-print out Hello, Name. At pagkatapos, ang pangalawang isa ay gumagamit ng conversion. Kaya ito ay awtomatikong i-convert ito sa isang int, at pagkatapos ay i-double ang int, at i-print out na. At, hindi namin gawin ang anumang uri ng conversion sa loob nito dahil Prasko siyang bahala sa mga iyon. Kaya sabihin makakuha ng ito tumatakbo. Kapag mayroon kang isang Flask application na tumatakbo, maaari mong Kontrolin-C sa labas ng ito upang itigil ang server na tumatakbo. At pagkatapos ay ako patakbuhin ang mga variable. Kaya sabihin pumunta sa localhost / hello / ezra at sana, ito ay kamustahin sa akin. Kaya ito ay kinuha sa pangalan ko, sa mga variable ruta, at pinuno ito sa dito. Kaya ko makikita ring ipakita ang isang mabilis na halimbawa ng pagdodoble. Kaya't kung ikaw ay pupunta sa / double / 3, ito ay i-print out 6. Kaya ito nag-alaga sa ang mga conversion para sa amin. Kaya maaari mo ring gawin ito sa float, at espesyal na bagay, kung kailangan mong tukuyin ang isang bagay tulad ng ng isang landas, na hinahayaan itong tanggapin slashes, ngunit na dapat hindi karaniwan ay hindi isang isyu. Sa ngayon kami, mayroon pa rin lamang ay bumabalik string, na kung saan ay hindi masyadong kawili-wili. Kami ay talagang maaaring bumalik literal na string ng HTML. Kaya sa mga code maaari naming ipasok ang isang bagay tulad ng mga b-tag upang gawin itong bold, ngunit karamihan ng panahon na kayo hindi tunay na gusto na pagsusulat ng HTML code sa iyong Python code. Ito ay makakakuha ng talagang marumi, at ito ay hindi isang magandang panahon. Flask ay nagpapahintulot sa amin upang paghiwalayin ang mga HTML sa kung ano ang tinatawag na ang Template, at kaya kung ang iyong iniisip sa mga tuntunin ng mga modelo ng MVC na ikaw ay pamilyar sa, sana, mula sa trabaho may CS50 Finance nang kaunti, maaari mong isipin ang Python file bilang mas ng Kontroler, kung saan sila ay nakikipag-ugnayan sa kahit anong modelo ng data na maaaring mayroon ka. At pagkatapos ay tumatawag sila upang Views at pagpasa ng impormasyon sa View na upang punan ang impormasyon sa HTML na nangangailangan nito. At kung ano ang tawag namin sa mga Views mga Template sa class. Kaya Prasko gumagamit ng ibang Python module na ito ay awtomatikong ay install kapag PIP mong i-install Flask tinatawag Jinja, kung saan hinahayaan kang idagdag ang mga anotasyon sa HTML na nakikita mo sa screen, na nagbibigay-daan ilagay mo sa mga bagay na tulad conditionals, at mga loop sa HTML. Kaya mukhang isang maliit na bit tulad ng kung paano mo Maaaring gamitin ang PHP sa loob ng isang HTML file, ngunit ito ay lamang kapag ang Flask Naghahain up server ang file na HTML, ito ay tatakbo templating engine na ito at i-parse sa pamamagitan na ito at punan ang mga bagay sa. Kaya may render_template function na Flask na maaari mong makita sa ibaba dito. At kaya kapag binisita mo ang pahinang ito, ito ay render ito hello.html Template, at pagkatapos ay punan ang HTML na pahina. Tumakbo lang ito real Kaya sabihin mabilis, at makita kung ano ang mukhang, at pagkatapos ay kukunin ko na pumunta sa pamamagitan ng isang maliit na piraso nang mas detalyado. Kaya, ang iyong Template ay pagpunta upang pumunta sa isang Template folder. Ito ay awtomatikong pagtingin sa loob ng mga Folder Template para sa na Template. Kaya buksan up ni ito ipaalam. Kaya, kukunin ko na tumakbo ang mga halimbawa Templating. Kaya kung pumunta ako sa / hello / ezra, ito ay ang kakila-kilabot, kasuklam-suklam marquee tag na kong ilagay sa. Napakabuti, napaka-dynamic. Ako ay isang malaking fan. Ngunit ano ang mangyayari kung Pumunta ako lamang, / hello? Kaya lang ang sinasabi nito Hello World. Hindi ko ipasa ito ng isang pangalan, at pinuno ang mga ito sa awtomatikong. Kaya sabihin makita kung paano ito ay na, at kung paano maaari naming kumuha alisan ng marquee siguro. Kaya dito, ito ay isang uri ng isang kawili-wiling halimbawa ng, kung ikaw ay pamilyar sa kung paano lumipat pahayag ng trabaho sa isang wika. Sabihin ito ay uri ng tulad ng, na uri ng isang pagbagsak sa pamamagitan ng, kung saan ang tunay na ikaw na naka-attach sa dalawang iba't ibang mga ruta sa parehong function. Kaya isama namin ang / hello ruta at ang hello ruta / / name na Hello, at tukuyin natin using-- hinahayaan kang sawa tukuyin default na function arguments-- kaya kung walang pangalan, kaya kung pumunta kami sa makatarungan / hello, ito ay awtomatikong i-filter sa pangalan ay katumbas ng Wala. Kaya nga, nagbibigay kami ng mga Template may pangalan = pangalan, kaya ito ay pumasa sa mga parameter na pangalan katumbas ng pangalang ito function na parameter, sa Template. Iyon pa rin ay hindi ipaliwanag kung paano ang pagpapasya kung upang i-print ang Hello World, o i-print ang aking pangalan. Kaya sabihin aktwal na hitsura sa mismong Template, at makita kung saan na ay nagmumula. Kaya, sa loob ng Template, namin talagang may ilang mga kondisyon na lohika, kung saan ang ilang mga tao ay magtaltalan, na talagang hindi dapat magkaroon ng isang pulutong ng mga kondisyon logic sa loob ng iyong Template mismo. Ito ay dapat na higit pa sa loob ng Controller, ngunit para sa halimbawang ito ito ay isang bagay na medyo maliit. Kaya dito, kami ay suriin, kung ang pangalan, kaya kung ang pangalan ay hindi katumbas sa None, kung ang isang pangalan ay talagang ipinasa sa, pagkatapos namin sabihin Hello, Pangalanan sa header at ang malaking tolda, ang lahat ng ito normal HTML, sa kabilang banda, kami ay i-print out Hello, World lang ng normal. Kaya ng ilang mga bagay-bagay sa paunawa dito tungkol sa kung paano i-format ang templating, ay na, ang lahat ng mga kondisyon na pahayag, uri ng tulad ng kung paano namin PHP ito kapag gusto mong ipasok ang ilang PHP, mong gamitin ang mas mababa-kaysa tanong mark, ito ay isang uri ng kahalintulad dito kasama ang {%. Kaya dito, ay ang aming kondisyon code. At pagkatapos ay, kapag ang tunay na nais na literal na suriin ang isang bagay, at i-print ito out sa screen, ikaw ay gamitin ang double braces. Kaya dito ay ang double braces, at pagkatapos ay tukuyin natin pangalan, kaya sa loob ng na, ito ay suriin upang ang pangalan ng variable, na ay naipasa sa mula sa render function na template, sa halip na pag-print lamang out, kung namin nakuha ko mapupuksa ang mga ito, ay ito lamang i-print out ang salitang "pangalan." Kaya, na ang isang bagay upang panoorin ang para sa. Kaya isa pang bagay na notice ay na, kapag tayo nais na gamitin ang render_template function, ang tunay na kami ay may upang i-import ito tahasang mula prasko. At ito ay isang halimbawa ng modularity ng prasko, na hindi mo na kailangang mag-import mga bagay na hindi mo na kailangan. Maaari mo lamang dalhin sa function ka talagang kailangan, na kung minsan nice, kaya hindi mo kailangang magkaroon ng lahat ng mga function upo sa paligid na hindi mo ginagamit, kundi pati na rin, kung nakalimutan mo na ikaw kailangan mag-import render_template, ikaw ay malamang na makakuha ng isang babala na ipaalam sa iyo ang tungkol sa. Kaya, iyon ay templating. Kaya, kami ay ipinapakita kung paano mag gumawa ng mga simpleng mga pahina ng web, at magdagdag ng isang maliit na kaunti pang logic na ito, sa mga tuntunin ng mga variable routing. Ito ay nagbibigay-daan ka gumawa ng iba't ibang bagay batay sa kung ano ang URL kang pumunta sa, at din pagkatapos, bigyan ang HTML ng isang maliit na kaunti pang-unawa sa mga tuntunin ng kung paano mo nais na mag-render ng mga bagay. Hindi mo na kailangang ilagay ang lahat ng iyong HTML sa iyong Python, ngunit para medyo marami bawat web application, ikaw ay pagpunta sa gusto ng ilang mga uri ng modelo ng data na nauugnay dito. At kaya ayon sa kaugalian, ito gagawin isang bagay tulad ng isang SQL database. At maaari mo lamang makipag-ugnayan nang direkta sa SQL. Python ay, sa tingin ko ang tawag dito. SQLite 3. Maaari mong i-import lamang SQLite 3 at execute SQL query direkta, ngunit hindi ko alam tungkol sa iyo, ngunit ko talagang hindi gusto, lang, pagsulat ang SQL query. Ito ay may kaugaliang upang makakuha ng talagang mahaba at kumplikado. At ito, isang bagay na Gusto kong gamitin ang kung ano ang kilala bilang isang ORM, kung saan ay isang object-pamanggit mapping. At ang punto ng isang object-pamanggit mapping, ay na may mga dalawang magkaibang paraan na maaari mong isipin ang tungkol sa mga database. Kaya ang mga halimbawa na Professor Malan karaniwang gumagamit sa klase, ay ang Excel table, kung saan ang ikaw ay may mga hilera at mga hanay na ito, at iyon ang talagang kapaki-pakinabang para sa kung paano ito ay kinakatawan sa SQL at kung paano nakikipag-ugnayan ka sa mga ito, ngunit isa pang paraan na ito ay aktwal na kapaki-pakinabang na mag-isip tungkol sa mga ito kung minsan, ay sa mga tuntunin ng mga klase at mga bagay. Kaya sa halip ng pag-iisip ng bawat talahanayan bilang pagkakaroon ito hilera na may mga tiyak na na impormasyon, maaari mong aktwal na tingin ng mga ito bilang bawat talahanayan ay isang klase, at pagkatapos ay sa bawat pagkakataon ng mga klase ay may tiyak na mga katangian. Kaya, sa halimbawang ito, ang mga pagkakataon ng mga ang klase ay ang mga hilera sa talahanayan, at pagkatapos ay sa bawat ari-arian ng gagawin maging isang haligi sa talahanayan. Kaya, ang ORM na gusto ko gamitin ang tinatawag peewee. Ito ay talagang maliit, uri ng tulad ng prasko. Sa tingin ko na sila ay pumunta rin magkasama, ngunit may mga maraming iba pang mga ORMs na maaari mong gamitin. Ang isang mas popular na ang isa ay kilala bilang SQLAlchemy, at hindi ko matandaan kung bakit ako orihinal Pinili peewee paglipas SQLAlchemy, o gusto kong sabihin sa iyo kung bakit ako sa tingin mo ay ang pinakamahusay na isa, ngunit lamang namin ay pagpunta sa gamitin ito isa dahil alam ko kung paano gamitin ito. Kaya, isang tanong ay, kung bakit dapat abala sa iyo gamit ang isang ORM, sa halip ng direkta lamang pagsulat ng SQL query? At sa tingin ko ang pinakamahusay na mga kaso, ay na hindi mo talaga kailangang magsulat ng SQL query. Ito ay lubhang mas madaling, tulad ng makikita ko sa iyo, upang gumawa ng mga bagay tulad ng pagpili, insertion, pagtanggal, lalo na ang paglikha ng mga talahanayan. Ito ay lubhang mas madaling magsulat ng isang istraktura ng klase, kaysa ito ay upang buuin ang isang Lumikha Table statement, ngunit ang isang bagay na dapat malaman, ay na ang ORM ay subukan ang kanyang pinakamahusay na upang malaman kung ano ang pinaka mabisa SQL query ay magiging, ngunit minsan ito ay nakakakuha ito mali. At lalo na kung ikaw ay nagtatrabaho sa isang malaking database, Maaari mong mapansin na ang isang query na dapat ay tumakbo ng mabilis, ay aktwal na pagkuha ng mas matagal. At kung titingnan mo sa ilalim ng hood sa kung paano ang ORM ay interpret na sa SQL, maaaring ito ay paggawa ng isang bagay talagang walang katotohanan, dahil lang sa ito ang uri ng mga gestured iyong intensyon mali. At, nagkaroon ng mga beses kung saan Nagkaroon na ako upang i-override ito, at lamang gagawin ang aking sariling mga SQL query, lamang dahil ito ay pag-parse sa isang kakaibang paraan. Kaya, ay may ilang mga overhead, sa loob lamang ng mga paraan na ito compiles ang iyong pahayag down sa SQL. So, tingnan natin sobrang mabilis sa ipaalam isang simpleng halimbawa ng isang modelo ng data na maaari mong gamitin. Kaya, ito ay Python code, at sa gayon ang unang bagay na gusto mong gawin ay mula peewee import *. Kaya, hindi katulad ng prasko, kung saan mayroon kang sa lahat ng mga indibidwal na mga module, at nais mong mag-import ng prasko, at magsulat ng isang Template, at ilang iba pa na namin makita sa ibang pagkakataon, mula sa peewee, Maaari mong i-import ng lahat ng bagay, dahil sa ito ay isang magandang maliit na library. Kaya, ang unang bagay na nais mong gawin, ay tunay na lumikha ng database na ito object. Kaya, mayroon kang db = SqliteDatabase, at pagkatapos ay ang pangalan ng iyong database. At ito ay tunay na lumikha ng isang database object na maaari mong makipag-ugnayan sa, na may peewee. At pagkatapos, kami ay ang aktwal na modelo na gusto naming gumawa. Kaya ang talahanayan gusto naming gumawa. Kaya, sa loob ng peewee, ang bawat klase ay may sariling table sa loob ng iyong database. Kaya, ang lahat ng mga klase mamanahin mula sa base model, at ang mga modelo capital M ay isang bagay na tinukoy sa peewee. Kaya, ang lahat ng iyong mga modelo ay dapat na magmana bilang kanilang pinakamataas superclass, sila ay dapat na magmana mula sa modelo, ngunit kung ano ang talagang cool, ay na maaari mong tunay ang iyong modelo magmana mula sa bawat isa. At ang isang pulutong ng mga oras, ang iyong modelo data ay hindi kinakailangang gumawa ng isang magandang mana hierarchy, ngunit mga oras kung saan ang kanilang ginagawa, ito ay talagang maganda, dahil ikaw ang model likas sa isa't isa. Kaya, natukoy namin ito klase 'mag-aaral,' na nagmamana ng isang modelo, at ito ay may tatlong katangian. Ito ay may isang ID, na kung saan ay isang PrimaryKeyField, na ay isang bagay na ibinigay sa pamamagitan peewee, pangalan ay isang CharField, at isang grade ay isang IntegerField. Kaya ito ay maaaring o hindi maaaring maging paano CS50 tunay na mga tindahan sa lahat marka ng mga estudyante. Hindi ito, ngunit ito ay kung paano ko gagawin iyon. At pagkatapos na ito ay, sa loob ng klaseng ito, at ito isang bagay na maaari mong gawin sa mga Python, maaari kang magkaroon ng nested mga klase. At ito ay isang bagay na na kinakailangan ng peewee. Kaya, ang klase Meta, mayroon kang upang tukuyin na ang database ay katumbas ng object na nilikha namin sa itaas. At ito sinasabi kung ano ang file ay ang talahanayan na ito talagang pagpunta sa ay nakapaloob sa. Kaya ito ay isang bagay na ikaw ay may na gawin sa loob ng lahat ng iyong mga modelo. Ikaw lamang ang may upang tukuyin ang na sakop ng Meta klase na database ay katumbas db. Kaya kung ano ako ay karaniwang gawin, kung mayroon akong ng grupo ng mga iba't-ibang mga modelo, ay na mayroon akong isang base modelo, na ako ay karaniwang tumawag lamang sa "base model" na may Meta class, at itinatakda nito ang database katumbas db. At pagkatapos ang lahat ng aking mga kasunod na mga modelo magmamana mula sa na base class. At pagkatapos ay hindi ko kailangang mag-alala tungkol sa pagtatakda ng Meta class. Kaya, kapag ito ay talagang makakakuha ng naipon down sa isang SQL na pahayag, mukhang ang mga bastos na bagay pababa dito, "Gumawa ng mesa ang mag-aaral ID integer, " kahit ano. At, sa tingin ko na ito ay mas maikli, ito SQL query karapatan dito, ngunit kung titingnan mo sa klase na ito dito maaari mong makita kung ano mismo ang nangyayari. Makikita mo kung anong uri ng mga patlang may mga, kung ano ang kanilang ay tinatawag na, at sa gayon, sa tingin ko na ang tumitingin sa Python code ay mas nababasa na marami kaysa sinusubukang isulat ang SQL query. Kaya, upang aktwal na gamitin ang database, mayroon kaming upang kumonekta sa ito sa loob ng Python. So, kadalasan ako magsulat ng isang function na tinatawag na initialize_db na ang dalawang bagay. Ito ay tumatagal sa database object db at ito nag-uugnay sa mga ito, na bubukas lamang up section sa database. Kung ikaw ay lamang na tumatakbo kahit na website sa iyong lokal na computer, ito ay hindi isang super sang-ayon sa mag-alala tungkol sa pagkonekta at disconnecting, ngunit kung ikaw ay nagpapatakbo ng ito sa isang website, maaari mo gusto mong siguraduhin na, kapag ang isang user nag-uugnay sa mga ito, kapag isinara nila sa labas ang website, tanggalin sila upang ikaw hindi magkaroon ng isang grupo ng mga tao na nakakonekta sa iyong database ng sabay-sabay. At pagkatapos, kapag ikaw ay kumonekta sa database, na nais mong tawagan db.create_tables, at ilista ang mga modelo para sa kung ano ang gusto mo upang lumikha ng mga talahanayan. Kaya dito, gusto ko lang na gumawa nito para sa mag-aaral na ito. At pagkatapos ay, kung ano ang mahalaga, ay upang tukuyin safe = True karamihan ng oras. Kaya kung ano ang pahayag na ito ay gawin, ay na ito lumilikha ng mga talahanayan para sa model ng mag-aaral, ngunit lamang kung talahanayan na may hindi Nalikha na. Iyon ay kung ano ang ligtas na tumutukoy. Kaya ito ay hindi papatungan ang iyong umiiral na table, ito ay lumikha lamang ng isang bagong mesa kung may ay hindi isa doon. Kaya, maaari mo lamang lumikha ang mga talahanayan beses gamit ang SQL. At pagkatapos ay mayroon na database sitting doon, at pagkatapos ay kumonekta sa bawat oras, ngunit ito ay karaniwang maganda lang na ilagay ito sa create_tables tawag, nang sa gayon, kung sakaling tatanggalin mo ang iyong kapag database patakbuhin mo ang iyong web muli app, ito ay muling likhain ito. Kaya, tiyakin na ligtas na lang ay tinukoy upang maging tunay, o makikita mo ang iyong data lamang pagkuha ng clobbered bawat oras. At pagkatapos ay, maaari mo lamang tumawag initialize_db na magtatag isang koneksyon, at lumikha tables kung kinakailangan. Kaya, ang pinaka-karaniwang bagay na kayo ay nais na gawin, o isa sa mga pinaka-karaniwang mga bagay-bagay, ay ang aktwal na ipasok bagay sa iyong database. At ito, sa halip ng pagkakaroon sumulat ng isang insert SA pahayag sa lahat ng ang mga halaga na tinukoy, Maaari mong aktwal na tawag function sa ang mag-aaral klase. Kaya, kapag lumikha ka ng isang klase na nagmamana mula model, ito ay may ganitong lumikha method. Kaya, gagawin mo klase name.create, at tukuyin mo ang mga parameter na nais mo upang pumasa sa. Kaya, kung gusto kong magdagdag ng ilang mga mag-aaral sa aming mga halimbawa CS50 grade book, Kailangan ko bang ilagay sa David, na may isang napakahusay na grado, siya ay may 95. At sa sarili ko, kung sino ang hindi paggawa ng kaya na rin sa CS50, mayroon akong isang 50. At ito, ang ganda ng bagay tungkol kung ano ang ibig lumikha ng function, ay na ito ay nagbabalik ng mga halimbawa, o ang hilera, na ito na nilikha sa loob ng mga table, at kaya pagkatapos mong itabi na sa isang variable, at gumagana sa mga ito sa ibang pagkakataon. Maaari mong baguhin sa paligid, na Kukunin ko ipakita ang isang halimbawa ng. Pansinin na ako ay hindi kailangang tukuyin ang ID, dahil ito dahil ito ay ang PrimaryKeyField, ito ay awtomatikong paglakas ito kung hindi mo tukuyin ang mga ito. At, sa katunayan, ikaw ay malamang na hindi dapat tukuyin ito, dahil baka hindi mo sinasadyang gumulpi ID ibang tao. At nais mong gumawa ng siguraduhin na ito ay natatangi. Kaya, talaga, ang pinaka karaniwang bagay na nais mong gawin, ay malamang na piliin ang ng database sa sandaling ikaw magkaroon ng isang pulutong ng mga impormasyon sa doon. At kaya, kung nais mong makakuha ng lahat ng bagay, kaya ang katumbas ng piliin star mula statement mag-aaral, ito magiging student.select lamang. At iyon ay magbibigay sa iyo ng likod ng isang array sa lahat ng mag-aaral ng mga bagay sa loob nito na umulit ka ng higit sa gusto mo. Maaari kang makakuha ng mga bagay-bagay sa labas ng ito. At halos lahat ng oras, ikaw hindi lamang ang nais na gawin ang piliin, talagang gusto mong tukuyin ang isang bagay. At ito, maaari mong kadena sama ang mga tawag na function, tulad ng kung paano gagawin mo chain sama-sama ang mga pahayag sa SQL. Kaya maaari mong gawin student.select (). Kung saan sa halimbawang ito. At pagkatapos ay, maaari mong tukuyin ang mga kondisyon, lamang gamit ang normal Python Booleans upang suriin ang mga bagay. Kaya, sa kasong ito, nais mong limitahan kung ano ang iyong pagpili sa, kung saan student.grade ay katumbas ng 50, at student.name ay katumbas ng Ezra, kaya lang na kumuha ako sa labas ng ito. At mapansin, isa talagang mapaglalang bagay dito ay na, kung nais mong tukuyin ang isang at / at o ang o / o, sa Python, karaniwan mong ginagamit, Sa tingin ko ang salitang "at" talaga, ngunit dito mo gamitin ang solong ampersand, na kung saan ay karaniwang isang bitwise operator, ngunit sa ganitong espesyal na kaso, lamang ang paraan peewee ang ginagawa nito, gamitin mo ang nag-iisang ampersand upang tukuyin "at." Iyan ay isang bagay na Ako makakuha ng mixed up ng isang pulutong, ngunit ito ay hindi dumating up na marami sa pagsasanay. At pagkatapos, sa sandaling mayroon ka ng lahat ng mga ang mga mag-aaral sa labas ng database, sa sandaling nagawa mo na ikaw ay piliin ang at ang iyong mga damit o kahit na ano, Maaari mong gamitin ang isang foreach loop, tulad ng normal sa Python, sa anumang uri ng iterator o sa anumang uri ng array. Kaya maaari mong gawin, para s sa student.select (). whe re (Student.grade <75), at iba kalooban ito umulit sa bawat mag-aaral sa talahanayan na ang grade ay mas mababa sa 75, kung saan sa kasong ito, ay sa akin lamang pa rin. At pagkatapos ay maaari mong gawin ang isang bagay sa loob ng na loop, tulad ng magpadala sa akin ng isang email at sabihin sa akin na talagang buksan sa aking Problema Sets. Kaya, isa pang bagay na maaari mong gawin, ay ito ay tunay madali i-update ang mga hilera sa loob ng table. Kaya, tandaan bumalik dito, iyong kapag ipinasok ko, Kinuha ko ang halaga na ibinalik ng student.create, at itinalaga ko ito sa pangalan na tinatawag na Ezra. At kaya ngayon, maaari mong baguhin ang mga halaga sa loob ng pagkakataong iyon, tulad ng gagawin mo sa isang normal class sa Python. Kaya maaari mong itakda ezra.grade = 95 at na i-update ang mga lokal na kopya, ngunit kung nais niyong magkasala ang pagbabagong iyon sa database, mayroon kang tumawag ezra.save, kaya tinatawag mo ang .save paraan sa halimbawa. At kaya ngayon, ako ay matagumpay na nabago ang aking sariling mga grade loob ng database. Kaya, pagkatapos sabihin natin na ako makakakuha ng nahuli pagbabago ng aking grade sa loob ng database. Professor Malan ay marahil pagpunta sa gusto mong tanggalin mo ako sa mga klase, at sa gayon maaari mong tawagin ang .delete halimbawa paraan lamang sa bagay na iyon. Kaya, kung nais mong pumunta sa bumalik sa loop na ito dito, at talagang, sa halip ng pagpapadala ng mga email sa lahat ng mag-aaral na grade ay mas mababa sa 75, gusto mo bang tanggalin ang mga ito, sa loob ng loop dati mo tumawag s.delete halimbawa. At ang huling bagay na nais mong gawin, ay tuwing ikaw ay magtatag ng isang koneksyon, at tapos ka na sa iyong trabaho, na nais mong tawagan db.close, kung saan db ay na database bagay na namin ay may bago. At gusto mong tiyakin na ang ang lahat ng bagay ay makakakuha ng sarado labas ng. Cool. Kaya ngayon, mayroon akong isang halimbawa ng application. Na uri ng mga pre-ginawa ko lahat ng bagay lamang upang doon ay hindi anumang mga live na coding mga pagkakamali, ngunit maaari naming sa pamamagitan ng paglalakad ito at makita kung paano mo ilagay Flask at Peewee magkasama, at gumawa ng isang simpleng app. Tawag ko ito CS50 sigaw, at ito ay uri ng isang simpleng platform blog. Kaya, una, makikita ko bang patakbuhin ang mga ito at ipakita kung ano ang mukhang, at pagkatapos ay maaari naming tumingin pa sa mga code. Okay, patakbuhin lang ito kaya hayaan. Cool, kukunin ko na gawin ito isang maliit na piraso ng mas maliit. Ito ay hindi masyadong pretty, dahil lang Hindi ko gumawa ng isang pulutong ng CSS, ngunit kung ano ang ginagawa nito ay, ito ay database na ito ng mga post sa blog, at ito ay pumunta sa pamamagitan ng lahat ng mga ang mga ito, at ito ay ipakita ang mga ito sa pahina sa pagkakasunud-sunod ng mga pinakabagong. At kaya ito ay ang ilan post lang na ako ay naka-save sa database. Kaya kung nais namin na lumikha ng isang bagong post, maaari naming pumunta sa Magdagdag ng Bagong Post, at maaari naming ipasok ang pamagat ng post, kaya ang isang bagay tulad ng, CS50 seminar. Wow, talagang tinatangkilik ang mga seminar. Cool. Pagkatapos ay pindutin mo post, at ito ay Ire-redirect ka pabalik sa home page, at pagkatapos ay makikita mo na ang pinakabagong post ay idinagdag. At mayroon pa rin kaming lahat ang mga naroon. Kaya ngayon, sabihin hakbang sa pamamagitan ng lahat ng ipaalam code at tingnan kung paano ito ay ipinatupad. Kaya, sa tingin ko ang unang bagay na sabihin tingnan ang, ay talagang ang mga modelo. Ang isang pulutong ng mga oras, kapag ikaw ay pagdisenyo ng isang bagay, Gusto mong mag-isip muna tungkol sa kung paano ikaw ay pagpunta sa kumakatawan sa iyong data, at pagkatapos ay disenyo ng mga bagay sa paligid na, upang ang lahat ng bagay na may katuturan. At iyon ay talagang kung paano ko ginawa ito kapag ako ay paggawa ng mga ito, Naupo ako at naisip, ano ang gagawin ko gusto sa isang post. Kaya, narito, kami ay ang parehong istraktura na ako ay pagbanggit nang mas maaga, kung saan tayo db = Sqldatabase ('posts.db'). Sa katotohanan, marahil ay hindi mo nais sa hard code sa mga database ng iyong pangalan. Na dapat na marahil ay isang parameter na naka-imbak sa isang lugar, baka sa isang config file, ngunit sa isang maliit na halimbawa na ito, okay lang na hard code na in. Kaya ngayon, kami ay may ito Post class, na nagmamana mula sa base model. At ito ay, muli, ang mga ID = PrimaryKeyField. Sa totoo lang, kung hindi mo tukuyin, kung ako aktwal got alisan ng ito, pagkatapos Peewee kami ang bahala sa awtomatikong paglikha na field ID, at ito ay awtomatikong gawin itong isang PrimaryKey, na Sa tingin ko ay talagang maganda, dahil kadalasan, na ang isang bagay na gusto mong magkaroon, pero gusto ko upang ilagay ito sa partikular, kaya lang ako tandaan na ito ay sa doon. Ngunit kung hindi mo tukuyin iyon, na magiging awtomatikong doon. Kaya nga, ako ay may isang petsa na kung saan ay isang DateTimeField, at ang lahat mga iba't-ibang larangan, kung ikaw tingnan ang peewee babasahin, ito ay magbibigay sa iyo ng isang listahan ng mga iba't-ibang uri ng mga patlang na maaari mong gamitin. Para sa nakararaming bahagi, ito ay kahalintulad sa kung ano ang nais mong makita sa SQL. Kaya may isang CharField, isang VarCharFields, textfields, na kung saan ay para sa napaka-haba teksto, tulad ng isang blog post potensyal na, DateTimeFields, DoubleFields, FloatFields, lahat ng mga bagay na tulad ng. At maaari mong ipasa sa iba pang mga argumento sa mga ito, na kung saan hindi ko tukuyin dito. Sabihin nating, halimbawa, ikaw ay hindi nais na payagan ang dalawang mga post na may parehong pamagat, maaari mong tukuyin ang isang bagay tulad ng mga natatanging = True, at ito lamang ang isang dagdag na parameter sa larangan na kapag ito compiles ito pababa sa SQL, ito ay tinukoy na ito ay may na maging kakaiba. Maaari mo ring tukuyin ang isang bagay tulad hindi null at ang lahat ng iba pang mga bagay karaniwan mong gawin sa SQL. Kaya, ito ay isang medyo simple modelo na may mga petsa. Pansinin dito, sa loob ng DateTimeField, Tinukoy ko kung ano ang default ay. Tinukoy ko ito upang maging datetime.datetime.now, dahil sa mga paraan na ito ay makakakuha ng sinusuri, ito ang tunay na sinusuri ang DateTime.Now kapag ito ay makakakuha ng ipinasok sa database. Sa tingin ko na, gusto ko i-double check na ito, ngunit kung ikaw ay isang bagay na tulad nito, at pagkatapos ay ito ay tunay na suriin na ang isang beses, at pagkatapos ay ang DateTime ay laging pareho. Kaya, lamang kung ikaw ay gumagawa ng isang bagay may datetimes, double check na ito ay pag-evaluate nang talagang makakakuha ng nakapasok, o iba pa ikaw ay maaaring maging nalilito. Ang pamagat ay lamang ng isang CharField, na mayroong ay mas arguments maaari mong ipasa sa pagtukoy ng eksaktong kung gaano katagal mo gusto mo itong maging, ngunit dito, hindi ito ay talagang mahalaga. At Text ay magiging ang teksto ng buong post, at iyan ay magiging isang TextField lamang dahil nais mong upang payagan ang mga ito upang maging isang medyo matagal na string. Pagkatapos kami ay may ito Meta subclass na lamang tumutukoy na gusto namin ang mga database kung saan ito ay aktwal na nagbukas sa na ang db object na mayroon kami dito. At huling bagay na kailangan nating dito, ay lamang ang function na ito na namin ang pagpunta sa gamitin mula sa aming pangunahing app upang magpasimula ang database upang kumonekta sa mga ito, at pagkatapos sa Lumikha ng talahanayan Post. Ngayon, tingnan natin ang pangunahing app mismo. Kaya ang isang ito ay ganap ng isang bit mas mahaba kaysa sa mga bago na nakita natin dati, ngunit sana ay hindi masyadong masama. Kaya, hayaan mo akong i-extend ito out. Sige. Kaya, mapapansin at ang top ko import ng buong bungkos ng iba pang mga bagay mula sa prasko na mayroon kaming hindi talagang makikita bago. At sana, maaari naming pumunta sa pamamagitan ng ang bawat isa sa mga ito ng isa-isa at makipag-usap ng kaunti pa tungkol sa kanila, pinagsunod-sunod sa pamamagitan ng halimbawa. Kaya, kami ay ang prasko, at ang render_template, na kung saan na nakita natin dati, ang hiling na bagay, na kung saan ay lumapit kapag tinitingnan namin ang kung paano ang form na aktwal na ako ay nagpapakita gumagana. Pag-redirect, na nagbibigay-daan sa pag-redirect ka pabalik mula sa Lumikha ng Bagong Post i-back sa orihinal na homepage, at pagkatapos ay URL, na kung saan ay isang bagay na nagbibigay-daan sa iyo malaman kung saan sa website ng isang partikular na pahina ay. Kaya nga, ang susunod na bagay na gagawin ko, ay ko import lahat ng mga impormasyon mula sa mga Models file na kami ay lamang ng pagtingin sa. At, oo. Kaya, sa ibang bagay bagong na nanggagaling up kapag ikaw ay pagharap sa, lalo na mga database, ay na maaari mong tukuyin ang isang function na ay makakakuha ng tinatawag na bago bawat kahilingan, at pag-andar na nakukuha tinawag ayon sa bawat kahilingan, gamit na ito request function na decorator app.before. At kaya ito ay naisasagawa nasaan ang function na ito ay. Na ito ay hindi kailangang maging tinatawag na bago kahilingan, ngunit kadalasan ay iyon ang isang bagay kapansin-pansin sa mga tawag na ito. Maaari mong tukuyin ang anumang mga function nais mong makakuha ng tinatawag doon, kaya tinukoy ko ito initialize_db function na nagkaroon kami pabalik sa Models file, kaya bago ang bawat kahilingan, ikaw Gusto upang kumonekta sa database. Mayroong dalawang magkaibang mga paraan na maaari mong gawin ito. Maaari mong gawinapp., I naniniwala ito ay after_request. At ang mga pagkakaiba sa pagitan ng after_request at teardown_request, ay na after_request mangyayari lamang kung ang kahilingan ay talagang ay may-bisa. At kaya, kapag lamang ang hiling ay matagumpay, kung walang nangyaring mali, ngunit teardown_request ang mangyayari sa kaso ng isang matagumpay na kahilingan, o sa kaso ng isang error. So, kadalasan, na nais mong gamitin teardown_request, maliban na lamang kung gusto mong gawin isang bagay, lalo iba't ibang sa kaso ng isang error. Ngunit lamang para sa pagsasara ng database, maging ito man ay magtagumpay o kung ito ay nabigo, ginagawa namin na gusto mong alisin sa pagkakakonekta mula sa database. Kaya ang tawag dito, db.close sa db object. Pansinin na ang teardown_request tumatagal sa isang exception. Kaya maaari mong suriin kung nagkaroon talaga ng isang error kapag ito ay isinasara down, ngunit dito, sana, may ay hindi isang buong pulutong ng mga error, kaya kami ay lamang ang uri ng hindi papansin na. Okay, at ang iba sa mga ito ay hindi masyadong masama. Kaya, kapag pumunta kami sa home page, render namin ito home.html Template na buksan up. Pass ay sa post pantay-pantay sa, at kung ano ang ay ay, tandaan na namin ang post na ito modelo, kaya piliin namin ang lahat ng mga post, at pagkatapos ay isa pang bagay na maaari mong gawin, maaari mong tukuyin ang SAAN sugnay, maaari mong tukuyin ang isang order sa pamamagitan ng, at kaya ginagawa namin lahat ng mga post na makakuha ng pinili, at pagkatapos kami order ng mga ito sa pamamagitan ng post.date.descending. At iyon ay tukuyin, nang sila ay talagang lumabas, ang pinakabagong isa ay magiging lubhang unang isa. At pagkatapos, ipasa namin na sa ang template home.html, kaya sabihin aktwal na magbukas na Template talagang mabilis, at kumuha ng isang pagtingin sa kung paano na gumagana. At ito ay hindi mahusay na HTML, ngunit sana, maaari naming tumuon sa mga Python. Kaya mayroong isang link sa Magdagdag ng Bagong Post, at kaya ito ang tumutukoy sa mga ruta sa loob ng prasko na tayo tukuyin, kung saan ay karapatan dito. Ito ang bagong ruta post, at tukuyin natin na hanggang dito. At nang sa gayon ay isang link na pagkatapos ay pumunta sa na ruta sa loob ng prasko server. Ang mas maraming mga kagiliw-giliw na bagay ay ito para sa loop dito. Kaya tukuyin natin na ito post parameter na ay dumaan sa render_template function, para sa bawat post sa post ni bagay na makakakuha ng lumipas sa. Gusto naming i-print out ang pamagat ng post, sa H1, at pagkatapos ay sa ibaba, gusto naming i-print out ang post na teksto sa loob ng isang talata. At dito, maaari naming aktwal tumawag sa isang Python function, upang maaari naming tumawag strftime, ST-RF-time, at maaari mong ipasa sa format string na nais mong i-print ang data out in. Kaya ito ay ay medyo magaling na maaari mong talagang itawag sa Python pag-andar mula sa loob dito. Hindi mo na kailangang gawin ang pag-format sa ang controller side, dahil talagang, pag-format ang mga petsa ay isang bagay na nais mong pakikitungo sa loob ng View. At lahat ng mga porsiyento mga bagay-bagay ay hindi sobrang mahalaga. Kung titingnan mo ang mga babasahin para sa strftime function sa Python, tinutukoy nito ang lahat ng mga mga bagay-bagay, ngunit na ni kung paano, kapag kami ay naghahanap sa home page dito, format ito sa isang masarap na petsa, at ito ang tumutukoy AM o PM, ngunit karaniwan, kung tayo ay hindi na ito dito, ikaw ay malamang na makakuha ng ilang mga basura date na hindi hitsura napakabuti. At pagkatapos ay tukuyin natin ang post.text, maaaring at ako may maglagay ng isang pares ng mga line break dito, lamang upang ilagay ang ilang mga puwang sa pagitan ng bawat post. Kaya, tingin ko ang pinaka-mahalaga bagay sa halimbawang ito, ay na maaari mong gamitin ito para sa loop. At ito ay kahalintulad sa mga bagay na maaari mong gawin sa PHP. Maaari mong ulitin sa pamamagitan ng, ang lahat ng bagay ay makakakuha ng lumipas sa, at sa gayon, sa halip ng pagkakaroon na gawin copy / paste, kopyahin / ilagay ang lahat ng mga HTML, ikaw lamang na isulat ang mga ito nang isang beses, at pagkatapos ay maaari mong ulitin sa lahat ng mga post. At ito ay isang bagay na pangkaraniwan na nais mong na gawin, kapag mayroon kang isang pulutong ng mga data, ay na para sa lahat sa iyong data, na nais mong gawin ng isang katulad na bagay. At pagkatapos, tandaan lamang, na kapag ikaw nais na i-print out ang isang bagay tahasan sa HTML, gamitin mo ang double braces dito, ngunit pagkatapos ay kapag nais mong tukuyin ang ilang impormasyon tungkol sa isang kondisyon, o tungkol sa isang para sa loop, ikaw gamitin ang porsyento bracket. Kaya, balik sa Python code, kaya na nagpapaliwanag kung ano ang nangyayari sa pangunahing ruta, kapag pumunta kami doon, ito lamang ay nagpapakita ng lahat ng mga post, ngunit pagkatapos ay ang tanong ay, paano namin talagang makakuha ng post sa database, na kung saan ay isang maliit na kaunti pang mga kagiliw-giliw. Kaya, kapag nag-click ang Bagong Post link, na kung saan nakita namin dito, Nagre-redirect mo ito sa form na ito. At ito lamang ay isang simpleng tawag sa render_template function, kung saan pagkatapos ay pumasa sa bagong post sa HTML form. Kaya sabihin kumuha ng isang pagtingin sa na. Kaya ang isang ito ay medyo simple. Ito ay isang simpleng HTML form, na kung saan ang magiging hitsura ng isang maliit na piraso pamilyar, batay sa mga form sa CS50 Finance. At ito, tukuyin natin dito, ang mga aksyon. At dito, kung ikaw ay nagtatrabaho sa PHP, normal, ito ay magiging isang bagay tulad ng, create.PHP, ngunit dito aktwal na namin tukuyin ang isang ruta sa loob ng prasko server. At ito, ay tumutugma sa rutang ito sa lumikha ng ruta na mayroon kami dito, na kami ay pumunta sa sa isang segundo. At ito, tukuyin natin na ito ay isang paraan ng post, dahil gusto naming ipadala ang data na ito form, at karaniwan kapag kayo ay nagpapadala ng data mula sa isang form, baka gusto mong gamitin ang isang kahilingan ng post, kaya lang hindi mo end up na may ganitong malaking, mahirap gamitin URL. Ngunit maaari mo ring gamitin ang isang GET kahilingan, at pumasa ito sa sa mga variable ng routing, ngunit para sa mga form, ito ay maganda sa isang kahilingan post dito. At kaya pagkatapos, tulad mo nais gawin sa HTML at PHP, maaari mong tukuyin ang mga input ng teksto, at maaari mong tukuyin ang pangalan ng mga ito, at iyon ang pangalan na makakuha ng lumipas sa bagay na kahilingan sa loob ng prasko. At pagkatapos ay isang namin Isumite pindutan na nagsasabing Post. At dito, Post ay ang pangalan ng button, dahil sa ito ay isang blog post, ngunit dito, post ay ang paraan kahilingan. Kaya ang mga ay ang parehong salita pero sa totoo hindi kaugnay. Oo Balik sa Python code, kapag tinatawag namin ang lumikha ng paraan, mapapansin dito na maaari mong talagang tukuyin sa loob ng ruta mga pamamaraan ng kahilingan na nais mong tanggapin, at kaya dito, tukuyin ko na ako lamang ang nais na tanggapin ang isang paraan ng Post. Kaya, kung ang tunay kong subukan upang bisitahin ang pahina direkta, na kung saan ay gumagamit ng isang GET kahilingan, ito ay sabihin sa akin "Hindi pinayagan ang pamamaraan." At ito, ikaw ay may mga pahina, uri ng tulad ng sa pahinang lumikha, na lamang ako tunay na gamit bilang isang paraan para ang form na ito upang makakuha isinumite, maaari mong tukuyin na hindi mo gusto mga tao upang ma-pumunta doon nang direkta sa pamamagitan ng isang kahilingan GET, o kung hindi mo gusto, para sa ilang kadahilanan, ang isang kahilingan Post, maaari mo lamang tukuyin GET dito, ngunit sa halimbawang ito, namin lamang gusto ang kahilingan Post na lumabas. Kaya, kapag create_post ay tinatawag na, kapag bisitahin kami na sa pamamagitan ng kahilingan Post, tuwing pumupunta ka sa isang partikular na ruta, may kahilingang ito object, at kami ay mag-i-import mga kahilingan sa tuktok very, ngunit may kahilingang ito bagay na makakakuha ng lumipas sa, at maaari mong ma-access ang data ng form, kung saan ay awtomatikong makakuha ng puno kapag ikaw ay magpadala ng isang kahilingan mula sa isang form. At pagkatapos ay, kung ano ang tingin ko ay talagang cool, ay na ang mga bagay na form upang makakuha ng lumipas in, ay isang diksyunaryo lang sawa na naglalaman ng, kung access-- mo kaya dito, ipaalam akin hilahin pataas ang HTML sa tabi nito, lamang upang maaari mong magkaroon ng na bilang isang sanggunian, oo, kaya ang mga pangalan na aming tinukoy dito para sa iba't-ibang larangan, para ang pamagat at ang teksto, kami ay pagkatapos lamang gamitin ang mga banda rito bilang mga indeks sa data ng form. Kaya na super maginhawa. Kaya nga ang tawag namin post.create, na Lilikha at awtomatikong magsingit ito ng mga bagong post object papunta sa database. At sa tingin ko ito lumikha ng function dito ay isang tunay na cool na halimbawa ng kung paano malakas Prasko ay at nagtatrabaho sa mga ito, dahil kung ikaw ay paggawa ng isang bagay sa PHP, maaaring mayroon ka na gawin ang isang pulutong ng mga pagpapatunay, gusto mo na pagkatapos makapagtatag ng koneksyon sa database, gusto mo na pagkatapos maipatupad ang SQL query, ngunit dito kami na lang ang ganda ng post.create, na pagkatapos ay maaari naming lamang makakuha ng impormasyon out ng kahilingan object, at pagkatapos ay ipasa ang mga ito sa isang bagong mag-post na namin ang paglikha. At pagkatapos, sa huling bagay na gusto naming gawin, ay upang i-redirect ang mga user pabalik sa bahay. At kaya kami ay gumagamit na ito Pag-redirect Prasko function. At ang isang bagay na hindi namin nakita bago, ay ang function na URL. Kaya ang URL para sa pag-andar ay nagbibigay-daan pumasa ka sa tunay na pangalan ng isang function sa iyong Python code, sa halip na ang partikular na ruta na ito ay sa. Kaya maaari ko na lang na kasindali redirect sa isang gumagamit upang mabawasan nang malaki, na kung saan ay ipadala ito pabalik sa bahay, ngunit gamit ang URL para sa function na ay nice, dahil kung babaguhin mo ang lokasyon kung saan bagay ang, kaya sabihin natin na baguhin ko ang bahay na sa / home sa halip, ito ay pagkatapos ay bumalik pa rin / bahay, dahil ang tunay na napupunta at mukhang up ang pangalan ng function, at ito ay magbibigay-back mo ang URL para sa na. Kaya, uri ng sa palagay na ikaw ay mas malamang na baguhin kung saan bagay ay, sa mga pangalan ng mga pag-andar. Maaari mong gamitin ito talaga magandang URL para sa function. At ang isang bagay na dapat malaman iyon ay isang maliit na bit nakakalito, ay na sa tingin mo ay maaaring mo lamang tumawag-redirect sa URL para sa, pero sa totoo ang lahat ng mga ruta ay may upang bumalik ng ilang mga uri ng mga teksto at HTML, kaya ang tunay na ikaw ay may sa ibalik ang pag-redirect ng tawag. Kung hindi man, makakakuha ka ng isang bagay Di-wasto ang tungkol sa mga hindi nagbabalik ng isang string, dahil ang lahat ng mga ito ay may upang bumalik ang HTML iyong aktwal na nais na mag-render. At kaya, kapag tumawag ka sa pag-redirect, Nagre-redirect mo ito sa pahina, ngunit ito aktwal na nagbabalik ng mga HTML kailangan mong i-execute na redirect. Bumalik sa home page. Kaya kami ay may mga dalawang iba't ibang mga view. Mayroon kaming mga bahay view. O, hulaan ko ang dapat kong sabihin ng mga template. Mayroon kaming mga ito ng dalawang mga template, home template na ay nagpapakita ng lahat ng aming mga post, at pagkatapos kami ay may sa ad na ito bagay, at kapag nag-click ka sa post, ito napupunta sa isang bagong ruta sa loob ng prasko, ngunit na ang ruta ay hindi kinakailangang magkaroon ng isang katumbas na template. Hindi mo na kailangang makita anumang bagay, ngunit maaari mo pa ring may trabaho na ito ng pagpunta sa likod ng mga eksena. At pagkatapos mong makakuha-redirect i-back sa home page. At tiyak, ito ay madali upang gumana sa ilang mga nicer CSS sa template at gumawa ng mga ito hitsura ng maraming nicer, ngunit ang lahat ng mga pangunahing logic ay doon sa Python. Ang anumang mga katanungan tungkol sa mga halimbawa nito? Alam kong may isang pulutong ng mga iba't-ibang mga bagay na nangyayari doon, isang pulutong ng mga bagay-bagay na hindi namin nakita bago, ngunit tulad ng anumang bagay. Oo. Madla 1: Mayroon ba kayong gumawa ng kahit ano espesyal na sa pagkuskos ng data na pagdating sa mula sa form? Napansin ko ang sinabi mo lang ang "lumikha," EZRA Zigmond: Oo, kaya iyon talaga, na ang isang tunay na magandang point. Kaya ang tanong ay, gawin mo kailangan mong suriin at siguraduhin na ang data ay wasto, at gawin ang anumang uri ng pagkayod upang matiyak na ito ay may-bisa, dahil tulad ng makikita mo dito, Hindi ko na ginagawa iyon. Kaya sabihin makita kung ano ang mangyayari kung nag-post ako blangko ang isang bagay. Kaya, ito ay aktwal na gumawa lamang ng isang blangko post at punan ang DateTime. Kaya sa katotohanan, gusto mo marahil nais na gawin ang isang bagay tulad ng, siguro tukuyin kung ang pamagat ay katumbas ng ang walang laman na string, at pagkatapos ay hindi gawin ito. O, lamang gawin ito kung ang pamagat ay hindi katumbas ng mga walang laman na string. Kaya ito ay hindi aktwal na awtomatikong alagaan na pagkayod para sa iyo, kaya kailangan mo pa ring gawin iyon. Oo, magandang katanungan. Madla 2: Gumagana ba ito scrub para sa sequel iniksyon? Alam mo ba? EZRA Zigmond: Sana, peewee ay na. Sa tingin ko ito ay tiyak na maging isang pretty masamang library kung hindi ito gawin iyon. Hindi ko alam kung eksakto. Gusto ko na tingnan ang query na binuo ito. Sa tingin ko na, kung nag-type ko sa isang blog post na uri ng mga tumingin tulad ng isang atake SQL iniksyon, bagay na tulad nito, kung ito ay tulad ng isang patlang ng password o isang bagay, maaari mong gawin ang isang bagay tulad nito. Sa tingin ko na ay pa rin makakuha ng literal na nai-post, ngunit sa tingin ko na ang ginagawa peewee ilang uri ng pagkayod ng data bago ito aktwal na executes ito. Madla 1: field na teksto ay dinisenyo upang kumuha ng plain text, i-right? EZRA Zigmond: Oo, ito ay. Oo. Kaya sa tingin ko na ang lahat ng mga, sa gayon ito ay tamang pag-uugali, na gawin iyon, ngunit sa tingin ko na peewee sana ay gawin ilang uri ng proteksyon sa kanilang pagtatapos. At kung nais mong double check na, may mga paraan kapag bumuo ka ng isang query. kaya hindi mo na kailangang direkta execute ito. Gusto ko na kumuha ng isang tingnan babasahin, ngunit maaari mong aktwal na makita ang SQL na ito ay bumubuo ng, at kumuha ng isang pagtingin sa na, at gumawa siguraduhin na ito ay tumatakas na mga bagay. Ang isa pang dahilan kung bakit maaari mo nais na tingnan ang SQL na peewee ay outputting, ay kung mga bagay-bagay na tila sa maaari pagpunta tunay mabagal, maaari kang kumuha ng hitsura at makita kung ano ito ay ang tunay na ginagawa, dahil ito ay paminsan-minsan madaling sinasadyang magdagdag in, ang paraan isulat mo ito, maaari mo sinasadyang magkaroon ito pumili muna ang buong database, at pagkatapos ay gawin ang ilang mga operasyon uri sa na, kapag kayo ay talagang sinadya upang pumili ng isang subset. At ito, kung ang mga bagay ay hindi lubos pagpunta karapatan, ito ay mabuti upang tingnan sa kahilingan na ang tunay na nagsisimula pa nabuo. Oo. Madla 2: Kapag kayo ay unang nagsimula, ilagay mo sa port bilang 5000. EZRA Zigmond: Oo. Madla 2: Ay ang default na may peewee, o ay isang bagay na maaari mong baguhin? EZRA Zigmond: Oo, kaya ang port ay default sa prasko. Kung nagpapatakbo ka ng mga ito nang walang pagtukoy sa anumang bagay, ito ay awtomatikong gawin na. Naniniwala ako, gusto ko i-double check na ito, ngunit maaari mong tukuyin na sa app.run, Sa tingin ko ay maaari mong gawin ang isang bagay tulad ng, port = 8080. Ni bigyan na ang isang subukan real mabilis Hayaan. Oo, kaya maaari mo lamang tukuyin ang port = 8080, at ito ay tumakbo ito doon, na sa palagay ko, kung iyong nais na patakbuhin ito sa IDE, hindi ko na sinubukan na ito out, ngunit sa tingin ko na kung ikaw tumakbo ito sa port 8080, gusto mo marahil ay maaaring upang ma-access ang server, tulad ng sa iyo ay para sa mga website. Oo, ngunit ito ay madaling na baguhin na kung ikaw magkaroon ng anumang uri ng tulad ng port-forwarding mga bagay na kailangan mong gawin. Anumang iba pang mga katanungan? Oo? Madla 1: So, nakita ko sa iyong modelo na, tulad ng nabanggit mo, kailangan mong tukuyin ang database para sa bawat bagay. Huwag mong mangyari na malaman, ay na gawin itong talagang madali kung ikaw magkaroon ng maraming SQLite database na kayo nais na gamitin para sa isang solong web app, na maaari mo lamang tukuyin ang isang kumpol ng iba't-ibang mga sa iyong mga modelo? EZRA Zigmond: Oo, hayaan mo akong buksan na up real mabilis. Kaya, ikaw ay sinasabi, kung nais mong magkaroon ng ng grupo ng mga iba't-ibang mga bagay, siguro gusto at ang mga mag-aaral, para sa ilang dahilan, ang isang bagay tulad na? Oo, kaya tingin ko na ikaw pa rin, ang bawat modelo ay mayroon na magkaroon lamang pa rin isang database na nakatalaga dito, ngunit kung nais mong magkaroon ng iba't-ibang mga modelo na may itinalaga ng iba't ibang mga bagay sa database na ito, maaari mong tiyak na gawin iyon. Kaya, kung ako ay lumikha ng isang bago, isang bagay na tulad nito, at ngayon ito ay isang mag-aaral na mukhang kakatwa tulad ng isang blog post, Kaya kong tukuyin na ang mga database ay katumbas db_2 dito. Kaya, sa tingin ko na ang pangunahing paraan na maaari mong gawin iyon. Cool. Anumang iba pang mga katanungan? Kaya lang para tapusin up ng isang maliit na bit, narito ang ilang mga mapagkukunan, at maipo-post ang mga slides online para makita ang tunay na makakuha sa mga link na ito. Ang pinakamahusay na mga mapagkukunan ay talagang ang dokumentasyon para Flask at Peewee sa kanilang sarili. Ang mga ito ay nakasulat sa tunay mabuti, sa tingin ko. Kaya, ang Flask website ay dito, at mayroon silang isang quickstart tutorial na ay lalakad sa pamamagitan ng katulad mga bagay-bagay sa kung ano ako ay lumakad sa pamamagitan ng, ngunit kung gusto mo ng anumang uri ng mga review sa mga bagay na ako nagpunta sa loob, o naisip mo na ako ipinaliwanag isang bagay sa nakakalitong paraan, makikita nila ang may katulad na mga halimbawa. Peewee ay may dokumentasyon, at mayroon silang isang quickstart tutorial na napupunta sa ibabaw ng mga pangunahing mga parameter na gusto mong gamitin. Kaya, ang mga bagay na usapan ko ang tungkol sa mga ang mga natatanging, at tumutukoy ng mga default, ang iba't ibang mga uri ng mga patlang na maaari mong gamitin, iyon ay magiging lahat doon. Gayundin, kung mayroon kang mga katanungan tungkol sa peewee, at i-post ang mga ito sa stackoverflow, ang tao na ginawa peewee talaga pumunta sa at sumasagot sa mga paminsan-minsan. Kung may tanong ka, sana makikita niya magagawang upang sagutin ang mga ito, dahil isinulat niya ang buong bagay. Sa tingin ko na ang lahat ng bagay Nais kong i-cover. Salamat para sa darating out.