[Музички] EZRA ZIGMOND: Здраво, на сите. Ви благодариме за кои доаѓаат од денес. Овој семинар е "Пајтон Веб апликации со колба. " Па, јас ќе одам да се зборува малку за тоа зошто можеби ќе сакате да го користите да се направи Колба веб апликации со Python, наспроти на некои други рамки таму, како Џанго, кој е најстариот познат. Поднаслов е "и peewee ", што е нешто ние ќе треба да се зборува за тоа како за да комуницирате со SQL бази на податоци. Тоа го прави тоа навистина убаво. Значи, тука е само брз преглед на она што сакам да го поминат. Значи, прво, само еден слајд кој ќе биде quickstart, што е тоа како да се добие сè постави на вашиот компјутер. Одам да се демонстрира ова на мојата локална Mac машина, само затоа што тоа е каде што јас го направив ова пред, јас сум многу удобно со него, но ова е дефинитивно можно на CD50 ИРО. Значи, после тоа, сакам да Колба воведе она што е, и ви убедат зошто треба да го користат во на прво место. Тогаш, јас ќе даде брз пример на она што може да го направи во колба, брз пример на она што можете да направите во peewee, а потоа јас ќе ви покаже повеќе комплетен пример апликација дека јас се стави заедно што ние да прошетка низ заедно. А потоа, конечно, во последниот слајд, имам некои ресурси да го погледнете на интернет, за повеќе информации. Ова не е комплетната туториал за тоа како да ги користат колба. А јас ќе се надевам да ја напушти извесно време за прашања. Секој гледа на локално ниво, само како, извикам во средината ако имате било какви прашања. Толку брзо работи инсталација, ако сакате да го следат заедно, или ако сакате да го добивате ова на своја машина, Одам да биде со користење на Python 2.7.10. Колба работи со Пајтон 3, но ми се допаѓа користење Пајтон 2, затоа што има Пајтон некои пакети кои не работат со 3 уште. Ако пипка имате инсталирано, што е менаџер Пајтон пакет, Мислам дека ако вашиот Python е поголема од или еднаква на 2.7.9, ќе ја имаат веќе инсталиран, тоа е супер лесно да се инсталира овие пакети. Можете да го инсталирате пипка Колба, PIP инсталирате peewee, обично мора да се работи само sudo така што дозволи да работат надвор. И, ако сте со користење на супер верзија на Пајтон стари, Препорачувам ажурирање на вашиот Пајтон, или со користење EasyInstall да инсталирате пипка. Значи, следното прашање е, што е Колба? И претпоставувам, прво разумно прашање прашував за долго време е, што е веб стан? Затоа што тоа е збор кој јас дека е фрлени околу многу дека јас навистина не знам. И мислам дека најдобар пример на она што веб апликација е, навистина е CS50 финансии, каде тоа не е навистина само еден веб-сајт, но тоа е нешто што ќе можеше вид комуницирате со. Постојат кориснички сметки и на сите видови на различни нешта. Значи, каде што точно ќе се нацрта на линија помеѓу она што е веб-сајт, и она што е веб апликација, е вид на произволна, но претпоставувам дека идејата, тоа е нешто повеќе од еден веб-сајт и тоа е корисна апликација. Значи, Колба е рамка за изработка на веб апликации со користење Пајтон. И се надевам дека до крајот на ова, јас ќе ве убеди и дека всушност може да напише нешто како CS50 финансии користење Пајтон, која јас како многу подобро отколку на PHP, лично. Значи, Колба е, тие го нарекуваат microframework, со што, тие мислат дека е многу едноставна, но растеглива. Така, таа има само она што ви треба, но ако сакате повеќе функции, тоа е лесно да им ги претстават. Но, само затоа што тоа е microframework, не го прави тоа значи дека тоа е само за мали проекти. Јас имам еден линк тука за кој се вели дека дека Обама се користат Колба во 2012 година средства за својата кампања веб-страница, која се надевам дека, е некој вид на поддршка. Но, она што можам Навистина ми се допаѓа во врска со Колба е тоа што, тоа не е навистина прават било кој вид на одлуки за вас. Само затоа што сме Станува збор за веб-апликации, Морам да го споредуваат со Ruby on Шини и Џанго, и на кои се големи рамки, но тие двајцата се прават претпоставки за тоа како сакате да го комуницирате со бази на податоци, како сакате да ја покажете вашата ставови, и тие се дефинитивно добрите страни на тоа. На пример, Ruby on Rails има оваа активен систем на евиденција, која е навистина убав начин на интеракција со податоци, Но, ако сакате да го користите на Руби Шини, ти си вид на врзани во тоа. Но со колба, како што јас ќе ви покаже со peewee, можете да го користите било кој вид на базата на податоци што го сакате, и вие само може да се повлече дека во како продолжување во колба. Па тоа е зошто јас навистина како Колба, тоа е тоа што не прават претпоставки за вас врз основа на работи што не треба, навистина. Значи, зошто треба да се користи Колба? Предностите се, тоа само има навистина основни карактеристики вградени во него кои ви се потребни. Значи, вие не мора да се грижите за разбирање на целиот куп на работи што навистина не треба. Вие не треба да мора да се грижите за исклучување карактеристики што навистина не треба. И, како што рековме, тоа е супер лесен за да додадете во проширувања на работите кои ви се потребни. Некои од нив, Колба има сопствените поддршка за тоа. Значи има нешто што се нарекува Колба админ, која огледала дека админ комисија која обезбедува Џанго, кој ви дава убав визуелен начин за администрирање на вашиот вебсајт. Но, повторно, ако сте правејќи нешто едноставно, веројатно не треба голема админ лента, така што мислам дека е супер убаво. И недостатоци се, дека имате помалку енергија надвор од кутијата. Значи, кога за прв пат се отвори колба, и во вашата програма, python, само го пишувате од Колба увоз *, или што, точно не ги добиете сите од карактеристики ви се потребни. И така треба да се поексплицитно листата на карактеристики што го сакате. Значи тоа е еден недостаток, но јас мислам дека за изградба на мали веб- апликации како јас ќе одам да се прикажува вас, тоа не е навистина проблем. И она последното нешто што е требало да се каже, што е печатна грешка, е дека има помалку стандардизирани конвенции за тоа како да ги користат колба, само затоа што таму не се толку многу луѓе кои го користат за професионално во споредба со Џанго. Значи, ако се погледне нешто како: "Како можам да се направи x" во Џанго, најверојатно ќе го најдете. Има добар дизајн шеми можете да го користите, но со колба, тоа е вид на одат на свој начин, само затоа што тоа е прилично мала библиотека. Значи тоа се недостатоци, но мислам дека дека тоа е уште една добра библиотека да се користи. Па да скокаат право во колба. Ова е дефинитивно не се случува да биде комплетна туториал, но тоа е за да ви даде идеја за тоа како да структура работи, и така ќе се чувствуваат удобно и оди надвор и да гледа во документацијата и да дознаат повеќе. Па, дозволете ми да се отвори навистина едноставен пример на прв, и она што ќе се покаже изгледа, а потоа ние ќе скрши го долу малку повеќе. Па ова тука, дозволете ми да го работи. Значи, јас сега имаат примена моите работи. Одам да се отвори Safari, и тоа е водење на моите локалниот компјутер. Па јас сум само ќе се направи овој поголем. Но localhost: 5000 И така, во моментов, сето ова го прави тоа е, кога ќе ја посетите веб-сајтот, тоа отпечатоци од "Здраво Колба" што не е супер корисни, но мислам дека тоа е кул во оваа мала датотека тука, имаме веб серверот се извршува кој е печатење на нешто. Значи, ајде да всушност изгледаат на код за втор, и да го срушат малку. Е со големина добра за сите тука? Така, веројатно, ти си донекаде удобно користење Пајтон. Јас сум под претпоставка дека ние може да се погледне Пајтон и да чита преку неа. Ако имате било какви прашања во врска со ништо, јас, исто така, може да се оди над тоа. Па на првата линија е, од колба, ние увоз, Колба со голема "Ф" кој е вид на сите клучните карактеристики кои ви се потребни. Секогаш кога сте пишување датотека и користење колба, сте ќе сакате да го внесете тој, само затоа што ги има сите главни работи. Следното нешто што го правиме, е ние повик оваа функција колба, само да се создаде еден стан на објектот, а ти си секогаш ќе сакате да го направите тоа. А потоа, скокање надолу кон дното брзо, овој дел тука е, '== if_name _ "_ main_" ", кој е вид на конвенцијата на Пајтон. Па ова ќе се изврши само ако ја извршите оваа датотека директно користење Пајтон. Тогаш, ние го нарекуваме app.run, кој ќе всушност ја стартувате апликацијата оди. Значи, тоа е главната структура која ќе треба во било која апликација колба, се ќе имате овој стан = колба (_name_), а потоа app.run. Така, две работи дека имам овде, се она што ние го нарекуваме правци. Значи, ајде да зборуваме за рутирање малку повеќе. Ќе се врати за да го лизгачот. Па најфундаменталните концепт во Колба е рутирање. И тоа е идејата дека доделите функции во Python на одредени адреси на вашиот веб-страница. Така, секогаш кога сакате да се создаде нова траса, го користите овој @ app.route функција декоратер. Значи, ако сте запознаени со функција декоратори во Python, тоа е овој концепт кој ви овозможува снимање на функција и опкруженоста со нешто друго. Значи, навистина, она што го прави овој декоратер, е дека е потребно на функцијата под него, и се додава повеќе информации на тоа, но она што, всушност, колба се направи што се случуваат не е супер од клучно значење, но она што е важно, е дека пред пат, стави ова @ app.route, а потоа адреса на трасата, па црта е она што ние видов кога ние само се отвори веб-страница. Значи тоа е почетната страница. Тоа е само патот коса црта. А потоа ќе ја имаат оваа функција. Името на функцијата може да биде она што го сакате. Тоа не мора да значи да треба да направите со трасата. И потоа, без оглед на враќање на функцијата, функцијата треба да се врати на стрингот. И дека стрингот може да содржи HTML или ништо, а тоа е токму она што ќе се добие се вратил во вашиот веб прелистувач за што се HTML, и тоа ќе го направи тоа. Значи ова е истиот код тоа беше од примерот дека јас само истрча, па кога ќе ја посетите коса црта, го нарекува Здраво Светот функција, која само враќа стринг, Здраво колба, и кој добива печатено на екранот. Па таму е уште еден пример, која е, кога ќе ја посетите / здраво, тоа отпечатоци од Здраво збор, која всушност, треба да се каже, Здраво, но, ајде да се преправа дека е намерно. Значи, да се повлече дека се вистински брз. Па ако одиме на локалниот компјутер / здраво, сега тој ќе се печати нешто друго. Па тоа е само еден брз пример за тоа како можете да креирате два различни правци. Значи, до сега, тоа не е супер корисни, не постои во целина многу што можете да направите, може само да направи сето она што со имаат различни HTML страници, и кога ќе ја посетите одреден Страница тоа само страната товари. Да видиме некои повеќе корисни работи што можете да направите. Значи, едно нешто што може да имаат забележан во пример дека јас извадив нагоре, е дека сум го app.run (debug = true). И така, она што овој аргумент debug не, е дека кога ќе се кандидира на вашиот веб сервер, кога сте во вашата апликација, Ако го промените датотеката, таа ќе автоматски ја превчитате серверот. И така да не се всушност треба да рестарт Пајтон, што е супер корисни. Јас може да се покаже дека. Дозволете ми да се повлече до мојот код со печатна грешка во него, и се преправаме дека печатна грешка беше ставен таму намерно за поучни цели. Па ајде да го додадете ова назад во. Па сега тоа вели Здраво светот. Јас ќе ја спаси. А ако се повлечат нагоре терминал, ќе велат дека тоа е рестартирање, поради тоа што пронајдена промена, па сега кога повторно пробајте, тоа ќе го испечатите правилна работа. Па debug е супер корисни за тоа. Исто така, ако имате било какви вид на несреќа, така дозволете ми да се направи овој паѓањето на апликацијата со тоа што таа не се врати стринг. Значи, ајде само да го има врати Никој поради некоја причина. А потоа кога ќе ја посетите оваа страница, тоа само ќе се сруши, но на серверот не само да се сруши, тоа всушност ви дава супер корисни назад трага од сето она што не беше во ред. И, што е навистина убаво, се што во секој чекор во оваа назад во трагови, вие може да се отвори една интерактивна плаќа тука, и вид на печатење на она што променливи што сакате да ги погледне. И така дебагирање е навистина корисно за да пронајдат она што се случува со вашиот сервер, а не само да се види нешто во PHP како 500 внатрешно грешка на серверот, што е супер бескорисни. Една работа е да бидат свесни за, е дека ако се стави на вашиот стан онлајн така што е видливо за јавноста, ќе никогаш не сакаат да ја напуштат debug режим, затоа што луѓето навистина да ја користат таа конзола дека јас покажа да се изврши арбитрарен код. Така што тие може да испечатите како и секој тајни кодови имаш таму, тие може да се погледне што точно колку вашиот сајт е работа. Така што е навистина корисно за тестирање, но секогаш бидете сигурни да го извади пред да ја објавите нешто на интернет. Значи, кога сте со користење на нешто како PHP, има оваа идеја дека може да помине информации помеѓу веб-страници со ставање на информации, всушност, во URL-то, што е барање на ГЕТ, но во колба, всушност можете да направи нешто вид на како што, со тоа што на пат што има променлива како дел од неа. Значи, ако се погледне на овој пример на екранот тука, ние сме на пат што е ('/ Здраво /'), и така, ако го посетите / Здраво / нешто, дека нешто се случува да се, всушност, се полни во варијабилни името. И ќе забележите дека функцијата кој доаѓа со тој пат мора да ги има во параметар име, така што тоа ќе всушност да се донесе во функција. И тогаш, еднаш сте внатрешноста на таа функција, дека можете да се третираат како нормален Пајтон променлива, и така тогаш, тоа ќе печати Здраво, и тоа ќе се пополни во името користење некои форматирање стринг. Така да додадете променливите делови на рутирање, имате потреба при користење на држач агол означување. И евентуално, можете да го користите она што се нарекува конвертор. И така, ако го стави ова коментар со дебелото црево, можете да наведете дека тоа е int, или плови, или патека, и тоа автоматски ќе се претвори тоа. Можете исто така да се направи конверзија во рамките на Python функцијата, само со помош на кастингот, но понекогаш, ако сакате да се осигура дека тоа е цел број, може да се стави дека владеењето на конверзија во таму. Значи, да се повлече до еден пример на некои променлива правила. Па еве, овој има истите основни структура со колба од увоз Колба, стан = колба (_name_), а потоа тоа е водење на крајот. Ги имаме овие две различни променлива правци тука. И првиот, е онаа која јас ја покажа во слајд, што беше тоа потребно е само во името на серијата и тоа ќе се печати Здраво, Име. А потоа, второто некој го користи за конверзија. Па ова автоматски ќе го претворите да int, а потоа го удвои int, и печатење на тоа. А, ние не го сторат било вид на реализација во рамките на тоа Колба бидејќи се грижи за тоа. Значи, да се добие оваа трка. Кога имаш Колба примена трчање, Можете да го контролирате-С од неа да престане со серверот се извршува. А потоа ќе се кандидира на променливи. Па ајде да одиме да localhost / hello / Езра и се надевам дека ова ќе се поздрави со мене. Па го зеде во Мое име, во променливата пат, и тоа го пополнува тука. Па јас, исто така, ќе ви покажеме еден брз пример за удвојување. Значи, ако одите во / двокреветни / 3, тоа ќе се печати од 6. Значи ова се грижеше за конверзијата за нас. Па можете да се, исто така, го направи тоа со плови, и нешто посебно, ако ви треба за да се определи нешто како патека, која ви овозможува да го прифати коси црти, но тоа не треба обично да биде проблем. Досега сме, се уште имаат само се враќаат жици, што не е многу интересно. Ние всушност би можеле да се вратат буквална HTML стринг. Така што во кодот може да се внесете нешто како на б-таг да се направи тоа храбар, но повеќето од вас време всушност не сакаат да се пишува HTML кодот во вашиот Python код. Станува навистина неуредна, и тоа не е добро време. Колба ни овозможува да се издвојат HTML во она што се нарекува на дефиниција, и така, ако сте размислување во однос на моделот MVC дека сте запознаени со тоа, се надевам, да работат со CS50 финансии малку, може да се мисли на Python датотеки како повеќе на контролорот, каде тие се во интеракција со она модел на податоци може да имате. А потоа тие се јавувате до Видено и донесување на информации за таа Види за пополнување на информации во HTML која е потребна. И она што го нарекуваме овие ставови Шаблони се во класата. Па Колба туѓа Пајтон модул, кој тој автоматски ќе инсталира кога ќе го инсталирате Пип Колба наречен Jinja, која ви овозможува да додадете овие прибелешки на HTML кој го гледате на екранот, што ви овозможува се стави во работи како conditionals, и петелки во HTML. Па изгледа малку како тоа како ќе Може да го користите PHP во рамките на една HTML датотека, но тоа е само кога го шишето сервер служи до HTML датотека, тоа ќе го изврши овој templating мотор и интерпретира преку ова и да се пополни во работите. Колба така има функција render_template кои можете да ги видите на дното тука. И така, кога ќе ја посетите оваа страница, би го направила ова hello.html дефиниција, а потоа пополнете го овој HTML страница. Па да ја извршите оваа реално брзо, и да видат како изгледа, а потоа ќе поминат низ малку подетално. Значи, вашата Шаблони се случува да се оди во папката обрасци. Тој автоматски ќе се погледне во рамките на Папката со шаблони за таа дефиниција. Значи, да се отвори овој горе. Па така, ќе се кандидира на пример templating. Значи, ако јас одам да го / Здраво / Езра, таа има оваа ужасна, ништожно маркиза ознака што ја ставив во. Многу убаво, многу динамичен. Јас сум голем обожавател. Но, она што се случува ако Јас само да одат, / здраво? Па тоа само вели Здраво светот. И јас не ја помине име, и тоа го пополнува автоматски. Да видиме како тоа го сторија тоа, и како ние може да се ослободи од таа маркиза можеби. Па еве, ова е вид на Интересен пример за, ако сте запознаени со тоа како прекинувач извештаи работат во јазикот. Велат дека ова е вид на како, тој вид на пад низ, каде што, всушност, во прилог на две различни правци на истата функција. Па ние прикачите / Здраво пат и на / Здраво / име на пат кон Здраво, и ние наведете using-- Пајтон ви овозможува наведете стандардниот функција arguments-- па ако нема име, така што ако одиме на само / здраво, тој автоматски ќе се филтрираат за името, е еднаква на None. Па тогаш, што го направила Дефиниција со име = име, па тоа ќе помине во параметар име еднаков на оваа функција името параметар, во дефиниција. Кои се уште не објаснува како е одлучувањето дали да се печати Здраво Светот, или да ги печатите моето име. Па ајде да всушност изгледаат во самиот опис на предметот, и да видиме каде што доаѓа од. Па така, во рамките на оваа дефиниција, ние всушност имаат некои условен логика, кои некои луѓе би тврдат, вие всушност не треба да имаат многу условно логика во рамките на вашиот самиот опис. Таа треба да биде во рамките на Контролор, но за овој пример тоа е нешто прилично мал. Па еве, ние се провери, ако името, па ако името не е еднаква на None Ако името е, всушност, донесен во, тогаш ние ќе Велат здраво, име со насловот и маркиза, сето ова нормален HTML, спротивно, ние ќе печати Здраво, свет само нормално. Па неколку работи кои треба да се забележи тука за тоа како да го форматирате templating, е во тоа што, на сите овие условно извештаи, како вид на како го кога PHP сакате да го вметнете некои PHP, имате потреба при користење на помалку-од прашање марка, тоа е вид на аналогни тука со {%. Па еве, ние си имаме условно код. И тогаш, кога ќе се всушност сакаат да буквално оцени нешто, и печатење тоа до екранот, користат двојни брановидни загради. Значи тука се двојни брановидни загради, а потоа ние наведете го името, па во рамките на тоа, тоа ќе оцени на име на променлива, што беше донесен во од направат функција дефиниција, а не само за печатење надвор, ако ние се ослободи од нив, тоа само ќе се печати зборот "име." Значи, тоа е нешто да се види надвор за. Па уште нешто да се забележите е дека, кога ќе сакате да го користите render_template функција, ние всушност треба да внесуваат експлицитно од садот. И ова е пример за на модуларност на колба, тоа што вие не мора да увезуваат работи кои што не треба. Вие само може да се донесе во функции што всушност треба, што понекогаш е убаво, така да не се мора да ги имаат сите овие функции седат на таа не го користите, но, исто така, ако сте заборавиле да се треба да увезе render_template, најверојатно ќе добие предупредување која ќе може да знае за тоа. Значи, тоа е templating. Значи, ние сме прикажани како да се направи едноставна веб-страници, и додадете малку повеќе логика да тоа, во однос на променливата рутирање. Тоа ви овозможува да направите различни нешта врз основа на URL адресата што ќе одат на, и, исто така, тогаш, даде HTML со малку повеќе смисла во смисла на тоа како сакате да се направат нештата. Вие не мора да се стави сите Ваше HTML во вашиот Пајтон, но за доста секоја веб апликација, ви се случува да сакаат некој вид на модел на податоци поврзани со неа. И така традиционално, ова ќе да биде нешто како SQL база на податоци. И вие само може да комуницирате директно со SQL. Пајтон има, мислам дека се вика. SQLite 3. Вие само може да увезе SQLite 3 и изврши SQL queries директно, но јас не знам за вас, но јас навистина не ми се допаѓа, само, испишување на SQL queries. Тоа се стреми да се навистина долга и сложена. И така, нешто што Ми се допаѓа да се користи се што е познат како ORM, што е објектно-релациони мапирање. И местото на објектно-релациони мапирање, е дека постојат два различни начини може да се размислува за базите на податоци. Па на пример, дека Професор Malan обично користи во класа, е Excel табела, каде што имате овие редови и колони, и тоа е навистина корисни за како што е претставен во SQL и како можете да комуницирате со неа, но Друг начин на кој тоа е всушност корисно е да се размислува за тоа, понекогаш, е во однос на класи и објекти. Така, наместо на размислување на секоја маса како што имаат овој ред дека има одредени информации, всушност можете да мислам на тоа како да се биде секоја маса е класа, а потоа секоја инстанца на класа има одредени својства. Значи, со овој пример, случаи на класата се редови во табелата, а потоа секој имот би да биде колона во табелата. Значи, ОРМ што ми се допаѓа да се користи се нарекува peewee. Тоа е навистина мал, како вид на колба. Јас мислам дека тие одат добро заедно, но постојат многу други ORMS дека можете да го користите. А се повеќе популарна од нив е познат како SQLAlchemy, и не можам да се сетам зошто јас првично избра peewee над SQLAlchemy, или јас ќе ви кажам зошто јас мислам дека е најдобар, но ние сме само ќе да се користи оваа еден, бидејќи знам како да го користам. Значи, прашањето е, зошто треба да се мачам со користење на ОРМ, наместо само директно пишување SQL queries? И мислам дека најдобар случај, е во тоа што не, всушност мора да се напише SQL queries. Тоа е многу полесно, како што јас ќе ви покажам, да ги правите нештата како избор, вметнување, бришење, посебно возобновувањето и табели. Тоа е многу полесно да се напишете класната структура, отколку што е да структурираат Креирајте ТАБЕЛА изјава, но едно нешто да бидат свесни за, е тоа што на ОРМ ќе се обидат најдобро за да дознаам што најмногу ефикасна SQL барање ќе биде, но понекогаш тоа добива тоа во ред. И особено ако сте работа со голема база на податоци, може да се забележи дека на барањето кои треба да се работи брзо, си го зема подолго. И ако се погледне под хаубата на тоа како на ОРМ го толкува дека во SQL, тоа би можело да се прави нешто навистина смешно, само поради тоа што вид на гест вашите намери ред. И, имало моменти кога Морав да се вратиш назад, и само изврши моето SQL queries, само поради тоа што беше парсирање на некој чуден начин. Така, има некои горе, само во начинот на дека тоа составува вашиот извештаи долу во SQL. Значи, ајде да изгледаат супер брзо на едноставен пример на модел на податоци кој ќе го користите. Значи, ова е Python код, така и на Првото нешто што сакате да направите е од peewee увоз *. Значи, за разлика колба, каде што треба сите овие поединечни модули, и сакате да го внесете колба, и напише дефиниција, и некои други кои што ќе видиме подоцна, од peewee, можете само да внесуваат сè, бидејќи тоа е прилично мала библиотека. Значи, првото нешто што сакате да направите, е всушност се создаде оваа база на податоци објект. Значи, вие треба db = SqliteDatabase, а потоа името на вашата база на податоци. И ова ќе всушност се создаде база на податоци објект дека можете да комуницирате со, со peewee. И тогаш, имаме вистинските модел што ние сакаме да се создаде. Па на табелата ние сакаме да се создаде. Така, во рамките на peewee, секоја класа има своја маса во рамките на својата база на податоци. Значи, сите од класите наследат од основниот модел, и модел на капитал М е нешто што е дефинирано во peewee. Значи, сите од вашиот модели треба наследуваат како највисоки суперкласа, тие треба да го наследат од модел, но она што е навистина кул, е дека всушност можете да имате модели наследат едни од други. И многу од тоа време, вашиот податоци модели не мора направи убав хиерархија наследство, но времиња, во кои тие го прават, тоа е навистина убаво, затоа што имаат модел својствени едни од други. Значи, ние се дефинира оваа категорија "студент", кој ја наследува модел, и тоа има три својства. Таа има проект, што е a PrimaryKeyField, која е нешто што е предвидено страна peewee, името е CharField, и оценка е IntegerField. Така што ова може или не може да биде како CS50 всушност зачувува сите оценки на учениците. Дека не е, но тоа е како јас ќе го направи тоа. А потоа го има, во рок од оваа класа, и тоа е нешто што можете да направите со Пајтон, може да имате вгнездени класи. И ова е нешто она што е потребно од страна на peewee. Значи, оваа класа Мета, имаш да се каже дека базата на податоци е еднаква на објект дека ние направивме погоре. И ова вели дека она што на датотеката е оваа табела всушност ќе бидат содржани во. Така што ова е нешто што имаш да се направи во рамките на сите модели. Вие само треба да се определи во рамките на оваа класа Мета база на податоци која е еднаква на dB. Значи она што обично го прават, ако имам еден куп на различни модели, е дека имам една база модел, што јас обично само јавете "основниот модел" кој има Мета класа, и поставува на база на податоци еднаква на dB. И тогаш сите од мојот следните модели нема да го наследат од таа база класа. И јас тогаш не мора да се грижите за поставување на Мета класа. Значи, кога ова всушност добива Составувач е долу во SQL изјава, тоа изгледа како овој гаден нешто надолу тука "Креирај табела студентски проект број, " како и да е. И, мислам дека тоа е покус, ова SQL пребарување токму тука, но ако се погледне во оваа класа тука може да се види точно она што се случува. Може да се види она што видови на полиња постојат, она што тие се нарекуваат, и така, мислам дека во потрага на овој Python код е многу повеќе може да се чита од обидувајќи се да ја напишам оваа SQL пребарување. Значи, со цел да се, всушност, користи базата на податоци, ние треба да се поврзе со него во рок Пајтон. Значи, јас обично ги пишувам функција наречена initialize_db дека се две нешта. Таа ги зема во базата на податоци објект ДБ и тоа се поврзе на неа, која само што се отвора до делот на базата на податоци. Ако сте само трчање иако веб-сајтот на вашата локална машина, тоа не е супер голема работа да се грижите за приклучување и исклучување, но ако се работи тоа на веб-сајт, можете сакате да бидете сигурни дека, секогаш кога некој корисник се поврзе на неа, кога ќе се затвори на веб страната, тие се исклучите, така што ќе не имаат еден куп на луѓе поврзани до вашата база на податоци на сите одеднаш. И тогаш, кога ќе се поврзете на базата на податоци, сакате да се јавите db.create_tables, како и листа на модели за она што го сакате да се создаде табели. Па еве, јас само сакам да креирај за оваа ученик. И тогаш, она што е важно, е да се наведете безбедно = Точно повеќето од времето. Па што оваа изјава ќе го направи, е тоа што создава маси за студент модел, но само ако тоа не е на маса е веќе креиран. Тоа е она што на безбедно одредува. Така што не ќе ги избрише постојните вашата маса, тоа само ќе се создаде нова маса ако нема никој таму. Значи, вие само може да се создаде табелите еднаш со користење на SQL. А потоа го имаат тоа седница база таму, а потоа да се поврзете секој пат, но тоа е обично убаво само да стави во ова create_tables повик, така што, ако некогаш ја избришете вашата база на податоци кога ќе се кандидира на вашиот веб повторно стан, тоа ќе го пресоздаде. Значи, само бидете сигурни дека безбедно е одреден да биде вистина, или ќе го најдете вашиот податоци на ист начин добивање clobbered секое време. И тогаш, вие само може да се јавите initialize_db да се воспостави конекција, и да се создаде маси, ако е потребно. Значи, најчестиот нешто кои ќе сакате да го направите, или еден од најчестите работи, е всушност да внесете работи во вашата база на податоци. И така, наместо да има да напишам вметнете во изјава со сите наведени вредностите, што всушност може да се јавите функција на класа на студентите. Значи, кога ќе се создаде една класа која ја наследува од моделот, има овој создаде метод. Значи, вие го направите класа name.create, и ќе го одредите параметрите што сакате да го помине во. Значи, ако сакам да го додадете некои студенти за нашите CS50 градус книга пример, Ќе се стави во Давид, кој има многу добра оценка, тој има 95. И мене, кои не го прави толку добро во CS50, имам 50. И така, убаво нешто за што е ова создаде функција го прави, е тоа што таа се враќа на пример, или ред, дека се создадени во рамките на табелата, И така, тогаш ќе ги чувате дека во променлива, и да работат со него подоцна. Можете да го промените наоколу, кој Ќе покажам еден пример. Известување дека не сум Треба да ја наведете проект, бидејќи од тоа е PrimaryKeyField, тој автоматски ќе тоа прираст, ако не го наведете. И дека, всушност, веројатно не треба да се определи тоа бидејќи може случајно clobber проект некој друг. И дека сакате да се направи сигурни дека тоа е единствен. Така, всушност, најмногу заедничко нешто што сакате да направите, најверојатно изберете од на базата на податоци, штом еднаш ќе имате голем број на информации во таму. И така, ако сакате да се добие сè, па еквивалент на одберете ѕвезда од студентите изјава, тоа само ќе биде student.select. И дека ќе ти го врати низа со сите на ученикот објекти во него кои ви iterate во текот сакате. Може да се добијат работите надвор од неа. И поголемиот дел од времето, ќе не само сакате да го изберете, вие всушност сакате да наведете нешто. И така, може да се синџирот на заедно овие функциски повици, како тоа, како што би направиле со синџирот на заедно изјавите во SQL. Па можете да направите student.select (). Каде во овој пример. И тогаш, можете да ги утврдува условите, само со користење на нормални Пајтон Booleans да се провери работи. Значи, во овој случај, ќе сакате да го ограничи она што го изборот на, каде што student.grade е еднаква на 50, и student.name е еднаква на Езра, така што само ќе ми излезат од него. И известување, една навистина суптилна работа тука е дека, ако сакате да одредите една и и / или една или / или, во Python, што нормално ќе се користи, Мислам дека зборот "и", всушност, но тука ќе се користи единствениот симболот, што е нормално bitwise оператори, но во овој посебен случај, peewee само начинот на кој го прави тоа, имате потреба при користење на единствена симболот за да одредите "и". Тоа е нешто што Јас се измешаат многу, но тоа не се излезе дека многу во практика. А потоа, откако ќе ги имаат сите на учениците од базата на податоци, еднаш сте го направиле си одберете и вашата облека или што, можете да го користите foreach циклусот, исто како нормална во Python, со било кој вид на iterator или со било кој вид на низа. За да може да се направи, затоа што сака во student.select (). whe повторно (Student.grade <75), и така и ова ќе помине iterate во текот на секој ученик во табелата чија оценка е помала од 75, кои во овој случај, се уште е само мене. И тогаш би можеле да се направи нешто во рамките на дека јамка, како мене, испратете е-маил и мене да кажам, всушност, предадам проблем сетови. Значи, уште една работа што можете да направите, е тоа е навистина лесно да го обновите редови во табелата. Значи, се сеќавам назад тука, Вашиот кога се вметнат, Зедов вредноста што беше вратени од student.create, и јас го доделен на име се нарекува Езра. И така сега, можете да го промените вредности во тој случај, исто како што би нормална класа во Python. За да можете да го поставите ezra.grade = 95 и дека ќе се ажурира на локалната копија, но ако навистина сакате да го обврзат дека промена на базата на податоци, мора да се повик ezra.save, па да се нарече .save метод на пример. И така, сега, јас Успешно ја променивте моето одделение во рамките на базата на податоци. Е така, тогаш ајде да речеме дека јас се фатат менување на мојот одделение во рамките на базата на податоци. Професор Malan е веројатно нема да сака да ме избришеш од класата, и за да можете да се јавите на .delete метод на пример само за онаа работа. Значи, ако се сака да оди назад во овој циклус тука, и всушност, наместо на испраќање на пораки на сите на студенти, чија оценка е помалку од 75, што сакавте да ги избришете, во рамките на овој циклус би можеле јавете s.delete пример. И последната работа што сакате да направите, е секогаш кога ќе се воспостави врска, и ќе се направи со вашата работа, сакате да се јавите db.close, каде дб е дека базата на податоци предмет што го имавме пред. А вие сакате да бидете сигурни дека се добива затворен од. Кул. Па сега, јас имам еден пример апликација. Јас сум вид на претходно поставените сè само така што нема да има било која живеат кодирање грешки, но можеме да одиме преку тоа и да видиме како ќе се стави колба и peewee заедно, и да се направи едноставна апликација. Јас го нарекувам CS50 проповед, и тоа е вид на едноставен блог платформа. Значи, прво, јас ќе се кандидира и покажуваат како изгледа, и тогаш може да се погледне повеќе во кодот. Океј, па ајде да ја извршите оваа. Кул, јас ќе се направи ова малку помали. Тоа не е многу убава, само поради тоа што Јас не се направи многу, CSS, но она што го прави тоа е, има оваа база на податоци на блог постови, и тоа оди преку сите нив, и ќе ги прикаже на оваа страница, со цел од најновите. И така ова се само некои постови дека сум му заштедил во базата на податоци. Значи, ако сакаме да се создаде нова пост, ние може да оди за да додадете нов пост, а ние може да внесете го насловот на пост, па нешто како, CS50 семинарот. Леле, навистина ужива на семинарот. Кул. Тогаш ќе притиснете на пост, а тоа ќе ви се пренасочува назад кон почетната страница, и тогаш ќе видите дека е додаден го последното мислење. И ние се уште имаат сите оние таму. А сега, ајде да влезете низ сите код и да видиме како тоа се спроведува. Значи, мислам дека првото нешто што ајде погледнете, е, всушност, модели. А многу од тоа време, кога сте дизајнирање нешто, сакате да се размислува за тоа како прв си оди за да ги претставуваат вашите податоци, а потоа дизајн работите околу тоа, така што сè има смисла. А тоа е, всушност, како јас тоа го правеше кога јас го правев тоа, Седнав и помислив, што сакам во еден пост. Значи, тука, ние имаме иста структура дека сум бил споменат погоре, каде што го правиме db = Sqldatabase ('posts.db'). Во реалноста, што веројатно не сакаат до тешко код во вашата база на податоци име. Што веројатно треба да биде параметар тоа е се чуваат некаде, можеби во датотеката за конфигурација, но во еден мал пример како оваа, тоа е во ред да се тешко код дека во. Па сега, имаме оваа класа пост, која наследува од основниот модел. И тоа има, повторно, ID = PrimaryKeyField. Всушност, ако не се определи, ако јас всушност се ослободи од ова, peewee тогаш ние ќе се грижи за автоматски се создава поле проект, и тоа автоматски ќе го направи PrimaryKey, која Мислам дека е навистина убаво, бидејќи обично, тоа е нешто што сакате да го имаат, но јас сакам да го стави во конкретно, само така се сеќавам дека тоа е таму. Но, ако не се каже дека, дека ќе има автоматски. Па тогаш, имам еден датум кој е DateTimeField, и сите овие различни области, ако се погледне на peewee документација, тоа ќе ви даде листа на различните видови на области, кои можете да го користите. За најголем дел, тоа е аналогно на она што ќе се види во SQL. Значи постои CharField, односно VarCharFields, TextFields, кои се многу долго текстови, како блог пост потенцијално, DateTimeFields, DoubleFields, FloatFields, сите такви работи. И можете да го помине на други аргументи на тоа, што јас не прецизираше тука. Да речеме, на пример, вие не сакате да го им овозможи на двете места да имаат ист наслов, можете да наведете нешто како единствена = Вистина, и тоа е само дополнителен параметар за да се на полето дека кога тоа го компајлира надолу во SQL, таа ќе се определи дека тоа треба да биде уникатен. Можете да наведете нешто како не нула и сите други работи што нормално се направи во SQL. Значи, ова е прилично едноставна модел кој има датумот. Забележуваме дека тука, во рамките на DateTimeField, Јас наведени она што е стандардна. Ми се наведени да биде datetime.datetime.now, поради начинот на кој ова добива оценува, тоа всушност ја оценува на datetime.now кога станува вметнува во базата на податоци. Мислам дека, јас ќе треба да се убаво провери ова, но ако се направи нешто како ова, тогаш тоа, всушност, ќе се оцени дека еднаш, а потоа и на DateTime секогаш ќе бидат исти. Значи, само ако правиш нешто со datetimes, проверете дека тоа е кога оценување всушност добива вметнат, или на друго место кои би можеле да се мешаат. Насловот е само CharField, која има повеќе аргументи може да се помине специфицирањето точно колку долго ќе сакате да биде, но тука, тоа не е важно. Текст и ќе биде текстот на целиот пост, и што се случува да се биде TextField само затоа што сакате за да му се овозможи да биде прилично долга низа. Тогаш имаме овој Мета подкласа дека само наведува дека ние сакаме на базата на податоци каде што ова е, всушност, се отворија во дека е dB на објектот што го имаме овде. И последното нешто што имаме тука, токму таа функција дека ние ќе треба да користат од нашите главни стан да се иницијализира на база на податоци за да се поврзете неа, а потоа да се креира табела Пост. Сега, ајде да погледнеме во себе главната апликација. Така што ова е доста малку подолго од оние дека ние сме виделе досега, но се надевам дека не е премногу лошо. Па, дозволете ми да се прошири оваа надвор. Добро. Значи, да се забележи и на врвот Јас увезени еден куп други работи од Колба дека не сме навистина видел. И се надевам дека можеме да одиме преку секој еден од овие, еден по еден и да се зборува малку повеќе за нив, подредени по пример. Значи, имаме колба, и render_template, кој што сум го видел досега, ова барање објектот, кој ќе дојде до кога гледаме како форма дека сум бил да ги покажувате, всушност, работи. Пренасочи, кој ви овозможува да ги пренасочи назад од Креирај Нов Пост назад кон оригиналната страница, а потоа URL-то, што е нешто што ви овозможува дознаам каде на веб-страница на одредена страница е. Па тогаш, следниот нешто што го правам е јас увоз сите информации од моделите датотеки што бевме само гледа. И да, да. Значи, уште нешто ново што доаѓа до кога ќе се занимаваат со, особено бази на податоци, е во тоа што можете да го одредите функција што се нарекува пред Секое барање, и функцијата што добива наречен по секое барање, со користење на овој барање функција декоратер app.before. И така ова ќе се извршуваат каде и оваа функција е. Ова не мора да биде нарекува пред барањето, но обично тоа е нешто разумно да го наречеме. Можете да наведете било функција сакаш да се вика таму, па јас наведени ова initialize_db функција што ја имавме уште во Модели датотека, па пред секое барање, сакате да се поврзете на базата на податоци. Постојат два различни начини можете да го направите тоа. Можете да го направитеapp., Јас Верувам дека тоа е after_request. И разликата помеѓу after_request и teardown_request, after_request е тоа што само ќе се случи ако барањето всушност е валиден. И така, само ако барање беше успешна, ако ништо не беше во ред, но teardown_request се случува во случај на успешна барање, или, во случај на грешка. Така, обично, сакаш да се користи teardown_request, освен ако не сакате да се направи нешто, особено различни во случај на грешка. Но, само за затворање на базата на податоци, без разлика дали тоа ќе успее или ако тоа не успее, правиме сакате да се исклучите од базата на податоци. Така што се вика, db.close на ДБ објект. Забележите дека teardown_request зема во исклучок. За да може да се провери дали има е всушност грешка при дека се затвора, но тука, се надевам, таму не се целина многу грешки, па ние сме само вид на неа тоа. Океј, и остатокот од тоа не е толку лош. Значи, кога ќе одат на почетната страница, ние изречена оваа home.html Шаблон што ќе се отвори. Поминете е во пост еднаков на, и она што оваа не е, се сеќавам имаме овој пост моделот, па ги селектираме сите постови, а потоа и уште една работа што можете да направите, можете да наведете КАДЕ клаузула, можете да наведете еден да нареди од страна, и така ние се сите постови кои се избрани, а потоа ние ги ред од страна на post.date.descending. И дека ќе се определи, кога тие, всушност, излезе, најновиот ќе биде многу првиот. И тогаш, ние го положат дека во дефиниција home.html, па ајде да всушност се отвори Шаблон дека навистина брзо, и да ги разгледаме во тоа како што е работа. И ова не е голема HTML, но Се надеваме дека можеме да се фокусираме на Пајтон. Па таму е линк до Внеси нов Мислење, па така ова го одредува правецот во рамките на Колба дека ние се дефинира, кој е во право тука. Ова е новиот пост пат, а ние се каже дека до тука. И така тоа е врска, тогаш тоа ќе се оди до тој пат во рамките на серверот колба. Повеќе интересни нешто е ова за јамка тука. За да можеме да се каже дека овој место параметар кој беше донесен во render_template функција, за секој пост во пост е објект што ќе поминуваат во. Ние сакаме да се печати назив, во Н1, а потоа и подолу, ние сакаме да се печати цитирате во параграф. И тука, ние всушност може да јавите на функција Пајтон, така што можеме да го наречеме strftime, СТ-RF-време, и може да се помине во формат стринг што сакате да печатите на податоци во. Па тоа е многу убаво што ќе може да всушност се јавите на оваа функција Пајтон од рамките тука. Вие не треба да се направи за форматирање на страна на контролорот, бидејќи навистина, форматирање на датумот е нешто што сакате да се справи во рамките на приказ. И сите овие проценти работите не е супер важно. Ако погледнеш документација за функцијата strftime во Python, го одредува сите овие работи, но тоа е како, кога бевме во потрага на почетната страница тука, тоа формати ова со убав датумот, и тоа специфицира AM или PM, но нормално, ако се немале овој овде, најверојатно ќе добие некои ѓубре датум кој не изгледа многу добро. А потоа ние наведете post.text, и можев да да се стави неколку линија паузи тука, само да се стави некои простори помеѓу секој пост. Значи, мислам дека најважна работа во овој пример, е дека можете да го користите овој за телефонска линија. И ова е аналогно работи што можете да направите во PHP. Можете да iterate преку, се што ќе поминуваат во, И така, наместо да се направи copy / paste, copy / paste сите HTML, вие само треба да го пишувам еднаш, а потоа можете да iterate во текот на сите на мислења. И ова е нешто вообичаени што сакате да се направи, кога ќе имаат голем број на податоци, е дека за се што е во вашите податоци, што сакате да направите нешто слично. И тогаш, само се сеќавам, дека кога ќе сакате да испечатите нешто експлицитно во HTML, можете да користите во двојни брановидни загради тука, но потоа, кога сакате да одредите некои информации за состојбата, или врска за телефонска линија, можете користете проценти заграда. Значи, да се вратам на Пајтон код, така што објаснува она што се случува во главниот пат, кога ќе одам таму, тоа само ги прикажува сите мислења, но потоа на прашањето е, како ние всушност се постови во базата на податоци, која е малку поинтересна. Значи, кога ќе кликнете на нова Пост линк, како што видовме тука, тоа води до оваа форма. И тоа е само еден едноставен повик до render_template функција, која потоа минува во новата функција во HTML форма. Па ајде да ги разгледаме во тоа. Така што ова е прилично едноставна. Таа има едноставна HTML форма, што ќе изгледа малку познати, врз основа на форми во CS50 финансии. И така, ние наведете тука, акцијата. И тука, ако си работат со PHP, нормално, ќе биде нешто како, create.PHP, но тука ние всушност го одредите рутата во рамките на серверот колба. И така, овој пат одговара на пат да се создаде ние сме тука, што ќе одиме во секунда. И така, ние се каже дека Тоа е метод пост, бидејќи ние сакаме да се испрати оваа форма на податоци, како и обично кога праќаш податоци од формулар, можеби ќе сакате да го користите барање мислење, само да не завршуваат со овој голем, гломазен URL-то. Но вие исто така може да го користат на оваа барање за ГЕТ, и да го во со променлива рутирање, туку и за форми, тоа е убаво на барање пост тука. И така, тогаш, само да ви се допаѓа би го направил со HTML и PHP, можете да наведете овие текстуални влезови, и можете да го зададете името на нив, а тоа е името што ќе се донесе во барањето објект во колба. И тогаш имаме Достават копчето што вели Пост. И тука, пост е името на копче, бидејќи тоа е еден блог пост, Но, еве, пост е метод на барањето. Значи тоа се ист збор но, всушност, не се поврзани. Је Да се ​​вратам на кодот на Пајтон, кога ќе се нарекува метод на креирање, известување тука дека можете да всушност се определи во рамките на пат методи на барање што сакате да го прифати, и така тука, јас се каже дека јас само сакаат да го прифати методот пост. Значи, ако јас всушност се обидуваат да ја посетите страницата директно, кој е со користење на барање ГЕТ, тоа ќе ми каже "Начин не е дозволено." И така, ќе мора страници, како вид на ова се создаде страница, која јас сум само навистина се користи како начин за форма да поднесат, можете да наведете дека ти не сакате луѓето да бидат во можност да одам таму директно преку барање на ГЕТ, или ако не сакаат, поради некоја причина, барањето Пост, можете само да го одредите добие тука, но, во овој пример, ние само сакате барањето објавите да се излезе. Значи, кога create_post се вика, кога ги посетуваме дека преку барање Пост, секогаш кога ќе отидете на одредена пат, таму е овој објект барање, и моравме да увезува барања во самиот врв, но има ова барање објект што ќе поминуваат во, и можете да пристапите до податоците на формата, со што автоматски ќе се полни кога ќе се испрати барање од некоја форма. И тогаш, што мислам е навистина кул, се таа форма објект да се донесе во, е само речникот Пајтон дека содржи, ако access-- па еве, нека ме повлече нагоре на HTML веднаш до неа, само за да можете да го имаат тоа како референца, да, така имињата кои ги наведете тука за различни области, па насловот и текстот, а потоа само ги користат овие овде како индекси во податоци на формуларот. Па тоа е супер лесен. Па тогаш ние го нарекуваме post.create, која ќе се создаде и автоматски вметнете овој нов пост објект во базата на податоци. И мислам дека ова се создаде функцијата тука е многу добар пример за тоа како Колба е моќен и работа со ова, затоа што ако ви се прави нешто во PHP, можеби ќе треба да направи многу на нострификација, вие ќе треба да потоа се воспостави база на податоци врска, вие ќе треба да потоа изврши пребарување SQL, но тука ние само треба овој убав post.create, кои можеме да потоа само се добие информации од на барањето објект, а потоа ќе поминат во нова објавите дека ние сме создавање. И тогаш, на самиот крај, нешто што сакате да направите, е да се пренасочи на корисникот назад до дома. И така ние ги користиме оваа Колба пренасочи функција. И нешто што го немавме пред тоа, беше овој URL функција. Па URL за функција овозможува ќе помине во всушност името на функцијата во вашиот Python код, а не на одреден пат што тоа е во. Па јас би можеле да имаат само така лесно пренасочени на корисникот да се намали, кој ќе го испрати дома, но користење на URL за функција е убаво, бидејќи ако се промени Локацијата на која работите, па да речеме дека го сменам дома за да биде во / home, наместо тоа, ова, сепак, ќе потоа да се вратите / домот, затоа што, всушност, оди и гледа нагоре името на функцијата, и тоа ќе ви дадам се врати на URL-то за тоа. Значи, вид на на претпоставка дека сте со поголема веројатност да се промени, каде што работи се, од имињата на функции. Можете да го користите ова навистина убаво URL за функцијата. И една работа да бидат свесни за тоа е малку незгодно, е тоа што мислите дека може само да јавете се пренасочи на URL-то, но всушност сите правци имаат да се врати некој вид на текст и HTML, така што всушност треба да се врати на пренасочување на повик. Во спротивно, ќе добиете нешто невалидно врска не враќање на стринг, бидејќи сите овие мора да се врати HTML со што всушност сакаат да ја даде. И така, кога ќе се јавите на пренасочување, тоа води до страната, но тоа всушност се враќа на HTML што треба да се изврши што пренасочување. Вратете се во почетната страница. Па ние имаме овие две различни гледишта. Имаме поглед дома. Или, претпоставувам дека треба да се каже шаблони. Ги имаме овие две шаблони, дефиниција дом кој ги прикажува сите од нашите мислења, и тогаш имаме оваа реклама работа, и кога ќе кликнете на пост, тоа оди за нов пат во рамките на колба, но тој пат не мора имаат соодветен шаблон. Вие не мора да се види ништо, но може да се уште имаат оваа работа се случува зад сцената. А потоа ќе се пренасочени назад кон почетната страница. И, дефинитивно, тоа е лесно да се работи во некои поубави CSS во дефиниција и да се направи ова изгледа многу поубаво, но сите од главните логиката е таму во Пајтон. Било какви прашања во врска со тоа на пример? Знам дека има многу различни работи се случува таму, многу работи што не го видел пред тоа, но како ништо. Је. ПУБЛИКАТА 1: Дали треба да правите ништо посебно да мелез на податоци што е чувар од форма? Јас забележав само рече "создаде" EZRA ZIGMOND: Да, така што е всушност, тоа е навистина добра поента. Значи, прашањето е, дали Треба да проверите и да бидете сигурни дека податоците е валиден, и направи било кој вид на триење за да бидете сигурни дека тоа е валиден, бидејќи, како што можете да видите тука, Јас не го правам тоа. Да видиме што ќе се случи ако јас ја објавите нешто празно. Значи, тоа ќе се всушност само се направи празно место и да се пополни во DateTime. Така, во реалноста, најверојатно ќе Сакате да направите нешто слично, можеби одредите насловот е еднаква на на празна низа, тогаш немојте да го направите тоа. Или, пак, само го направи тоа ако насловот е не еднаква на празен стринг. Па тоа не се, всушност, автоматски се грижи за тоа триење за вас, така што ќе треба да го направите тоа. Да, добро прашање. ПУБЛИКАТА 2: Дали тоа мелез за продолжението инјекција? Дали знаеш? EZRA ZIGMOND: Се надевам дека, peewee прави тоа. Мислам дека тоа сигурно ќе биде многу лоши библиотека ако тоа не го стори тоа. Не знам точно. Јас ќе треба да се погледне на пребарувањето што ја создава. Мислам дека, ако јас ја внеле во блог пост дека вид на погледна како SQL инјекција напад, нешто како ова, ако овој е како поле лозинка или нешто, може да се направи нешто како ова. Мислам дека ќе се уште буквално се испратени, но мислам дека peewee прави некој вид на чистењето на податоците пред тоа всушност го извршува. ПУБЛИКАТА 1: Тоа е поле за текст цел да се преземат со обичен текст, нели? EZRA ZIGMOND: Да, тоа е. Је. Па јас мислам дека сите, па ова е коректното однесување, која ќе го направи тоа, но мислам дека peewee се надевам дека го стори некој вид на заштита на својот крај. И ако си сакал да двојно проверете дали има начини кога генерирате пребарување. така да не мора да го го изврши директно. Би мора да се земе погледнете во документацијата, но вие всушност може да го погледнете SQL дека тоа е генерирање, и да ги разгледаме во тоа, и да се направи сигурни дека тоа е бегство работи. Уште една причина зошто можеби сакате да се погледне на SQL дека peewee е Ставање, е ако работите се чини дека се случува навистина бавно, можете да ги разгледаме и да видиме што тоа е всушност, го прават, затоа што тоа е понекогаш лесно да се случајно додадете во, начинот на кој што пишува, случајно сте може да го имаат изберете целата база на податоци, прво, а потоа направи некој вид операција на тоа, кога навистина со цел да го изберете една подгрупа. И така, ако работите не се сосема оди право, добро е да фрлите поглед на барање Тоа е всушност да се создава. Је. ПУБЛИКАТА 2: Кога за прв пат започна, се стави во пристаништето како 5000. EZRA ZIGMOND: Да. ПУБЛИКАТА 2: е стандардно со peewee, или тоа е нешто што може да се промени? EZRA ZIGMOND: Да, така што порта е стандардно со колба. Ако го работи без специфицирање ништо, тој автоматски ќе го правам тоа. Верувам, јас ќе треба да се убаво провери ова, но може да се каже дека во app.run, Мислам дека може да се направи такво нешто, порт = 8080. Ајде да им даде дека обиде вистински брз. Да, така што само може да се определи порт = 8080, а тоа ќе го работи таму, што мислам дека, ако си сакал да го работи на ИРО, Јас не се обиделе ова, но мислам дека ако тоа трчаше на порта 8080, најверојатно ќе биде во можност за пристап на серверот, исто како што беа за страната. Да, но тоа е лесно да го промени тоа ако било кој вид на како порта-шпедиција работи кои што треба да се направи. Било какви други прашања? Да? ПУБЛИКАТА 1: Па, го видов во твојот модели, кои, како што рековме, ќе мора да се определи база на податоци за секој објект. Дали ви се случи да се знае, дали кои го прават тоа навистина лесно, ако имаат многу SQLite бази кои ви сакате да го користите за една единствена web апликација, дека само може да се определи еден куп различни дискурси во вашиот модел? EZRA ZIGMOND: Да, нека ме отворете дека до вистински брз. Значи, ти си велејќи дека, ако сакате да имате еден куп на различни нешто, можеби се допаѓа и на студентите, за некои причина, нешто слично? Да, така што мислам дека сепак, секој модел ќе треба да се уште имаат само една база на податоци што му се доделени, но ако сака да има различни модели кои се доделени на различни бази на податоци објекти на него, вие дефинитивно може да го направите тоа. Значи, ако јас се создаде нова, нешто како ова, а сега ова е студент кој изгледа чудно е како блог пост, Можев да се каже дека база на податоци е еднаква на db_2 тука. Значи, мислам дека тоа е Главниот начин можете да го направите тоа. Кул. Било какви други прашања? Па само да завршам малку малку, тука се и некои ресурси, и овие слајдови ќе бидат објавени на интернет така што всушност може да се добие на овие линкови. Најдобрите ресурси се навистина документацијата за Колба и самите peewee. Тие се напишани навистина добро, си мислам. Значи, на веб-сајтот Колба е тука, и тие имаат quickstart туториал кој ќе прошетка низ слични работите со она што одеше преку, но ако сакате било кој вид на преглед од работите што отидов, или мислеше дека јас го појаснив нешто во збунувачки начин, тие ќе имаат слични примери таму. Peewee има документација, како и тие имаат quickstart туториал што оди во текот на главните параметри , кои ќе сакаат да ги користат. Значи, она што јас разговаравме за со единствен, и специфицирање стандардно, различните видови на области, кои се можете да го користите, сите тие ќе бидат таму. Исто така, ако имате прашања во врска со peewee, и да ги објавите на stackoverflow, човек кој направил peewee всушност продолжува и одговори оние понекогаш. Ако имате некое прашање, се надевам тој ќе биде во можност да одговори на сето тоа, затоа што тој го напишал на целата работа. Мислам дека тоа е сè што Сакав да се покријат. Ви благодариме за кои доаѓаат надвор.