web приложение на python flask

Мега-Учебник Flask, Часть 1: «Привет, Мир!»

Это первая статья в серии, где я буду документировать мой опыт написания веб-приложения на Python, используя микрофреймворк Flask.

Моя предыстория

Приложение

Приложение, которое я собираюсь разрабатывать как часть этого руководства, является сервером микроблогов, и я решил назвать его microblog. Довольно креативно, я знаю.

Во время нашего прогресса я затрону следующие темы:

Как видите, я весьма значительно берусь за все это. Надеюсь, что это приложение, когда я его закончу, станет чем-то вроде шаблона для написания других веб-приложений.

Требования

Если ваш компьютер поддерживает Python 2.6/2.7, то все, вероятно, пойдет хорошо. Приложение из руководства должно нормально работать на Windows, OS X и Linux.

Это руководство подразумевает, что вы знакомы с окном терминала (командной консолью в случае Windows), и вы знаете основные команды для работы с файлами вашей ОС. Если это не так, то перед тем как продолжить, я рекомендую вам ознакомиться с тем, как создавать директории, копировать файлы и т.д., используя консоль.

Наконец, вы должны чувствовать себя свободно в написании кода на Python. Знакомство с модулями и пакетами этого языка также не помешает.

Установка Flask

Ну что ж, приступим!
Если у вас еще не установлен Python 2.7, то берем его отсюда.

Теперь нам нужно установить Flask и несколько расширений, которые мы будем использовать. Я предпочитаю создание виртуального окружения, где все это будет установлено таким образом, что ваша основная установка Python затронута не будет. В качестве бонуса, вам не нужен будет root доступ для установки таким способом.

Далее скачиваем virtualenv.py и кладем его внутрь новой папки.

Чтобы создать новое окружение введите следующую команду:

Эта команда создаст полноценное окружение Python внутри папки flask

Виртуальные окружения могут быть активированы и деактивированы по желанию. Активированное окружение добавляет путь своей папки bin в path системы, например, когда вы вызываете интерпретатор python, то получаете версию текущего окружения, а не системную. Лично я никогда не любил это свойство, поэтому ни разу не активировал ни одно из моих окружений, вместо этого я просто вызывал тот интерпретатор, который хотел, печатая его путь.

Прим. пер.: Перед тем как вы начнете вводить команды, хочу отметить, что в комментариях к девятой части отметится баг в flask-whooshalchemy, исправленную версию можнонужно скачать отсюда (репозиторий автора)

Если вы пользователь Linux, OS x или Cygwin, установите flask и расширения, вводя следующие команды одну за одной:

Я не буду вдаваться в подробности, поэтому если вы хотите узнать больше, прочтите документацию к flask-mail.

«Hello, World!» в Flask

Давайте начнем с создания простого скрипта инициализации нашего пакета app (файл app/__init__.py )

Скрипт выше просто создает объект приложения (наследуя Flask ), затем импортирует модуль представлений, который мы еще не написали.

Представления — это обработчики, которые отвечают на запросы веб-браузера. Представления в Flask пишутся как Python функции. Каждая функция представления сопоставляется с одним или несколькими запросами URL.

Напишем нашу первую функцию представления (файл app/views.py )

Это весьма простое представление, которое просто возвращает строку для отображения в пользовательском браузере. Два декоратора route создают привязку адресов / и /index к этой функции.

Последним шагом для получения полностью работающего веб-приложения будет создание скрипта, который стартует веб-сервер нашего приложения. Давайте назовем скрипт run.py и положим его в корневой каталог ( microblog/ ):

Для запуска вашего приложения просто запустите скрипт. На OS X, Linux и Cygwin вам следует пометить файл исполняемым перед тем как вы сможете его запустить.

Тогда скрипт может быть вызван просто:

В Windows процесс немного отличается. Нет необходимости помечать файл исполняемым. Вместо этого вам нужно запустить скрипт как аргумент интерпретатора Python:

После старта сервер будет прослушивать порт 5000, ожидая соединений. Теперь откроем браузер и введем следующий URL в адресную строку:

Или же вы можете использовать эту ссылку:

Когда вы закончите играть с сервером вы можете просто нажать Ctrl-C, чтобы остановить его.

И этим я хочу закончить первую часть этого руководства.

Те из вас, кто поленился печатать, могут скачать код из этого руководства ниже:

