[Гуляе музыка] Эзра Зігмунд: Прывітанне, усім. Дзякуй, што прыйшлі сёння. Дадзены семінар з'яўляецца "Пітон Вэб-прыкладанні з Настай ". Такім чынам, я буду казаць крыху аб тым, чаму Вы можаце выкарыстоўваць пляшку, каб вэб-прыкладанняў з Python, у адрозненне у некаторых іншых структур там, як Джанго, якая з'яўляецца найбольш добра вядомыя. Падзагаловак "і PeeWee ", які нешта мы будзем казаць пра тое, як ўзаемадзейнічаць з базамі дадзеных SQL. Гэта робіць яго вельмі прыемна. Так, вось толькі кароткі спіс што я хачу, каб перайсці. Так, па-першае, проста адзін слайд што будзе хуткі старт, які з'яўляецца, як атрымаць усе, усталяваны на вашым кампутары. Я збіраюся дэманстраваць гэта на маім лакальным кампутары Mac, проста таму што гэта, дзе я зрабіў гэта перш, я найбольш камфортна з ім, але гэта, безумоўна, можна на CD50 IDE. Такім чынам, пасля гэтага, я хачу, каб ўвесці тое, што колбу, і пераканаць вас, чаму вы павінны выкарыстоўваць яго ў першую чаргу. Тады, я дам кароткі Прыклад таго, што вы можна зрабіць у колбу, хуткі прыклад што вы можаце зрабіць у Peewee, а затым я пакажу вам больш Поўны прыклад прыкладання што я сабраў, што мы можа прайсці праз разам. І, нарэшце, у апошні слайд, у мяне ёсць некаторыя рэсурсы, якія вы глядзіце у онлайн для атрымання дадатковай інфармацыі. Гэта не поўны падручнік пра тое, як выкарыстоўваць колбу. І буду спадзявацца, каб пакінуць некаторы час для пытанняў. Любы назіраючы лакальна, толькі як, крычаць у сярэдзіне калі ў вас ёсць якія-небудзь пытанні. Так хуткая ўстаноўка матэрыял, калі вы хочаце, каб прытрымлівацца, або калі вы хочаце, каб атрымаць гэта на вашай ўласнай машыне, Я збіраюся выкарыстоўваць Python 2.7.10. Настой робіць працу з Python 3, але мне падабаецца Выкарыстанне Python 2, таму што ёсць некаторыя пакеты Python, што не працуюць з 3 яшчэ. Калі вы Піп усталяваны, што гэта менеджэр Python пакет, Я думаю, што калі ваш Пітон больш або роўна 2.7.9, ён у вас ужо ўсталяваны, гэта супер лёгка ўсталяваць гэтыя пакеты. Вы можаце зрабіць пункт ўсталяваць Настой, пункт ўсталяваць Peewee, як правіла, вы павінны запусціць Sudo толькі так што дазволу працаваць. І, калі вы карыстаецеся супер старая версія Python, Я рэкамендую абнаўленні Python, або з дапамогай EasyInstall ўсталяваць пипс. Такім чынам, наступны пытанне, што колба? І я думаю ,, спачатку Слушнае пытанне я падумаў на працягу доўгага часу з'яўляецца тое, што гэта вэб-дадатак? Таму што гэта слова, што я думаю выкідваецца вакол шмат што я не ведаю. І я думаю, што лепшы прыклад таго, што вэб-дадатак, сапраўды CS50 Фінансы, дзе гэта на самай справе не проста сайт, але гэта тое, што вам можа роду ўзаемадзейнічаць. Ёсць ўліковыя запісы і ўсякія розныя рэчы. Так, дзе менавіта вы малюеце лінія паміж тым, што вэб-сайт, і тое, што гэта вэб-дадатак, з'яўляецца свайго роду адвольнае, але я думаю, ідэя, гэта нешта большае, чым вэб-сайт і гэта карыснае прыкладанне. Так, настой з'яўляецца асновай для што робіць вэб-прыкладанняў з выкарыстаннем Python. І, спадзяюся, да канца гэта, я буду пераконваць вас што вы сапраўды можа нешта напісаць як CS50 фінансаў, выкарыстоўваючы Python, які я як шмат лепш, чым PHP, асабіста. Так, настой, яны называюць микрокаркас, з дапамогай якога, яны маюць на ўвазе, што гэта вельмі просты, але пашыраецца. Такім чынам, гэта толькі тое, што вам трэба, але калі вы хочаце больш магчымасцяў, гэта лёгка, каб прывесці іх у. Але толькі таму, што гэта микрокаркас, ня азначае, што гэта толькі для невялікіх праектаў. У мяне ёсць спасылка, якая кажа тут што Абама выкарыстаў у 2012 Настой для яго кампаніі сайт, які, мы спадзяемся, што-небудзь з зацвярджэння. Але тое, што я сапраўды падабаецца Настой з'яўляецца тое, што ён на самай справе не робяць якой-небудзь рашэнні па-за вас. Проста таму, што мы казаць аб вэб-прыкладаннях, Я павінен параўнаць яго з Рубі на Рэйкі і Django, абодва з якіх вялікія структуры, але яны абодва робяць здагадкі пра тое, як вы хочаце, каб ўзаемадзейнічаць з базамі дадзеных, як вы хочаце, каб прадставіць свае віды, і яны вызначана добрыя аспекты да гэтага. Напрыклад, Ruby On Rails мае гэтую актыўную сістэму запісы, які сапраўды добры спосаб ўзаемадзеяння з дадзенымі, але калі вы хочаце выкарыстоўваць Рубін на Рэйкі, вы, здаецца, прывязаны ў гэта. Але Настай, як я буду паказаць вам Peewee, Вы можаце выкарыстоўваць любы роду базы дадзеных вы хочаце, і вы можаце проста цягнуць, што ў як пашырэнне ў колбу. Дык вось чаму я сапраўды як колба, гэта тое, што гэта не рабіць здагадкі для вас на аснове рэчаў, якія вы не павінны на самай справе. Так, чаму вы павінны выкарыстоўваць колбу? Перавагі, гэта проста мае сапраўды асноўныя функцыі убудаваны ў яе, што вам трэба. Такім чынам, вы не павінны турбавацца аб разуменне цэлую кучу рэчаў што вы на самой справе не трэба. Вы не павінны турбавацца аб выключэнні функцыі што вы на самой справе не трэба. І, як я ўжо казаў, гэта супер лёгка дадаць ў пашырэннях рэчаў што вам трэба. Некаторыя з іх, настой мае самастойна яго падтрымка. Так што тое, што называецца Настой адміністратар, які адлюстроўвае, што адмін Панэль, якая забяспечвае Джанго, які дае вам добры візуальны спосаб для адміністравання вэб-сайта. Але, зноў жа, калі вы што робіць што-то проста, Вы, верагодна, не патрэбен вялікі адміністратару Панэль, так што я думаю, што гэта супер прыгожа. І недахопы, што ў вас ёсць менш энергіі з скрынкі. Такім чынам, калі вы ўпершыню адкрыць пляшку, і ў вашай праграме на Python, Вы проста набярыце з Настай імпарт *, або любы іншы, вы дакладна не атрымаеце ўсе асаблівасці вы, магчыма, захочаце. І таму вы павінны больш выразна спіс магчымасцяў, якія вы хочаце. Дык вось адзін недахоп, але я думаю, што для пабудовы невялікі вэб прыкладання, такія як я збіраюся паказваць Вы, гэта не праблема. І тое, што апошні рэч павінен сказаць, што гэта памылка друку, тое, што ёсць менш стандартызаваны канвенцый аб тым, як выкарыстоўваць пляшку, толькі таму, што ёсць не так шмат, людзі, якія выкарыстоўваюць гэта прафесійна у параўнанні з Django. Так што, калі вы паглядзіце, як нешта, "Як я магу зрабіць х" у Django, вы, верагодна, знайсці яго. Там гэта добры дызайн шаблоны, якія можна выкарыстоўваць, але з колбу, гэта накшталт ісці сваім шляхам, толькі таму, што гэта даволі невялікая бібліятэка. Так што тыя, з'яўляюцца недахопы, але я думаю, што гэта ўсё ж такі добрая бібліятэка для выкарыстання. Так што давайце проста скакаць прама ў колбе. Гэта, безумоўна, не збіраецца быць поўны падручнік, але гэта, каб даць вам ўяўленне аб тым, як структураваць, і таму вы адчуваць сябе камфортна збіраецца ад і, гледзячы на ​​дакументацыі і даведацца больш. Такім чынам, дазвольце мне адкрыць сапраўды Просты прыклад на першы, і паказаць вам, што гэта выглядае, а потым мы разбіць яго крыху больш. Так што гэта тут, дазвольце мне атрымаць гэта працуе. Так, зараз у мяне ёсць мой ход прыкладанняў. Я збіраюся адкрыць Safari, і гэта працуе на маім лакальным хасце. Так што я проста хачу, каб зрабіць гэта больш. Але лакальны: 5000 І так, прама зараз, усё гэта робіць ёсць, калі вы наведваеце вэб-сайт, ён друкуе "Hello Настай," які ня супер карысна, але я думаю, што гэта выдатна, што у гэтым маленькім файле тут, у нас ёсць працуе вэб-сервер што друк нешта. Такім чынам, давайце на самай справе выглядаюць на код на секунду, і разбіць яго няшмат. Ці з'яўляецца памер падыходзіць для ўсіх тут? Так што, спадзяюся, вы некалькі зручна выкарыстоўваць Python. Я мяркую, што мы можам паглядзець на Пітон і прачытаць яго. Калі ў вас ёсць якія-небудзь пытанні з нагоды што-небудзь, я магу таксама пайсці з гэтай нагоды. Такім чынам, першая радок з Настай, мы імпартуем, колба з капіталам "F" які з'яўляецца свайго роду ўсё Ключавыя асаблівасці, якія вам трэба. Кожны раз, калі вы пішаце файл і выкарыстоўваць настой, Вы збіраецеся хочаце імпартаваць, што, толькі таму, што, які мае ўсе асноўныя рэчы. Наступнае, што мы робім, што мы Выклікайце гэтую функцыю Настай, проста стварыць аб'ект прыкладання, і вы заўсёды будзе хацець зрабіць гэта. А потым, скачучы ўніз да Ніжняя хутка, гэтая частка тут, "имя_интерфейса _ ==" _ main_ "', які з'яўляецца Сартаваць канвенцыі Python. Так што гэта будзе выконваць, толькі калі вам запусціць гэты файл непасрэдна, выкарыстоўваючы Python. Затым, мы называем app.run, які будзе на самай справе запусціць прыкладанне збіраецца. Так, што гэта асноўная структура, якая вы будзеце мець на любым колбу прымянення, гэта вы будзеце мець гэта Дадатак = Настой (_name_), а затым app.run. Такім чынам, дзве рэчы, якія ў мяне ёсць тут, гэта тое, што мы называем маршрутаў. Такім чынам, давайце пагаворым аб маршрутызацыі трохі больш. Я вярнуся да слайдаў. Такім чынам, самая фундаментальная Канцэпцыя ў колбе маршрутызацыі. І гэта ідэя, што вам прызначыць функцыі ў Python у прыватнасці адрасоў на вэб-старонцы. Так, кожны раз, калі вы хочаце каб стварыць новы маршрут, Вы выкарыстоўваеце гэтую @ app.route Функцыя дэкаратар. Так што, калі вы не знаёмыя з Функцыя дэкаратары ў Python, менавіта гэта паняцце, дазваляе зрабіць функцыю і акружыць яго з чымсьці яшчэ. Так на самой справе, тое, што гэта робіць дэкаратар, з'яўляецца тое, што ён прымае функцыю ніжэй яе, і гэта дадае больш інфармацыі да яго, але тое, што на самой справе Настой робіць, што адбудзецца гэта не супер важна, але тое, што важна, у тым, што перш, чым маршруту, вы паставіць гэты @ app.route, а затым адрас маршруту, таму слэш тое, што мы бачыў, калі мы проста адкрыць вэб-старонку. Дык вось хатнюю. Гэта проста рыса маршрут. І тады ў вас ёсць гэтая функцыя. Імя функцыі можа быць усё, што вы хочаце. Гэта не павінна абавязкова трэба зрабіць з маршруту. А потым, усё, што Вяртанне працы функцыі, функцыя павінна вяртаць радок. І, што радок можа змяшчае HTML або што-небудзь, і што на самой справе тое, што атрымаеце вярнуўся ў вэб-браўзэры, як HTML, і ён будзе аказваць, што. Так што гэта той жа самы код які быў з прыкладу што я проста бег, таму, калі мы наведваем слэш, ён выклікае функцыю Hello World, які проста вяртае радок, Прывітанне Настай, і што друкуецца на экране. Так што яшчэ адзін прыклад, што, калі вы наведваеце / прывітанне, ён друкуе Hello Word, які павінны на самай справе сказаць, Hello World, але давайце прадставім, што было наўмысным. Такім чынам, давайце цягнуць, што да рэальнага хутка. Так што, калі вы ідзяце на лакальны / прывітанне, Цяпер ён будзе друкаваць нешта яшчэ. Так што гэта проста прыклад, як Вы можаце стварыць дзве розныя маршруты. Так, да гэтага часу гэта не супер карысна, значыць не шмат вы можаце зрабіць, вы маглі б проста рабіць усё, што з якія маюць розныя HTML-старонак, і калі вы наведваеце канкрэтны Старонка ён проста загружае старонку. Такім чынам, давайце паглядзім некаторыя больш карысныя рэчы вы можаце зрабіць. Так, адна рэч, што вы, магчыма, прыйдзецца заўважыў у прыкладзе, што я выцягнуў уверх, з'яўляецца тое, што я app.run (адладка = True). І так, што гэта адладкі аргумент робіць, гэта што, калі вы запусціць вэб-сервер, калі вы ў вашым дадатку, калі вы зменіце файл, ён будзе аўтаматычна перазагрузіць сервер. І так вы на самой справе не трэба Перазапуск Python, які з'яўляецца супер карысна. Я магу паказаць, што. Дазвольце мне падцягнуць свой код з памылкі друку ў ім, і рабіць выгляд, што памылка друку была паставіць там наўмысна для павучальных мэтах. Так давайце дадамо гэтую назад. Так што цяпер ён кажа Hello World. Я выратую яго. І калі мы цягнем назад тэрмінал, вы будзеце сказаць, што гэта перазапуск, таму што ён выявіў змены, і цяпер, калі мы перазагрузіць гэтую старонку, ён будзе друкаваць правільныя рэчы. Так адладкі супер карысна для гэтага. Акрамя таго, калі ў вас ёсць свайго роду аварыі, таму дазвольце мне зрабіць гэта дадатак аварыі маючы не вяртаць радок. Так, давайце проста яго не вяртанне няма чамусьці. А потым, калі я наведваю гэты старонка, гэта будзе проста крах, але сервер не толькі крах, гэта на самай справе дае вам супер карысны спіну след ўсё, што пайшло не так. І тое, што сапраўды добра, гэта тое, што на любым этапе гэтага задняй следу, Вы маглі б адкрыць інтэрактыўны абалонкі тут, і накшталт друку, што зменныя, якія вы хочаце, каб зірнуць на. І так на самой справе адладкі карысна для высвятлення што адбываецца з вашым Сервер, чым проста бачыць што-то ў PHP, як 500 ўнутраная Памылка сервера, які з'яўляецца супер бескарысна. Адна рэч, каб быць у курсе, з'яўляецца што калі вы пакладзеце ваша прыкладанне онлайн так што бачная грамадскасці, вы ніколі не хачу, каб пакінуць рэжым адладкі на, таму што людзі могуць фактычна выкарыстоўваць гэтую кансоль, што я паказаў вам выканаць адвольны код. Такім чынам, яны могуць раздрукаваць, як і любы сакрэтныя коды вас ёсць у наяўнасці, яны могуць выглядаць роўна як ваш сайт працуе. Так што гэта сапраўды карысна для тэставання, але заўсёды не забудзьцеся ўзяць яго, перш чым публікаваць што-небудзь у Інтэрнэце. Так што, калі вы выкарыстоўваеце нешта як PHP, ёсць гэтая ідэя што вы можаце перадаць інфармацыяй паміж вэб-старонак паставіўшы інфармацыю на самай справе ў URL, які запыт GET, але ў колбу, вы можаце на самой справе зрабіць нешта накшталт як, што, пры наяўнасці маршруту, які мае пераменная, як яго часткі. Так што, калі вы паглядзіце на гэта Прыклад на экране тут, у нас ёсць маршрут, што гэта ('/ Прывітанне /'), і таму, калі вы наведаеце / Прывітанне / нешта, што нешта будзе на самой справе атрымаць запоўненыя ў зменную імя. І заўважце, што функцыі які пастаўляецца з гэтага маршруту павінен прыняць у параметры імя, так што будзе на самой справе атрымаць перадаецца ў функцыю. А потым, калі вы ўнутры гэтай функцыі, Вы можаце звяртацца, што, як звычайная пераменная Python, і так, то гэта будзе раздрукаваць Прывітанне, а гэта будзе запоўніць імя з дапамогай некаторыя Радок фарматавання. Такім чынам, каб дадаць зменную часткі да маршрутызацыі, выкарыстоўваць кутнюю дужку маркіроўку. І, магчыма, вы можаце выкарыстоўваць тое, што называецца пераўтваральнік. І так, калі вы паставіце гэта анатацыі з двукроп'ем, Вы можаце паказаць, што гэта цэлалікавых або з якая плавае кропкай, або шлях, і ён будзе аўтаматычна канвертаваць, што. Вы таксама можаце зрабіць пераўтварэнне у функцыі Python, толькі з дапамогай акцёраў, але часам, калі Вы хочаце, каб пераканацца, што гэта цэлалікавых, Вы можаце пакласці, што Правіла пераўтварэнні ў там. Такім чынам, давайце падцягнуць прыклад некаторых зменных правілаў. Дык вось, гэта мае той жа базавы Структура з ад імпарту Flask Настой, прыкладанне = настой (_name_), і затым ён працуе ў канцы. У нас ёсць гэтыя два розныя Пераменная маршруты тут. І першы, гэта той, які я паказаў на слайдзе, які быў, што ён проста бярэ ў радок імя і гэта будзе раздрукаваць Прывітанне, імя. А потым, у другой адным выкарыстоўвае пераўтварэнне. Такім чынам, гэта будзе аўтаматычна пераўтварыць яго да Int, а затым падвоіць Int, і раздрукаваць гэта. І мы не робім якіх-небудзь пераўтварэнні ў ёй таму Настой клапоціцца пра гэта. Так давайце гэта працуе. Калі ў вас ёсць колба прыкладанне, якое працуе, Вы можаце Control-C з яго каб спыніць ход сервера. І тады я буду працаваць зменных. Такім чынам, давайце на лакальны / Hello / Эзры і Будзем спадзявацца, што гэта будзе што-небудзь для мяне. Так ён узяў на маё імя, у зменнай маршрут, і яна напоўніла яго тут. Так што я таксама пакажу хутка Прыклад падваення. Так што, калі вы ідзяце ў / двайны / 3, ён будзе друкаваць 6. Такім чынам, гэта клапаціўся пра пераўтварэнне для нас. Такім чынам, вы таксама можаце зрабіць гэта з паплавок, і нешта асаблівае, калі вам трэба паказаць нешта накшталт шлях, які дазваляе гэта прыняць касую рысу, але гэта не павінна, як правіла, быць праблемай. Да гэтага часу мы, па-ранейшаму маюць толькі што вярнуўшыся Радкі, якія не вельмі цікава. Мы маглі б на самай справе вярнуцца літаральнае HTML радок. Такім чынам, у кодзе мы можам ўставіць нешта як бі-тэг, каб зрабіць яго тоўстым, але большасць часу вам на самай справе не хачу быць напісанне HTML код у кодзе Python. Гэта становіцца сапраўды брудным, і гэта не добра правесці час. Настой дазваляе аддзяліць па-за HTML у тое, што называецца шаблону, і таму, калі вы думаеце, У рамках мадэлі MVC што вы знаёмыя з, Будзем спадзявацца, што ад працы з CS50 фінансаў трохі, Вы можаце думаць аб файлах Python як больш кантралёра, дзе яны ўзаемадзейнічаюць з любой Мадэль дадзеных вы маглі б мець. І тады яны заклікаюць да Прагляды і перадачы інфармацыі ў гэтай View запоўніць інфармацыю у HTML, што яму трэба. І тое, што мы называем гэтыя Праглядаў шаблоны ў класе. Так Настой выкарыстоўваецца іншы Python модуль, які ён будзе аўтаматычна ўсталяваць, калі вы ўсталюеце PIP Настой называецца дзиндзя, які дазваляе дадаваць гэтыя Анатацыі да HTML што вы бачыце на экране, што дазваляе вы паклалі ў рэчах, як ўмоўныя, і петлі ў HTML. Так гэта выглядае трохі падабаецца, як вы можа выкарыстоўваць PHP ў межах HTML файл, але гэта толькі, калі колбы Сервер абслугоўвае да HTML файл, ён будзе працаваць гэты шаблонаў рухавік і разабраць праз гэта і запоўніць рэчы ст. Так Настой мае функцыю render_template што вы можаце ўбачыць на дне тут. І таму, калі вы наведаеце гэтую старонку, гэта будзе аказваць гэтую Hello.html шаблон, , А затым запоўніць у гэтым HTML-старонкі. Так што давайце проста запусціць гэтую рэальныя хутка, і паглядзець, як ён выглядае, а потым я пайду праз трохі больш падрабязна. Так, вашы шаблоны збіраюцца ісці ў тэчцы Шаблоны. Гэта будзе аўтаматычна шукаць у межах Шаблоны для тэчкі гэтага шаблону. Так давайце адкрыем гэта. Такім чынам, я буду працаваць прыклад шаблонаў. Так што, калі я іду ў / Hello / Эзра, ён мае гэта жудасна, адваротны намёт тэг, які я паклаў у. Вельмі прыгожа, вельмі дынамічнай. Я вялікі прыхільнік. Але што адбудзецца, калі Я проста ісці, / прывітанне? Так што проста кажа Hello World. Я не перадаць ёй імя, і напоўніў яго аўтаматычна. Такім чынам, давайце паглядзім, як гэта зрабіў, і як мы можам пазбавіцца ад гэтага, можа быць, шацёр. Дык вось, гэта свайго роду цікавы прыклад, калі вы ведаеце, як перамыкач заявы працаваць у мове. Скажыце гэта накшталт як, што свайго роду падзення праз, дзе вы на самой справе падлучаныя два розныя маршруты да той жа функцыі. Так мы надаём / Hello маршрут і / Прывітанне / назва маршруту, каб Добры дзень, і мы паказваем using-- Python дазваляе вам пазначыць функцыю arguments-- змаўчанні так што калі няма імя, так калі мы ідзем, каб проста / прывітанне, ён будзе аўтаматычна фільтраваць назве роўная None. Такім чынам, мы аказваем Шаблон з імем = імя, так што пройдзе ў параметры імя роўна гэтым параметры функцыі імя, у шаблон. Гэта па-ранейшаму не тлумачыць, як гэта вырашыўшы, ці трэба друкаваць Hello World, або раздрукаваць маё імя. Такім чынам, давайце на самай справе выглядаюць у сам шаблон, і паглядзець, дзе гэта адкуль. Так, на працягу гэтага шаблону, мы на самай справе ёсць ўмоўную логіку, які некаторыя людзі сцвярджаюць, вы на самой справе не павінны мець шмат ўмоўна Логіка ў вашым сам шаблон. Яна павінна быць больш, у межах Кантролер, але для гэтага прыкладу гэта нешта вельмі мала. Дык вось, мы правяраем, калі імя, так што калі імя не роўна None, калі імя на самай справе прайшоў у, то мы будзем павітацца, імя з Загаловак і намёт, Усё гэта нармальна HTML, у адваротным выпадку, мы будзем раздрукаваць Hello, World раз нармальна. Так пара рэчаў, каб заўважыць тут пра тое, як адфарматаваць шаблонаў, з'яўляецца тое, што ўсе гэтыя ўмоўныя аператары, накшталт як мы гэта, калі PHP Вы хочаце ўставіць некаторыя PHP, Вы выкарыстоўваеце менш, чым пытанне знак, гэта свайго роду аналагам тут з {%. Дык вось, у нас ёсць умоўны код. А потым, калі вы на самой справе хочаце, каб літаральна ацаніць тое, і друк гэта, каб на экране, вы выкарыстоўваць двайныя фігурныя дужкі. Дык вось падвойныя дужкі, і тады мы ўказаць назву, так што ў гэта ацэніць да імя зменнай, якая быў прыняты ў ад аказваць функцыю шаблону, а не толькі друку з, калі мы пазбавіліся ад іх, было б проста раздрукаваць слова "імя". Так, што-тое, каб сачыць за. Так іншая рэч, каб апавяшчэнне, што, калі мы хочаце выкарыстоўваць render_template функцыя, мы на самай справе трэба імпартаваць гэта відавочна з колбы. А гэта прыклад модульнасць Настай, што вы не павінны імпартаваць рэчы, якія вам не патрэбныя. Вы можаце проста прынесці ў Вы на самой справе функцыі сапраўды павінны, які часам прыемна, так што вам не павінны мець усе гэтыя функцыі сядзяць, што вы не выкарыстоўваеце, але таксама, калі вы забыліся, што вы трэба імпартаваць render_template, вы, верагодна, атрымаеце папярэджанне якія дазволяць вам ведаць пра гэта. Так, гэта значыць шаблонаў. Такім чынам, мы паказалі, як рабіць простыя вэб-старонкі, і дадаць трохі больш логікі ў гэта, па зменнай маршрутызацыі. Гэта дазваляе рабіць розныя рэчы на ​​аснове Які URL вы ідзяце, а таксама тое, даць HTML-ледзь больш сэнсу Ўмовы, як вы хочаце, каб зрабіць рэчы. Вы не павінны змясціць усе Ваш HTML у вашым Python, але ў значнай ступені кожны вэб-дадатак, Вы будзеце жадаць нейкі мадэлі дадзеных, звязаныя з ім. І так, традыцыйна, гэта будзе нешта накшталт базы дадзеных SQL. А можна проста ўзаемадзейнічаць непасрэдна з SQL. Python мае, я думаю, што гэта так называецца. SQLite 3. Вы можаце проста імпартаваць SQLite 3 і выконваць запыты SQL наўпрост, але я не ведаю пра вас, але я сапраўды не люблю, проста, выпісваючы SQL запытаў. Ён імкнецца атрымаць сапраўды працяглы і складаны. І так, тое, што Мне падабаецца выкарыстоўваць, што вядомы як ОРМ, які з'яўляецца аб'ектна-рэляцыйнага адлюстравання. І справа Ан аб'ектна-рэляцыйнага адлюстравання, тое, што ёсць дзве розныя спосабы вы можаце думаць аб базах дадзеных. Так, напрыклад, што ў Прафесар малая, як правіла, выкарыстоўвае ў класе, гэта табліца Excel, дзе ў вас ёсць гэтыя радкі і слупкі гэтых, і гэта сапраўды карысна для як яна прадстаўлена ў SQL і як вы ўзаемадзейнічаеце з ім, але яшчэ адзін спосаб, што гэта на самай справе Карысна думаць пра гэта часам, у тэрмінах класаў і аб'ектаў. Такім чынам, замест мыслення кожнай табліцы як якія маюць гэты радок, якая мае пэўнае інфармацыю, вы можаце на самой справе думаць пра яго, як кожная табліца ўяўляе сабой клас, і тады кожны асобнік клас мае пэўныя ўласцівасці. Такім чынам, у гэтым прыкладзе, прыклады клас з'яўляюцца радкі ў табліцы, а затым кожнае ўласцівасць будзе быць слупком ў табліцы. Такім чынам, ОРМ, што мне падабаецца выкарыстоўваць, называецца PeeWee. Гэта сапраўды невялікі, накшталт колбы. Я думаю, што яны ідуць разам, але ёсць шмат іншых ORMs што вы можаце выкарыстоўваць. Больш папулярным з'яўляецца вядомы як SQLAlchemy, і я не магу ўспомніць, чаму я першапачаткова абраў Peewee над SQLAlchemy, ці я б сказаў вам, чаму я думаю, што гэта лепшы, але мы толькі збіраемся выкарыстоўваць гэта адным, таму што я ведаю, як яго выкарыстоўваць. Так, адно пытанне, чаму вы павінны турбавацца з дапамогай ORM, а не проста наўпрост пісаць запыты SQL? І я думаю, што лепшы выпадак, з'яўляецца тое, што вы на самай справе не трэба напісаць запыты SQL. Гэта значна прасцей, так як я пакажу вам, каб рабіць рэчы, як выбар, устаўка, выдаленне, асабліва стварэння табліц. Гэта значна прасцей напісаць класавую структуру, чым гэта структураваць Стварыць Табліца заяву, але адна рэч, каб быць у курсе, што ОРМ будзе паспрабаваць усё высветліць, што найбольш эфектыўнасць запытаў SQL будзе, але часам гэта робіцца няправільна. І асабліва, калі вы працуе з вялікім базе дадзеных, Вы можаце заўважыць, што ў запыце якія павінны быць запушчаныя хутка, адбываецца на самай справе больш. І калі вы паглядзіце пад капотам, як ОРМ інтэрпрэтуе, што ў SQL, гэта можа быць нешта рабіць сапраўды смешна, толькі таму, што ён быццам жэстам вашыя намеры няправільна. І, быў час, калі Я павінен быў замяніць яго, і толькі выканаць свае запыты SQL, проста таму што ён быў разбор дзіўным чынам. Так, ёсць некаторыя над галавой, як раз у шляху што кампілюе справаздачнасць ўніз ў SQL. Такім чынам, давайце паглядзім на супер хутка просты прыклад мадэлі дадзеных што вы маглі б выкарыстоўваць. Такім чынам, гэта код Python, і таму Першае, што вы хочаце зрабіць, гэта ад PeeWee імпарт *. Так, у адрозненне ад колба, дзе ў вас ёсць усе гэтыя асобныя модулі, і вы хочаце імпартаваць Настой і напісаць шаблон, і некаторыя іншыя што мы ўбачым пазней, з Peewee, Вы можаце проста імпартаваць ўсе, таму што гэта даволі невялікая бібліятэка. Такім чынам, першае, што вы хочаце зрабіць, гэта на самай справе стварыць гэты аб'ект базы дадзеных. Такім чынам, вы павінны дб = SqliteDatabase, а затым імя базы дадзеных. І гэта будзе на самой справе стварыць аб'ект базы дадзеных што вы можаце ўзаемадзейнічаць з, з Peewee. А потым, у нас ёсць рэальная мадэль, якую мы хочам стварыць. Такім чынам, табліца мы хочам стварыць. Так, на працягу Peewee, кожны клас мае ўласную табліцу ў вашай базе дадзеных. Так, усе класы ўспадкуюць ад базавай мадэлі, і сталіца М мадэль тое, што гэта вызначаецца ў PeeWee. Такім чынам, усе вашыя мадэлі павінны успадкаваць як іх высокім суперкласса, яны павінны успадкаваць ад мадэль, але тое, што сапраўды крута, з'яўляецца тое, што вы можаце на самой справе маюць ваш Мадэлі ўспадкуюць адзін ад аднаго. І шмат часу, ваш мадэлі дадзеных, не абавязкова зрабіць добры іерархію ў спадчыну, але часы, калі яны робяць, гэта вельмі прыемна, таму што ў вас ёсць мадэль ўласцівыя адзін ад аднаго. Такім чынам, мы вызначылі гэты клас "студэнт", які ў спадчыну мадэль, і яна мае тры ўласцівасці. Гэта мае ідэнтыфікатар, які PrimaryKeyField, што з'яўляецца тое, што, пры ўмове, па Peewee, імя з'яўляецца CharField, і гатунак з'яўляецца IntegerField. Такім чынам, гэта можа быць ці не быць як на самой справе захоўвае CS50 ўсе гатункі студэнтаў. Гэта не так, але гэта, як я хацеў бы зрабіць гэта. І тады ён мае, у гэты клас, і гэта тое, што вы можаце зрабіць з Python, вы можаце мець укладзеныя класы. І гэта нешта што патрабуецца ад PeeWee. Такім чынам, гэты клас Мета, у вас ёсць каб паказаць, што база дадзеных роўны аб'екту што мы стварылі вышэй. І гэта кажа, што файл у гэтай табліцы на самай справе адбываецца, каб быць уключаны ў. Так што гэта тое, што ў вас ёсць зрабіць у кожным з вашых мадэляў. Вы проста павінны паказаць у гэтым Мета класа што база роўная дб. Так што я звычайна раблю, калі ў мяне ёсць куча розных мадэляў, што ў мяне ёсць адна база Мадэль, што я, як правіла, проста патэлефануеце "базавая мадэль" што мае Meta клас, і ўстанаўлівае базу дадзеных, роўную дб. І тады ўсе мае наступныя мадэлі будзе успадкаваць ад гэтага базавага класа. І тады я не прыйдзецца турбавацца аб стварэнні мета клас. Так што, калі гэта на самай справе атрымлівае кампілюецца ў заяве SQL, гэта выглядае як гэта мярзота ўніз тут, "Стварэнне табліцы студэнцкі лік, " што заўгодна. І, я думаю, што ён карацей, гэты запыт будзе прама тут, але калі вы паглядзіце на гэты клас тут Вы можаце дакладна даведацца, што адбываецца. Вы можаце бачыць, якія віды палёў Ёсць, што яны называюць, і так, я думаю, што гледзячы на ​​гэтую Python кода з'яўляецца значна больш чытэльным, чым спрабую напісаць гэты SQL запыт. Такім чынам, для таго, каб фактычна выкарыстоўваць базу дадзеных, мы павінны падлучыцца да яго ў Python. Такім чынам, я звычайна пішу функцыю пад назвай initialize_db, што робіць дзве рэчы. Яна займае ў базе дадзеных Аб'ект дб і падключаецца да яго, які толькі адкрывае да падзелу да базы дадзеных. Калі вы проста працуе, хоць сайт на лакальным кампутары, гэта не супер вялікую справу, каб турбавацца аб падключэнні і адключэнні, але калі вы працуеце гэта на вэб-сайце, вы хочаце, каб пераканацца, што кожны раз, калі карыстальнік падключаецца да яго, калі яны зачыніць сайт, яны раз'ядноўваюць, так што вы не маюць кучу людзей, звязаных у базу дадзеных усё адразу. А потым, калі вам падлучыцца да базы дадзеных, Вы хочаце, каб патэлефанаваць db.create_tables, і спіс мадэляў за тое, што вы хочаце для стварэння табліц. Дык вось, я проста хачу, каб стварыць яго для гэтага студэнта. І потым, што гэта важна, каб пазначыць бяспечнае = True большы час. Так што гэтую заяву будзе рабіць, што гэта стварае табліцы для Мадэль студэнта, але толькі калі гэтая табліца не мае быў створаны ўжо. Гэта тое, што вызначае бяспечныя. Так што не будзе перазапісваць існуючы стол, гэта будзе толькі стварыць новы Табліца калі няма нікога. Такім чынам, вы маглі б проста стварыць табліцы з дапамогай SQL адзін раз. І затым, што, седзячы базы дадзеных там, а затым падлучыць да кожнага часу, але гэта, як правіла, прыемна проста пакласці ў гэтым create_tables выкліку, так што, калі вы калі-небудзь цалкам выдаліць базы дадзеных, калі вы запусціце свой вэб Дадатак зноў жа, гэта будзе ўзнавіць яго. Так, проста пераканайцеся, што ў бясьпецы паказана, каб быць праўдай, ці вы знойдзеце вашыя дадзеныя толькі атрымліваць зацёрты кожны раз. І потым, вы можаце проста патэлефанаваць initialize_db ўсталяваць злучэнне, а таксама ствараць табліц, калі гэта неабходна. Так, найбольш распаўсюджаная рэч што вы хочаце зрабіць, або адзін з найбольш распаўсюджаных рэчаў, з'яўляецца на самой справе ўставіць рэчы у вашай базе дадзеных. І так, замест таго, напісаць ўставіць у Заяву з усімі Названыя значэння, Вы можаце на самой справе назваць функцыя на класе навучэнцаў. Так што, калі вы ствараеце клас які спадкуе ад мадэлі, ён мае гэта метад стварэння. Такім чынам, вы зрабіць клас name.create, і паказаць параметры што вы хочаце, каб перайсці ў. Так што, калі я хачу, каб дадаць некаторыя студэнты да нашага прыкладу CS50 гатунак кнігі, Я пакладу ў Давідавым, якія мае вельмі добрую адзнаку, ён мае 95. І я, хто не робіць так добра ў CS50, у мяне ёсць 50. І так, добрая рэч аб што гэта робіць функцыя стварэння, з'яўляецца тое, што ён вяртае асобнік, або шэраг, што створана ў табліцы, і так, то вы захоўваеце, што ў зменнай і праца з ёй пазней. Вы можаце змяніць вакол, якія Я пакажу прыклад. Звярніце ўвагу, што я не зрабіў трэба паказаць ідэнтыфікатар, таму што, так як гэта PrimaryKeyField, ён будзе аўтаматычна павялічваць яго, калі вы не пакажаце яго. І на самай справе, вы, верагодна, ня варта паказваць яго, таму што вы можаце выпадкова калашмаціць чужой ID. І вы хочаце, каб зрабіць Пераканайцеся, што ён унікальны. Так, на самай справе, найбольш агульная рэч, якую вы хочаце зрабіць, верагодна выбраць з базы дадзеных, як толькі вы ёсць шмат інфармацыі там. І так, калі вы хочаце, каб атрымаць усё, таму эквівалент выбару зоркі ад студэнтаў заяве яго будзе проста student.select. І што дасць Вам мноства з усімі студэнта аб'екты ў ім што вы перабору вы хочаце. Вы можаце атрымаць рэчы з яго. І большую частку часу, вы не проста хачу зрабіць выбар, вы на самой справе хочаце, каб паказаць нешта. І так, вы можаце ланцуга разам гэтыя выклікі функцый, як, як вы б ланцуг Разам з заявамі ў SQL. Такім чынам, вы можаце зрабіць student.select ()., Дзе у гэтым прыкладзе. А потым, вы можаце паказаць ўмовы, толькі з дапамогай нармальнай Python Булевы, каб праверыць рэчы. Так, у гэтым выпадку, вы хочаце, каб абмежаваць тое, што вы выбіраеце, каб, дзе student.grade роўная 50, і student.name роўная Эзра, так што будзе проста атрымаць мяне з яго. І адзначаюць, адзін сапраўды тонкая рэч тут што, калі вы хочаце, каб паказаць ап і / і ці ці / або, у Python, вы звычайна карыстаецеся, Я думаю, што слова "і" на самай справе, але тут вы выкарыстоўваць адзіны Ампэрсанд, якія, як правіла, аператар пабітавае, але ў гэтым асаблівым выпадку, проста так PeeWee робіць гэта, Вы карыстаецеся адзін Ампэрсанд пазначыць "і". Гэта тое, што Я пераблытаць шмат, але гэта не прыдумаць што многае ў практыцы. А потым, калі ў вас ёсць усе студэнты з базы дадзеных, як толькі вы зрабілі вы выберыце і ваш зносу або любы іншы, Вы можаце выкарыстоўваць цыкл па кожнаму элементу, гэтак жа, як нармальна ў Python, з якой-небудзь итератора або з якой-небудзь масіў. Такім чынам, вы можаце зрабіць для S у student.select (). Whe Re (Student.grade <75), і такім чынам гэта будзе перабору кожнага студэнта ў табліцы чый клас менш 75, які у гэтым выпадку, па-ранейшаму толькі мне. І тады вы маглі б зрабіць што-то ў што цыкл, як адправіць мне ліст і скажыце мне, на самай справе ўключыць у маёй праблеме Наборы. Так, яшчэ адна рэч, вы можаце зрабіць, гэта сапраўды лёгка абнавіць радкоў у табліцы. Такім чынам, памятаеце, сюды, Ваш, калі я ўставіў, Я ўзяў значэнне, якое было вяртаецца student.create, і я прызначыў яго імем называецца Эзра. І вось зараз, вы можаце змяніць значэння ў гэтым выпадку, гэтак жа, як вы б звычайны клас у Python. Такім чынам, вы можаце ўсталяваць ezra.grade = 95 і што будзе абнаўляць лакальную копію, але калі вы сапраўды хочаце, каб зафіксавалі гэтыя змены ў базу дадзеных, вы павінны выклікаць ezra.save, так што вы называецца .save метад на экзэмпляры. І вось цяпер, я паспяхова зменены маё класа ў базе дадзеных. Так, давайце тады казаць, што мяне зловяць мяняю клас у базе дадзеных. Прафесар малая, верагодна, будзе каб жадаеце выдаліць мяне з класа, і, такім чынам Вы можаце патэлефанаваць у .delete Метад асобніка толькі на гэтай рэчы. Так што, калі вы хочаце ісці таму ў гэтым цыкле тут, і на самай справе, а не адпраўкі электроннай пошты ўсе студэнтаў, чый клас менш чым 75, вы хацелі, каб выдаліць іх, у гэтым цыкле вы маглі патэлефанаваць s.delete асобнік. І самае апошняе вы хочаце зрабіць, гэта кожны раз, калі вы ўсталёўваеце злучэнне, і вы зрабілі з вашай працай, Вы хочаце, каб патэлефанаваць db.close, дзе дб з'яўляецца тое, што базы дадзеных запярэчыць, што ў нас было раней. І вы хочаце, каб пераканацца, што усе зачыняецца з. Прахладны. Так што цяпер, у мяне ёсць прыклад прыкладання. Я накшталт папярэдне зрабіў усё проста так што не будзе ніякіх жыць кадавання памылкі, але мы можам прайсці праз гэта і паглядзець, як вы б паставіў пляшку і Peewee разам, і зрабіць простае прыкладанне. Я называю гэта CS50 гучныя, і гэта Сартаваць просты блог-платформа. Так, па-першае, я запусціць яго і паказаць, як гэта выглядае, і тады мы можам шукаць больш у код. Добра, так што давайце проста запусціць гэты. Крута, я буду рабіць гэта трохі менш. Гэта не вельмі прыгожа, толькі таму, што Я не рабіў шмат CSS, але тое, што ён робіць, яно мае Гэтая база дадзеных блога, і ён праходзіць праз усе ім, і ён будзе адлюстроўваць іх на старонцы ў парадку самых апошніх. І так гэта толькі некаторыя паведамленні што я выратаваў ў базе дадзеных. Так што, калі мы хочам стварыць новы пасаду, мы можам перайсці да Даданне новай запісу, і мы можам ўвесці назву пасаду, дык нешта накшталт, CS50 семінар. Нічога сабе, сапраўды атрымліваючы асалоду ад семінар. Прахладны. Затым націснуць пост, і ён будзе перанакіраваць вас назад на галоўную старонку, і тады вы ўбачыце, што быў дададзены да апошняга паведамлення. І мы да гэтага часу ўсе тыя там. Так што цяпер, давайце пакрокава усе з Код і паглядзець, як гэта рэалізуецца. Так, я думаю, што першае, што давайце зірнуць на, на самай справе мадэлі. Шмат часу, калі вы распрацоўваеце нешта, Вы хочаце, каб думаць перш аб тым, як Вы збіраецеся прадстаўляць свае дадзеныя, а затым распрацаваць рэчы вакол, што, так што ўсё мае сэнс. І гэта на самай справе, як я зрабіў гэта, калі я рабіў гэта, Я сеў і падумаў, Што я хачу на пасадзе. Такім чынам, вось, у нас жа структуру што я згадваў раней, дзе мы робім DB = Sqldatabase ('posts.db'). У рэчаіснасці, вы, верагодна, не хочуць жорсткі код у базах дадзеных вашага імя. Гэта, верагодна, варта параметр што захоўваецца недзе, можа быць, ў канфігурацыйным файле, але ў маленькі прыклад, як гэта, гэта нармальна на жорсткі код, які ст. Так што цяпер у нас ёсць гэты клас Post, які спадкуе ад базавай мадэлі. І яна мае, ізноў жа, ID = PrimaryKeyField. На самай справе, калі вы не пакажаце, калі я на самой справе пазбавіўся ад гэтага, Затым Peewee мы клапоціцца аб аўтаматычна ствараючы што поле ідэнтыфікатара, і ён будзе аўтаматычна зрабіць яго PrimaryKey, які Я думаю, што гэта вельмі прыемна, таму што звычайна гэта тое, што вы хочаце мець, але я хацеў бы паставіць яго ў спецыфічна, проста так я памятаю, што гэта там. Але калі вы не пакажаце, што што там будзе аўтаматычна. Такім чынам, у мяне ёсць дату, якая з'яўляецца DateTimeField, і ўсё гэтыя розныя поля, калі вы паглядзець на Peewee дакументацыі, гэта дасць вам спіс розных тыпы палёў, якія можна выкарыстоўваць. Па большай частцы, гэта аналагічна тое, што вы бачылі б у SQL. Так што ёсць CharField, А VarCharFields, тэкставыя палі, якія вельмі доўга тэксты, як блогу патэнцыйна, DateTimeFields, DoubleFields, FloatFields, усе рэчы, як, што. І вы можаце перайсці ў іншыя аргументы да яе, што я не ўказаў тут. Скажам, напрыклад, вы не хочаце, каб каб два паведамленні, каб мець тое ж назву, можна паказаць нешта накшталт унікальны = True, і гэта толькі дадатковы параметр поле, што, калі ён кампілюе яго ўніз у SQL, гэта будзе ўказваць што ён павінен быць унікальным. Вы таксама можаце паказаць нешта накшталт NOT NULL і ўсе іншыя рэчы, вы звычайна робіце ў SQL. Такім чынам, гэта даволі простая мадэль, якая мае дату. Заўважце тут, у DateTimeField, Я паказаў, што па змаўчанні. Я паказаў яго, каб быць datetime.datetime.now, з-за спосабу, што гэта атрымлівае ацэнку, гэта на самай справе ацэньвае DateTime.Now, калі ён атрымлівае устаўлены ў базу дадзеных. Я думаю, што я б пераправерыць гэта, але калі вы зрабілі нешта накшталт гэтага, то гэта будзе на самой справе ацаніць, што аднойчы, а затым DateTime заўсёды будзе тое ж самае. Так, толькі калі вы робіце нешта з DateTimes, падвойная праверка што гэта ацэнкі, калі на самай справе атрымлівае устаўлены, альбо Вы маглі б блытаць. Назва гэта проста CharField, якіх аргументаў больш, вы можаце прайсці у вызначэнні дакладна, як доўга вы хачу быць, але тут, гэта не мае значэння. І тэкст будзе тэкст ўсёй пасады, і гэта будзе TextField толькі таму, што вы хочаце каб ён мог быць даволі доўгая радок. Тады ў нас ёсць мета падклас проста паказвае, што мы хочам, базы дадзеных дзе гэта на самай справе адкрыў у каб быць аб'ектам дб, што мы тут. І апошняе, што ў нас ёсць тут, проста гэтая функцыя што мы збіраемся выкарыстоўваць з нашага асноўнага прыкладання каб ініцыялізаваць базу дадзеных для падлучэння да гэта, а затым стварыць табліцу пост. Цяпер, давайце паглядзім на самога асноўнага прыкладання. Так што гэта адзін даволі крыху больш, чым тых, што мы бачылі раней, але, спадзяюся, не занадта дрэнна. Такім чынам, дазвольце мне пашырыць гэта. Добра. Так, заўважаць і верхняя я імпартаваў цэлая куча іншых рэчаў, Настой з, што мы не сапраўды бачыў. І, спадзяюся, мы можам прайсці праз кожны з іх па адным і казаць крыху больш пра ім, Сартаваць па прыкладзе. Такім чынам, мы маем у колбу, і 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, але Будзем спадзявацца, што мы можам засяродзіцца на Python. Такім чынам, ёсць спасылка на дадаваць новыя Паведамленне, і такім чынам гэта паказвае маршрут у колбу, што мы вызначыць, што прама тут. Гэта новая пасада маршрут, і мы паказваем, што тут. І так, што гэта спасылка, якая будзе затым на гэты маршрут у сервер колбу. Чым больш цікавая рэч гэта цыкл тут. Так мы паказваем, што гэта Паведамленне параметр, які перададзены ў render_template функцыя, для кожнага паста ў пост-ых Аб'ект, які атрымлівае прыняты ў. Мы хочам, каб раздрукаваць пост назву, у H1, а затым ніжэй, мы хочам, каб раздрукаваць пост тэкст у абзацы. І вось, на самай справе мы можам выклікаць функцыю Python, такім чынам, мы можам назваць STRFTIME, ST-RF-час, і вы можаце перадаць радок фармату што вы хочаце, каб раздрукаваць дадзеныя ст. Так што гэта вельмі прыемна, што вы можаце на самай справе назваць гэтую функцыю Python знутры тут. Вы не павінны рабіць фарматаванне на бок кантролер, таму што сапраўды, фарматавання даты з'яўляецца тое, што Вы хочаце, каб мець справу ў поле зроку. І ўсе гэтыя працэнты рэчы не супер важна. Калі вы паглядзіце на дакументацыю для функцыі STRFTIME ў Python, ён вызначае ўсе гэтыя рэчы, але гэта як, калі мы шукалі на хатняй старонцы тут, фарматуе гэта з добрым дата, і гэта вызначае АМ або PM, але, як правіла, калі гэтага не было тут, вы, верагодна, атрымаеце нейкую бздуру дата не выглядаюць вельмі добра. І тады мы пазначыць post.text, і я мог паставілі пару Лінія ламае тут, проста паставіць некаторыя прабелы паміж кожнай пасады. Такім чынам, я думаю, самае галоўнае што ў гэтым прыкладзе, з'яўляецца тое, што вы можаце выкарыстаць гэта для завесы. І гэта аналагічна рэчы, якія вы можаце зрабіць у PHP. Вы можаце перабраць, усё становіцца прайшоў у, і так, замест таго, каб рабіць капіяваць / ўставіць, капіяваць / ўставіць HTML ўсе, Вы проста павінны напісаць яго адзін раз, а затым Вы можаце перабраць усе пасады. І гэта нешта агульнае, што вы хочаце рабіць, калі ў вас ёсць шмат дадзеных, з'яўляецца тое, што за ўсё ў вашых дадзеных, Вы хочаце, каб зрабіць падобную рэч. А потым, памятаеце, што калі вы хочаце раздрукаваць нешта відавочна у HTML, можна выкарыстоўваць падвойныя дужкі тут, але потым, калі вы хочаце пазначыць некаторая інфармацыя аб стане, або каля цыкл, вы выкарыстоўваць працэнтнае кранштэйн. Так, вяртаючыся да Python Код, так што тлумачыць што адбываецца ў асноўны маршрут, калі мы ідзем туды, ён проста адлюстроўвае ўсе паведамленняў, але тады пытанне у тым, як мы на самай справе атрымаць паведамленняў у базу дадзеных, якая трохі больш цікавым. Так што, калі вы націскаеце на Новы Паведамленне звяно, якое мы ўбачылі тут, ён перанакіроўвае вас на гэтым выглядзе. І гэта толькі просты выклік да render_template функцыя, якая затым праходзіць у новай пасады ў HTML форме. Такім чынам, давайце зірнем на гэта. Так што гэта адзін даволі простая. Яна мае просты HTML формы, які будзе выглядаць крыху знаёмыя, на аснове формаў у CS50 фінансаў. І так, мы паказваем тут, дзеянне. І вось, калі вы працуеце з PHP, як звычайна, яго будзе нешта падобнае, create.php, але тут мы на самай справе вызначыць маршрут у серверы колбу. І так, гэты маршрут адпавядае да стварэння маршруту што мы маем тут, што мы пойдзем у у секунду. І так, мы паказваем, што гэта метад пошта, таму што мы хочам, каб адправіць гэтая форма дадзеных, і, як правіла калі вы адпраўляеце дадзеныя з формы, Вы можаце выкарыстоўваць запыт паведамлення, толькі так вы не да канца з гэтай вялікай, грувасткі URL. Але вы таксама можаце выкарыстоўваць запыт GET, і перадаць яго ў зменнай маршрутызацыі з, але для формаў, гэта прыемна каб пасля запыту тут. І так, то, як і вы маглі б зрабіць з HTML і PHP, Вы можаце задаць гэтыя тэкставыя ўваходы, і вы можаце паказаць імя іх, і гэтае імя, якое будзе атрымаць прайшлі ў аб'ект запыту ў колбу. І тады ў нас ёсць Адаслаць Кнопка, якая кажа паведамленне. І вось, паведамленне гэтае імя з Кнопка, таму што гэта паведамленне ў блогу, але тут, пост метад запыту. Так што тыя ж слова але на самой справе не звязаныя. Ды Вяртаючыся да кода Python, калі мы назвалі метад стварэння, заўважыць тут, што вы можаце на самай справе, сфармулюйце у ​​маршрут метады запыту што вы хочаце прыняць, і вось, я паказваю, што я толькі хачу, каб прыняць метад POST. Так што, калі я на самой справе спрабуюць наведаць старонку непасрэдна, які з дапамогай запыту GET, ён скажа мне "Метад не дазволена». І так, у вас ёсць старонкі, накшталт як гэта стварэння старонкі, якія я толькі сапраўды, выкарыстоўваючы ў якасці сродку для форма, каб прадставілі, Вы можаце паказаць, што вы не хочуць, каб людзі маглі туды непасрэдна з дапамогай запыту GET, або калі вы не хочаце, па некаторых прычынах, просьба Паведамленне, вы маглі б проста паказаць трапіць сюды, але ў гэтым прыкладзе, мы проста хачу просьба Паведамленне выходзіць на вуліцу. Так што, калі create_post называецца, калі мы наведваем, што з дапамогай запыту паведамленне, кожны раз, калі вы ідзяце да пэўнага маршрут, там гэта аб'ект запыту, і мы павінны былі імпартаваць Запыты на самым версе, але ёсць гэты запыт Аб'ект, які атрымлівае прыняты ў, і вы можаце атрымаць доступ да дадзеных формы, які будзе аўтаматычна запаўняюцца пры адпраўцы запыту з формы. А потым, я думаю, што тое, што гэта сапраўды крута, гэта што аб'ект формы, каб атрымаць прайшло у, гэта проста слоўнік Python, што змяшчае, калі вы access-- так вось, хай мне падцягнуць HTML побач з ім, проста так што вы можаце мець, што ў якасці эталона, ды, так імёны, якія мы паказваем тут для розных абласцей, так назву і тэкст, мы затым проста выкарыстоўваць тыя сюды ў якасці індэксаў ў дадзеных формаў. Так што супер зручна. Такім чынам, мы называем post.create, што будзе ствараць і аўтаматычна ўстаўляць Гэты новы пост аб'ект у базу дадзеных. І я думаю, што гэта функцыі стварэння тут сапраўды выдатна прыклад таго, як магутны колбу і працуе з гэтым, таму што калі вы нешта рабілі у PHP, вы, магчыма, прыйдзецца зрабіць шмат праверкі, вам давядзецца потым ўсталяваць злучэнне з базай дадзеных, вам давядзецца потым выканаць SQL запыт, але тут мы проста павінны гэта прыемна post.create, што мы можам потым проста атрымаць інфармацыю з з аб'екта запыту, а затым перадаць яго ў новы пост, які мы ствараем. А потым, у самы апошні што мы хочам зрабіць, гэта перанакіраваць Карыстальнік назад да хаты. І таму мы выкарыстоўваем гэта Настой перанакіраваць функцыю. І тое, што мы не бачылі перш, быў гэты адрас функцыі. Такім чынам, URL для функцыі дазваляе Вы праходзіце на самай справе назву функцыі ў кодзе Python, а не канкрэтнага маршруту што гэта ў. Так што я мог бы гэтак жа лёгка перанакіраваны карыстачу слэш, якія б адправіць яго назад дадому, але выкарыстоўваючы URL для функцыі прыемна, таму што, калі вы зменіце месца, дзе рэчы, так што давайце казаць, што я змяніць дадому, каб быць у / дома, а, гэта яшчэ тады вярнуцца / дадому, таму што на самой справе ідзе і глядзіць імя функцыі, і гэта дасць вам назад URL для гэтага. Так, накшталт на Здагадка, што вы хутчэй за ўсё, зменіцца, дзе рэчы ёсць, чым імёны функцый. Вы можаце выкарыстоўваць гэта на самай справе прыемна URL для функцыі. І яшчэ адна рэч, каб быць у курсе што гэта крыху больш складана, з'яўляецца тое, што вы думаеце, вы маглі б проста перанакіраванні на URL для, але на самой справе ўсё маршруты вярнуць нейкі тэкст і HTML, так што вы на самой справе трэба вярнуцца перанакіраванні. У адваротным выпадку, вы атрымаеце нешта несапраўдным пра не вяртанні радок, таму што ўсе яны маюць вярнуць HTML-вы на самой справе хочаце зрабіць. І таму, калі вы выклікаеце перанакіраванне, ён перанакіроўвае вас на старонку, але на самой справе вяртае HTML Вы павінны выканаць гэтую пераадрасацыю. Вярнуцца на галоўную старонку. Такім чынам, мы маем гэтыя дзве розныя погляды. У нас ёсць выгляд дома. Або, я думаю, я павінен сказаць, шаблоны. У нас ёсць гэтыя два шаблоны, шаблон дом, які адлюстроўвае ўсе нашы пасты і то мы маем справу аб'яваў, і пры націску на пасаду, ён ідзе да новага маршруце ў колбе, але маршрут не абавязкова маюць адпаведны шаблон. Вы не павінны бачыць што-небудзь, але вы ўсё яшчэ можаце ёсць гэтая праца адбываецца за кулісамі. І тады вы трапляеце вярнуцца на галоўную старонку. І, безумоўна, гэта лёгка працаваць у нейкай прыемней CSS у шаблон і зрабіць гэта выглядаць нашмат лепш, але ўсё асноўнай логікі ёсць у мове Python. Любыя пытанні аб тым, што, напрыклад? Я ведаю, што ёсць шмат розныя рэчы там адбываецца, шмат рэчаў, якія мы не бачылі раней, але як-небудзь. Так. АЎДЫТОРЫЯ 1: Ці ёсць у вас што-небудзь зрабіць спецыяльны скраб дадзеныя, якія знаходзяцца паступаюць з формы? Я заўважыў, што вы толькі што сказалі, "стварыць", Эзра Зігмунд: Так, так вось на самай справе, што гэта сапраўды добрая кропка. Такім чынам, пытанне было, ты трэба праверыць і пераканацца, што дадзеныя сапраўдныя, і зрабіць які-небудзь ачысткі каб пераканацца, што гэта сапраўды, таму што, як вы можаце бачыць тут, Я не раблю гэтага. Такім чынам, давайце паглядзім, што адбываецца, калі я адпраўляю сёе-тое пусты. Такім чынам, гэта будзе на самой справе проста зрабіць пусты пост і запоўніць DateTime. Такім чынам, у рэчаіснасці, вы, верагодна, хачу зрабіць нешта падобнае, магчыма, пакажыце, калі назва роўная пустая радок, то не рабіце гэтага. Або, толькі зрабіць гэта, калі назва ня роўнае пусты радку. Так што на самай справе не аўтаматычна паклапаціцца аб тым, чысткі для вас, так што вы ўсё яшчэ трэба, каб зрабіць гэта. Так, добры пытанне. АЎДЫТОРЫЯ 2: Ці гэта скраб для ін'екцый сіквела? Ты ведаеш? Эзра Зігмунд: Спадзяюся, PeeWee робіць. Я думаю, што гэта, несумненна, будзе даволі дрэнна бібліятэка, калі ён не зрабіў гэтага. Я не ведаю дакладна ,. Я павінен глядзець на запыт, што яна спарадзіла. Я думаю, што, калі я набраў у паведамленне ў блогу, нешта паглядзеў як нападу SQL-ін'екцыі, нешта накшталт гэтага, калі гэта гэта як поле пароля ці нешта, Вы маглі б зрабіць нешта накшталт гэтага. Я думаю, што будзе па-ранейшаму атрымаць літаральна размешчаныя, але я думаю, што сапраўды робіць PeeWee свайго роду ачыстка дадзеных перш чым ён на самай справе выконвае яго. АЎДЫТОРЫЯ 1: Гэта тэкставае поле распрацаваны, каб звычайны тэкст, правільна? Эзра Зігмунд: Так, гэта так. Так. Так што я думаю, што ўсё з, так што гэта правільнае паводзіны, што будзе рабіць, што але я думаю, што Peewee спадзяюся, сапраўды робіць свайго роду абаронай ад іх канца. І калі вы хочаце, каб падвойная праверка, што там спосабы пры стварэнні запыту. так што вам не прыйдзецца выканаць яго непасрэдна. Я павінен ўзяць паглядзець на дакументацыі, але вы можаце праглядзець SQL, што ён спараджае, і зірнуць на гэта, і зрабіць пераканацца, што яна ўцякае рэчы. Яшчэ адна прычына, чаму вы, магчыма, хачу паглядзець на SQL што PeeWee выводзіць, калі гэта рэчы, здаецца, ісці вельмі марудна, Вы можаце зірнуць і паглядзець, што гэта на самай справе робіць, таму што гэта часам лёгка выпадкова дадаць у, як вы пісаць, Вы можаце мець яго выпадкова выбраць ўсю базу дадзеных па-першае, а затым зрабіць некаторыя аперацыі сартавання ад таго, калі вы сапраўды прызначаныя для выбару падмноства. А так, калі рэчы не цалкам ладзіцца, гэта добра, каб зірнуць на просьбу што на самой справе атрымліваць генеруецца. Так. АЎДЫТОРЫЯ 2: Калі вы ўпершыню пачалі, Вы змяшчаеце ў порце, 5000. Эзра Зігмунд: Так. АЎДЫТОРЫЯ 2: па змаўчанні з Peewee, або што-то вы можаце змяніць? Эзра Зігмунд: Так, так што порт па змаўчанні з колбы. Калі вы запусціце яе без паказаўшы нічога, ён будзе аўтаматычна рабіць. Я веру, я б пераправерыць гэта, але вы можаце паказаць, што ў app.run, Я думаю, што вы можаце зрабіць нешта накшталт, Порт = 8080. Давайце, што паспрабаваць рэальны хуткі. Так, так што вы можаце проста паказаць Порт = 8080, і яна будзе працаваць яго там, якія я думаю, калі вы хочаце, каб запусціць яго на IDE, я не спрабаваў гэта, але я думаю, што калі вы пабег на порце 8080, Вы, напэўна, зможаце для доступу да сервера, проста, як вы былі на вэб-сайце. Так, але гэта лёгка каб змяніць гэта, калі вам ёсць якой-небудзь, як пераадрасацыі партоў рэчы, якія вы павінны зрабіць. Любыя іншыя пытанні? Да? АЎДЫТОРЫЯ 1: Такім чынам, я ўбачыў у вашым мадэлі, што, як вы згадалі, Вы павінны паказаць база дадзеных для кожнага аб'екта. Вы, выпадкова, ведаеце, робіць што зрабіць гэта вельмі лёгка, калі вы ёсць шмат баз дадзеных SQLite на што вы хочаце выкарыстоўваць для аднаго вэб-прыкладанні, што вы можаце проста паказаць кучу розных тыя, у вашай мадэлі? Эзра Зігмунд: Так, дазвольце мне адкрыць, што да рэальнага хутка. Так, вы кажаце, калі вы хочаце, каб куча розных то, можа быць, падабаецца, і студэнты, для некаторых Прычына, нешта падобнае? Так, так што я думаю, што Вы ўсё яшчэ, кожная мадэль прыйдзецца яшчэ раз адна база дадзеных ускладзены на яго, але калі вы хочаце мець розныя мадэлі, якія маюць розныя аб'екты базы дадзеных прысвойваецца да яго, можна вызначана зрабіць гэта. Так што, калі я стварыў новы, нешта накшталт гэтага, і зараз гэта студэнт, які выглядае дзіўна, як блогу, Я мог бы паказаць, што База дадзеных роўная db_2 тут. Такім чынам, я думаю, што гэта Асноўным спосабам вы можаце зрабіць гэта. Прахладны. Любыя іншыя пытанні? Так што, каб скончыць трохі трохі, вось некаторыя рэсурсы, і гэтыя слайды будуць размешчаны ў Інтэрнэце так што вы можаце на самой справе атрымаць па гэтых спасылках. Лепшыя рэсурсы сапраўды дакументацыя для Настой і Peewee сябе. Яны напісаныя вельмі добра, я думаю. Такім чынам, сайт Настой тут, і яны маюць Хуткі старт падручнік, які будзе ісці праз падобнае рэчы, што я ішоў праз, але калі вы хочаце якой-небудзь агляд з рэчаў, якія я падышоў, ці вы думалі, што я патлумачыў то ў зман чынам, яны маюць падобныя прыклады ёсць. Peewee мае дакументацыю і яны маюць Хуткі старт падручнік што пераходзіць асноўных параметраў што вы хацелі б выкарыстоўваць. Так, тое, што я казаў пра з унікальныя і вызначаюць змаўчанні, розныя віды палёў, Вы можаце выкарыстоўваць тыя, усё будзе там. Акрамя таго, калі ў вас ёсць пытанні аб Peewee, і вы размясціць іх на StackOverflow, хлопец, які зрабіў на самай справе Peewee працягваецца і адказвае тым часам. Калі ў вас ёсць пытанне, спадзяюся, ён будзе ў стане адказаць на яго, таму што ён пісаў ўсю рэч. Я думаю, што гэта ўсё Я хацеў, каб пакрыць. Дзякуй, што прыйшлі з.