[Грає музика] Езра Зигмунд: Привіт, всім. Спасибі, що прийшли сьогодні. Даний семінар є "Пітон Веб-додатки з Настій ". Отже, я буду говорити трохи про те, чому Ви можете використовувати флягу, щоб веб-додатків з 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 продовжується і відповідає тим іноді. Якщо у вас є питання, сподіваюся, він буде в змозі відповісти на нього, тому що він писав всю річ. Я думаю, що це все Я хотів, щоб покрити. Спасибі, що прийшли з.