Обратите внимание, что вам нужно установить Flask, чтобы запустить приложение из архива выше.

Что дальше

В следующей части серии мы изменим наше маленькое приложение для использования HTML шаблонов.

Источник

Создание веб-приложения с использованием Python Flask и MySQL

Russian (Pусский) translation by Yuri Yuriev (you can also view the original English article)

В этой серии мы будем использовать Python, Flask и MySQL для создания простого веб-приложения с нуля. Это будет приложение списка дел, в котором пользователи смогут зарегистрироваться, подписаться и создать свой список желаний.

Введение в Python Flask

Установка Flask

Установить Flask легко и просто. С менеджером пакетов pip нужно сделать только:

Теперь определим основной путь / и соответствующий ему обработчик запросов:

Затем проверьте, является ли исполняемый файл главной программой и запустите приложение:

Сохраните изменения и выполните app.py :

Укажите браузеру на http://localhost:5000/ и у вас должно появиться приветственное сообщение.

Создание домашней страницы

Во-первых, при запуске приложения мы должны показать домашнюю страницу с последними элементами списка дел, добавленными пользователями. Итак, добавим нашу домашнюю страницу в папку приложения.

Измените основной метод, чтобы вернуть созданный файл шаблона.

Сохраните изменения и перезапустите сервер. Указав браузеру http://localhost:5000/ вы увидите следующее:

76768hghjg5576768hghjg55 76768hghjg55

Создание страницы регистрации

Шаг 1. Настройка базы данных

Введите требуемый пароль и при входе в систему выполните следующую команду для создания базы данных:

Шаг 2. Создание интерфейса регистрации

В app.py добавьте метод showSignUp для отображения страницы регистрации после поступления запроса в /showSignUp :

Сохраните изменения и перезапустите сервер. Нажмите кнопку Sign Up на главной странице и у вас должна получиться такая страница регистрации:

7678574hjgfjhgjhgjhg7678574hjgfjhgjhgjhg 7678574hjgfjhgjhgjhg

Шаг 3. Внедрение метода регистрации

Чтобы прочитать опубликованные значения, нам нужно импортировать request из Flask.

С помощью request мы прочитаем значения, как показано ниже:

Как только значения прочитаны, мы проверяем, верны ли они, а пока давайте вернём простое сообщение:

Шаг 4. Создание запроса на регистрацию

Итак, давайте присоединим событие нажатия кнопки, как показано:

Сохраните изменения и перезапустите сервер. На странице Sign Up заполните данные и нажмите Sign Up. Проверьте браузер, у вас должно получиться следующее сообщение:

Шаг 5: вызов хранимой процедуры MySQL

Импортируйте MySQL внутрь app.py :

Ранее мы определили наше приложение:

Наряду с этим, включая следующие конфигурации MySQL:

Сначала давайте создадим соединение MySQL:

Когда соединение установлено, нам понадобится cursor для запроса stored процедуры. Через conn соединение создаём курсор.

Перед вызовом stored процедуры, давайте сделаем надёжный пароль с помощником от Werkzeug. Импортируйте модуль в app.py :

Используйте модуль для создания хэшированного пароля.

Теперь вызываем процедуру sp_createUser :

Если процедура выполнена успешно, мы зафиксируем изменения и вернем сообщение об успешном завершении.

Подводя итоги

Исходный код к этому уроку доступен на GitHub.

Источник

Руководство по Создание приложения Flask в Azure Cognitive Services

В этом руководстве описано, как создать веб-приложение Flask, которое использует Azure Cognitive Services для перевода текста, анализа тональности и синтеза речи на основе переведенного текста. Здесь описаны код Python и маршруты Flask, которые потребуются нашему приложению, а также приведены сведения о создании кода HTML и JavaScript, которые собирают приложение воедино. Если вы столкнетесь с проблемами, сообщите нам об этом с помощью расположенной ниже кнопки обратной связи.

Темы, рассматриваемые в этом руководстве:

Если вы хотите пропустить этот этап и сразу получить готовый код, весь пример с инструкциями по сборке доступен в репозитории GitHub.

Что такое Flask?

Flask — это микроплатформа для создания веб-приложений. Это означает, что Flask предоставляет все средства, библиотеки и технологии, требуемые для создания веб-приложения. Это веб-приложение может содержать несколько веб-страниц, блог, вики-сайт или что-то более существенное, например приложение календаря или коммерческий веб-сайт.

