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