Для тех, кто хочет узнать больше после работы с этим руководством, мы предлагаем несколько полезных ссылок:

Предварительные требования

Давайте перечислим программное обеспечение и ключи подписки, которые вам потребуются в этом руководстве.

Создание учетной записи и подписки на ресурсы

Как упоминалось ранее, в этом руководстве вам потребуются три ключа подписки. Это означает, что в учетной записи Azure следует создать ресурсы для следующих служб:

В руководстве по созданию учетной записи Cognitive Services на портале Azure приведены пошаговые инструкции по созданию ресурсов.

Для этого руководства следует создавать ресурсы в регионе «Западная часть США». Если вы выберете другой регион, вам нужно будет вручную изменить базовый URL-адрес в каждом из файлов Python.

Настройка среды разработки

Перед созданием веб-приложения Flask необходимо создать рабочий каталог для проекта и установить несколько пакетов Python.

Создание рабочего каталога

Откройте командную строку (в Windows) или терминал (в Mac OS и Linux). Затем создайте рабочий каталог и все нужные вложенные папки для проекта:

Перейдите в рабочий каталог проекта:

Создание и активация виртуального окружения с помощью virtualenv

Выполните в рабочем каталоге следующую команду, чтобы создать виртуальное окружение для macOS или Linux:

Мы явным образом объявили, что виртуальное окружение будет использовать Python 3. Это гарантирует, что пользователи с несколькими установками Python будут использовать правильную версию.

Командная строка или Bash в Windows:

Для простоты мы присвоении виртуальному окружению имя venv.

Команды для активации виртуального окружения будут разными в зависимости от платформы или оболочки:

Платформа Оболочка Get-Help
Mac OS и Linux bash/zsh source venv/bin/activate
Windows bash source venv/Scripts/activate
Командная строка venv\Scripts\activate.bat
PowerShell venv\Scripts\Activate.ps1

Python содержит подробную документацию по созданию виртуальных окружений и управления ими — virtualenv.

Установка Requests

Модуль Requests широко применяется для отправки запросов HTTP 1.1. Вам не придется вручную добавлять строки запроса в URL-адреса или кодировать данные POST для использования в форме.

Чтобы установить модуль Requests, выполните следующую команду:

Если вам нужны дополнительные сведения, воспользуйтесь статьей Requests: HTTP for Humans (Модуль Requests: HTTP с человеческим лицом).

Установка и настройка Flask

Теперь нам нужно установить Flask. Flask обрабатывает маршрутизацию для веб-приложения и позволяет выполнять вызовы между серверами, скрывая ключи подписки от пользователя.

Чтобы установить Flask, выполните следующую команду:

Давайте убедимся, что платформа Flask успешно установлена. Выполните команду:

В терминал будет показан номер версии. Любой другой ответ означает, что что-то пошло не так.

Mac OS и Linux:

Windows:

Создание приложения Flask

В этом разделе описано, как создать приложение Flask с базовыми функциями, которое возвращает HTML-файл при обращении пользователя к корневому каталогу приложения. Не тратьте пока время на подробный разбор кода — мы позднее вернемся к этому файлу и изменим его.

Что такое маршрут Flask?

Давайте рассмотрим еще один пример, чтобы закрепить понимание.

В этих примерах показано, как отобразить нужные HTML-страницы для пользователя. Но с помощью маршрутов можно также вызывать API по нажатию кнопки или выполнять любое количество действий без необходимости покидать главную страницу. Вы сможете увидеть это в действии, создав маршруты для перевода, анализа тональности и синтеза речи.

Начало работы

Откройте проект в интегрированной среде разработки и создайте файл с именем app.py в корневом каталоге рабочей папки. Скопируйте следующий код в файл app.py и сохраните его:

Этот блок кода сообщает приложению, что нужно отображать index.html каждый раз, когда пользователь переходит в корневой каталог веб-приложения ( / ).

Давайте протестируем приложение Flask. В окне терминала выполните следующую команду:

Откройте браузер и перейдите по предоставленному URL-адресу. Вы увидите созданное одностраничное приложение. Нажмите клавиши CTRL+C, чтобы завершить работу приложения.

Перевод текста

Итак, вы получили некоторое представление о работе приложения Flask. Теперь мы сделаем следующее:

Вызов переводчика

Добавление маршрута в app.py

В следующих разделах описано, как повторить эту процедуру при создании маршрутов для анализа тональности и синтеза речи.

Скопируйте этот код в конец app.py и сохраните файл:

Обновление index.html

Теперь, когда в приложении Flask есть функция для преобразования текста и маршрут для ее вызова, создайте код HTML для этого приложения. Представленный ниже код HTML выполняет несколько задач:

Откройте index.html и найдите такие комментарии в коде:

Замените комментарии в коде этим блоком HTML:

На следующем этапе мы напишем код JavaScript. Это связующее звено между кодом HTML и маршрутом Flask.

Создайте main.js

Файл main.js связывает код HTML с маршрутом Flask. Приложение будет использовать XMLHttpRequest, Ajax и jQuery для отображения содержимого, а также выполнять запросы POST к маршрутам Flask.

Затем он выполняет итерацию в ответе и обновляет код HTML, размещая там перевод, определенный язык и оценку достоверности.

Тестирование перевода

Теперь мы протестируем, как приложение выполняет перевод.

Откройте указанный адрес сервера. Введите текст в область ввода, выберите язык и нажмите кнопку перевода. Вы получите перевод текста. В противном случае проверьте добавленный ключ подписки.

Если внесенные изменения не отображаются или приложение не работает ожидаемым образом, попробуйте очистить кэш или открыть окно в приватном (анонимном) режиме.

Нажмите клавиши CTRL+C, чтобы завершить работу приложения и перейти к следующему разделу.

Анализ тональности

API языковой службы позволяет выполнять анализ тональности, извлекать из текста ключевые фразы и определять исходный язык. В этом приложении мы применим анализ тональности для предоставленного текста и определим, является ли он положительным, негативным или нейтральным. API возвращает числовую оценку в диапазоне от 0 до 1. Оценки, близкие к 1, указывают на позитивную тональность, а оценки, близкие к 0, — на негативную.

В этом разделе мы сделаем следующее:

Вызов API языковой службы

Добавление маршрута в app.py

Скопируйте этот код в конец app.py и сохраните файл:

Обновление index.html

Теперь, когда в приложении Flask есть функция анализа тональности и маршрут для ее вызова, переходите к написанию кода HTML приложения. Представленный ниже код HTML выполняет несколько задач:

Откройте index.html и найдите такие комментарии в коде:

Замените комментарии в коде этим блоком HTML:

Обновление main.js

Затем он выполняет итерацию в ответе и обновляет код HTML, размещая там оценки тональности.

Скопируйте следующий код в static/scripts/main.js :

Тестирование анализа тональности

Давайте протестируем, как приложение выполняет анализ тональности.

Откройте указанный адрес сервера. Введите текст в область ввода, выберите язык и нажмите кнопку перевода. Вы получите перевод текста. Теперь нажмите кнопку, которая запускает анализ тональности. Вы увидите две оценки. В противном случае проверьте добавленный ключ подписки.

Если внесенные изменения не отображаются или приложение не работает ожидаемым образом, попробуйте очистить кэш или открыть окно в приватном (анонимном) режиме.

Нажмите клавиши CTRL+C, чтобы завершить работу приложения и перейти к следующему разделу.

Преобразование текста в речь

API преобразования текста в речь позволяет приложению преобразовать текст в синтезированную речь. Эта служба поддерживает стандартные, нейронные и пользовательские голоса. В нашем примере приложения применяется лишь часть доступных голосов. Подробнее см. в полном списке поддерживаемых языков.

В этом разделе мы сделаем следующее:

Вызов API преобразования текста в речь

Создайте файл с именем synthesize.py в корневом каталоге рабочей папки.

Теперь добавьте в synthesize.py следующий код.

Добавьте ключ подписки службы распознавания речи и сохраните его.

Добавление маршрута в app.py

Скопируйте этот код в конец app.py и сохраните файл:

Обновление index.html

Теперь, когда в приложении Flask есть функция преобразования текста в речь и маршрут для ее вызова, напишите код HTML для приложения. Представленный ниже код HTML выполняет несколько задач:

Откройте index.html и найдите такие комментарии в коде:

Замените комментарии в коде этим блоком HTML:

Найдите такие комментарии в коде:

Замените комментарии в коде этим блоком HTML:

Обновление main.js

Затем он выполняет итерацию в ответе и обновляет код HTML, размещая там оценки тональности.

Тестирование приложения

Давайте протестируем, как приложение выполняет синтез речи.

Откройте указанный адрес сервера. Введите текст в область ввода, выберите язык и нажмите кнопку перевода. Вы получите перевод текста. Теперь выберите голос и нажмите кнопку, которая запускает преобразование текста в речь. Вы услышите перевод, озвученный функцией синтезированной речи. В противном случае проверьте добавленный ключ подписки.

Если внесенные изменения не отображаются или приложение не работает ожидаемым образом, попробуйте очистить кэш или открыть окно в приватном (анонимном) режиме.

Итак, все готово. У вас есть работающее приложение, которое выполняет переводы, анализирует тональность и синтезирует речь. Нажмите клавиши CTRL+C, чтобы завершить работу приложения. Обязательно ознакомьтесь с другими службами Azure Cognitive Services.

Получение исходного кода

Исходный код этого проекта доступен на GitHub.

Источник

Проектирование простых приложений в Flask

Данная статья, размещенная в репозитории Flask на GitHub, является плодом коллективного творчества небезразличных программистов, а изначальный её автор — Brice Leroy. Она представляет собой достаточно полезный для начинающих материал по Flask. Лично для меня он стал ответом на многие простые вопросы, основным из которых был «как структурировать проект».

Для хоть сколько-то опытных программистов она вряд ли будет полезна, многие могут вовсе не согласиться с описанными принципами, однако для находящихся на ранней стадии обучения она может стать толчком к развитию, как стала для меня. Именно поэтому я сделал перевод на русский язык — у этой статьи очень низкий порог вхождения и стоит сделать его еще ниже.

Описанный пример протестирован на Python 3.5, Flask 0.10, Flask-SQLAlchemy 2.1, Flask-WTF 0.9.

Проектирование простых приложений в Flask

Этот документ не входит в официальную документацию Flask. Он является компиляцией советов, полученных из различных неофициальных источников и никогда не подвергался какой-либо проверке. Описанные методики могут быть весьма полезны, но в то же время и достаточно опасны. Просьба не вносить никаких изменений в оригинальный документ, размещенный на Github, так как на него ссылаются многие ответы на StackOverflow. Вы можете вносить в него любые поправки и заметки, но для размещения используйте личный сайт или блог.

Данная статья является попыткой описать структуру проекта, использующего Flask и базовые модули SQLAlchemy и WTForms.

Установка

Flask

Инструкция по установке Flask.

Я рекомендую использовать virtualenv — эта система очень проста и позволяет размещать несколько виртуальных окружений на одной системе и не требует прав суперпользователя, так как все библиотеки устанавливаются локально.

Flask-SQLAlchemy

SQLAlchemy обеспечивает простой и мощный интерфейс взаимодействия ваших объектов и реляционной базы данных любого типа. Для установки Flask-SQLAlchemy в ваше виртуальное окружение используйте pip:

Flask-WTF

WTForms упрощает получение данных от пользователя.

Введение

Итак, необходимые библиотеки подготовлены. Так должна выглядеть основная структура вашего проекта:

Для каждего модуля (элемента приложения) создаётся следующая структура:

Шаблоны представления (jinja) хранятся в директории templates и поддиректория модулей:

Для обработки неизменяемых файлов необходимо использовать отдельный веб-сервер, однако на время разработки можно возложить эту работу на Flask. Он автоматически выдает такие файлы из директории static, а для настройки использования другой директории вы можете воспользоваться информацией из данной статьи.

Для рассматриваемого приложения будут создан один модуль: users. Он обеспечит управление регистрацией и входом пользователей, просмотр данных своего профайла.

Конфигурация

/run.py используется для запуска веб-сервера:

/shell.py даст доступ к консоли с возможностью выполнения команд. Возможно, не так удобно, как отладка через pdb, но достаточно полезно (по крайней мере при инициализации базы данных):

Примечание переводчика:
В случае, если вы работаете в ОС Windows (не надо бросать кирпичи!), библиотека readline недоступна. В таком случае необходимо установить в своё виртуальное или реальное окружение python библиотеку pyreadline и обернуть импорт в конструкцию вида:

В принципе, можно и вовсе обойтись без этой библиотеки, она просто упрощает взаимодействие с консолью, добавляя в нее некоторые bash-like элементы.

/config.py хранит всю конфигурацию приложения. В данном примере в качестве базы данных используется SQLite, так как она очень удобна при разработке. Скорее всего файл /config.py не стоит включать в репозиторий, так как он будет разным на тестовой и промышленной системах.

Модуль

Настроим модуль users в следующем порядке: определим модели, связанные с моделями константы, далее форму и, наконец, представление и шаблоны.

Модель

И её константы в файле /app/users/constants.py:

К слову о константах: мне нравится, когда константы хранятся в отдельном файле внутри модуля. Константы скорее всего будут использоваться в моделях, формах и представлениях, так что таким образом вы получите удобно организованные данные, которые будет просто найти. К тому же, импортирование констант под именем модуля в верхнем регистре (например USERS для users.constants) поможет избежать конфликтов имен.

Форма

Когда создана модель нужного объекта, необходимо сконструировать форму для работы с ней.

Форма регистрации будет запрашивать имя пользователя, адрес электронной почты и пароль, будут использованы валидаторы для проверки корректности введенных пользователем данных, а поле Recaptcha защитит от регистрации ботов. На случай, если понадобится внедрить пользовательское соглашение, также добавлено поле BooleanField с именем accept_tos. Данное поле помечено, как required, то есть пользователь будет обязан отметить генерируемый формой чекбокс. Форма входа снабжена полями email и password с аналогичными валидаторами.

Описание форм содержится в файле /app/users/forms.py:

Первый параметр для каждого поля — его метка, например для поля name в форме задана метка NickName. Для полей ввода пароля используется валидатор EqualTo, сравнивающий данные в двух полях.

Более полная информация о возможностях WTForms находится по этой ссылке.

Представление

В представлении объявляется Blueprint — объект схемы модуля, в свойствах которого указывается url_prefix, который будет подставляться в начале любого URLа, указанного в route. Также в представлении используется метод формы form.validate_on_submit, выдающий истину для метода HTTP POST и валидной формы. После успешного входа пользователь перенаправляется на страницу профиля (/users/me). Для предотвращения доступа неавторизованных пользователей создаётся специальный декоратор в файле /app/users/decorators.py:

Данный декоратор проверяет наличие данных в переменной g.user. В случае, если переменная не задана, то пользователь не аутенфицирован, тогда задаётся информационное сообщение и осуществляется перенаправление на представление login (вход в систему). Данные в переменную g.user помещаются в функции before_request. Когда вы получаете большой объем данных из профиля пользователя (исторические данные, друзья, сообщения, действия) возможно серьезное замедление работы при обращении к БД, так что кеширование данных пользователей может решить эту проблему (но только пока вы модифицируете объекты централизованно и очищаете кеш при каждом обновлении). Ниже прилагается код представления /app/users/views.py:

Шаблон

Шаблонизатор Jinja встроен в Flask. Одним из его преимуществ является возможность наследования и встроенной логики (зависимости, циклы, контекстные изменения). Создадим шаблон /app/templates/base.html, от которого будут наследоваться остальные шаблоны. Возможно задание более чем одного наследования (например наследование от шаблона twocolumn.html, который в свою очередь наслудется от main.html). Базовый шаблон также упрощает отображение информационных (flash) сообщений из переменной get_flashed_messages в каждом наследующем шаблоне.

Теперь нет необходимости задавать основную структуру страницы и каждое изменение base.html отразится на наследующих шаблонах. Рекомендуется называть шаблоны в соответствии с вызывающими их представлениями, именно так поименован шаблон /app/templates/users/register.html:

И шаблон /app/templates/users/login.html:

Созданные шаблоны используют макросы для автоматизации создания полей html. Так как этот макрос будет использоваться в различных модулях, он помещен в отдельный файл /app/templates/forms/macros.html:

Наконец, создан примитивный шаблон /app/templates/users/profile.html:

Инициализация приложения

Как несложно догадаться, инициализация приложения происходит в файле /app/init.py:

Экземпляр БД SQLAlchemy и модель Users находятся в двух разных файлах, необходимо импортировать оба из них в общее пространство имен с помощью строки from app.users.views import mod as usersModule. В противном случае команда db.create_all() не принесет результата.

Активируем виртуальное окружение virtualenv и инициализируем БД:

Источник

Понравилась статья? Поделить с друзьями:
Добавить комментарий
  • Как сделать успешный бизнес на ритуальных услугах
  • Выездной кейтеринг в России
  • Риски бизнеса: без чего не обойтись на пути к успеху
  • web приложение на python django
  • web приложение на java пример