Рубрики
Без рубрики

Создайте веб-приложение и развернуть в облако через 20 минут с Python

Редактор SQL: Архетип Если вы искали развертывание вашего первого веб-приложения в облако, это GREA … Теги с Python, программированием, базой данных, CodeNewie.

Редактор SQL: Архетип

Если вы искали развертывание вашего первого веб-приложения в облако, это отличное место для начала!

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

Статья разделена на 3 раздела:

  1. Создание приложения Flask (веб-приложение для отправки формы)
  2. Настройка базы данных Postgres с Python (хранить данные из представленных форм)
  3. Развертывание приложения к Heroku (хостинг приложения в облаке, чтобы кто-либо мог его использовать)

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

Технические требования

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

Вам понадобится следующее, чтобы начать:

  • PostgreSQL : Вам нужно Скачать и устанавливать Postgres на вашем местном компьютере.
  • Python 3.6 или новее : Установки Python для разных версий и ОС доступны для загрузки здесь Отказ
  • Учетная запись Heroku : Вам нужно Создать бесплатный аккаунт Heroku Если у вас еще нет одного. Именно здесь мы разверним приложение Flask и подключите его к базе данных удаленных Postgres.

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

Создание приложения Flask для регистрационной формы

Пример приложения в колбе

В этом разделе мы собираемся создать приложение Flask, показанное выше.

Я уже создал пример примерного приложения, которое делает простую регистрационную форму, используемую для сбора информации от пользователя.

Флэк – одна из самых популярных веб-каркасов, написанных в Python. Приложение Flask, которое я сделал, сначала делает запрос к конечным точкам, определенным в приложение/маршруты .py файл для извлечения данных, отображаемых в регистрационной форме.

Затем он отображает HTML-страницы, содержащиеся в Шаблон папка с использованием Библиотека шаблона Jinja Отказ

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

Откройте инструмент командной строки и запустите следующие команды:

git clone https://github.com/ToluClassics/Web_Registration_Form.git
cd web_registration_form

Если вы когда-нибудь потерялись, вы можете просмотреть завершенный проект здесь: Приложение Flask-postgres

Затем мы собираемся создать виртуальную среду для этого проекта и установить необходимые зависимости. Виртуальная среда – это изолированная среда для разных проектов Python. Они полезны для хранения пакетов и зависимостей разделяются между различными проектами.

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

Windows:
$ python3 -m venv env
$ source env/scripts/activate
(env) $ pip install -r requirements.txt


MacOS and UNIX:
$ python -m venv env
$ source env/bin/activate
(env) $ pip install -r requirements.txt

Чтобы проверить, правильно ли настроена наша среда, давайте попробуем запустить приложение, введя Флэк бежит в виртуальной среде.

(env) derekxiao@Dereks-MBP Web_Registration_Form % flask run
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Теперь вы можете ввести URL-адрес выше в любом браузере и просмотреть веб-форму!

Добавление проверки ввода для регистрационной формы

Чтобы получить более знакомые с кодом, давайте добавим входные проверки в класс формы.

Мы хотим, чтобы наше приложение запретить пользователям заполнить форму с тем же именем пользователя или адресом электронной почты несколько раз.

С WTForms , вы можете создать пользовательский валидатор, который автоматически добавляется в каждое поле, создавая метод с именем Validate_ Отказ В Приложение/form.py Файл, мы добавим два метода Validate_email и Validate_username Отказ Мы запрашиваем таблицу регистраций (мы создадим эту таблицу позже) имя пользователя и электронное письмо, введенное пользователем. Если он возвращает значение, мы поднимем ошибку проверки.

Открыть Form.py Файл и первый импортные регистрации из Models.py Файл (мы добавим этот файл позже).

from app.models import Registration

И в Регистрация формы Класс Добавьте следующие методы проверки:

def validate_email(self, email):
    user = Registration.query.filter_by(email = email.data).first()
    if user is not None:
        raise ValidationError('Please use a different email address')

def validate_username(self, username):
    user = Registration.query.filter_by(username = username.data).first()
    if user is not None:
        raise ValidationError('Please use a different email address')

Теперь давайте добавим в Models.py Файл, чтобы мы могли проверить проверку ввода.

Создание базы данных PostgreSQL

Сначала нам нужно создать базу данных, которую Models.py подключусь к.

Для этого учебника мы будем использовать базу данных PostgreSQL. PostgreSQL – это открытый источник, Объектная реляционная база данных Отказ И лучшая часть, это совершенно бесплатно.

Давайте начнем с создания новой базы данных Postgres для хранения данных из представленных форм регистрации. Если у вас уже есть база данных Postgres, не стесняйтесь перейти к следующему разделу, чтобы начать подключение приложения Flask в базу данных.

Если вы еще не сделали, сначала Скачать и устанавливать Postgres на твоем компьютере.

Теперь откройте новую командную строку окна и введите PSQL Отказ PSQL это интерфейс на основе терминала для управления базами данных Postgres.

Запустите команду Создать базу данных [Имя базы данных]; Создать новую базу данных.

Ниже приведен список популярных PSQL Команды для управления вашей базой данных:

  • \ л : Перечислите все доступные базы данных
  • DT : Перечислите все таблицы
  • \ d table_name : Опишите стол, показывая его столбцы, тип столбца E.T.c
  • \ du : Перечислите все пользователи и их роли.
  • \? : Получите список всех команд PSQL \q : чтобы выйти из терминала PSQL

В качестве альтернативы вы можете избежать запоминания различных команд PSQL и использовать Arctype’s Бесплатный редактор SQL Это обеспечивает современный интерфейс для управления как Postgres, так и для баз данных MySQL:

Попробуйте Arctype сегодня

Подключение приложения Flask в локальную базу данных Postgres

Затем мы создадим соединение с базой данных с нашей новой базой данных Postgres, которая будет использоваться внутри нашей Models.py файл. Чтобы начать, есть 3 пакета для установки:

  • Flask-Sqlalchemy : Расширение Python для управления базами данных
  • Флэк-мигрировать : Для создания обновлений в существующую базу данных
  • Psycopg2 : Адаптер базы данных PostgreSQL для Python

В активированной виртуальной среде терминал (ENV) $ PIP Установите флаб-SQLalchemy Flask-Migrate Pyscopg2 Чтобы установить пакеты, перечисленные выше. Если вы попали в ошибку, установку psycopg2. , вам может потребоваться установить psycopg2-двоичный вместо.

Следующие разделы я покажу, как использовать каждый пакет для настройки и интеграции нашей базы данных Postgres с нашей приложением Flask. Конечный результат будет приложение для колба, которое может добавлять новые записи в таблицу PostGreS.

Управление базами данных Postgres из Python с SQLALCHEMY

SQLalchemy – это библиотека, которая предоставляет возможность легко интегрировать программы Python и базы данных. Мы будем использовать SQLalchemy в качестве объекта Relational Mapper для преобразования классов Python в таблицы в нашей базе данных Postgres.

Flask-sqlalchemy автоматически переводит созданные модели в синтаксис любой базы данных (postgres в нашем случае).

Чтобы взаимодействовать с нашей базой данных из приложения, нам нужно добавить следующие переменные конфигурации в файл конфигурации:

  • Sqlalchemy_database_uri. : Это строка подключения, которая сообщает наше приложение Flask, к которой можно подключиться. Обычная форма соединительной строки базы данных Postgres является PostgreSQL://localhost/[your_database_name] Отказ Если у вашего пользователя Postgres есть пароль, вам нужно будет использовать другой Вариант URI Отказ
  • Sqlalchemy_track_modifications : Мы установили это на Ложь Таким образом, мы не получаем предупреждение от колбы каждый раз, когда мы принимаем изменение в приложение.

Чтобы сделать вышеупомянутые изменения, откройте config.py Файл и добавьте следующие переменные в Config класс:

SQLALCHEMY_DATABASE_URI = os.environ.get('SQLALCHEMY_DATABASE_URI') or \
    'postgresql://localhost/[YOUR_DATABASE_NAME]'

SQLALCHEMY_TRACK_MODIFICATIONS = False

На следующей сессии мы будем использовать Флэк-мигрировать Пакет для беспрепятственного обрабатывать изменения в нашей структуре базы данных.

Настройка миграции Flask-Migrate для управления структурами базы данных

Когда мы масштабируем наше приложение, нам может потребоваться внести структурные изменения в наши таблицы, не теряя все данные, уже в базе данных. Флэк-мигрировать Это расширение Python, которое обрабатывает миграции баз данных SQLALCHEMY автоматически с помощью алемического. Он также поддерживает несколько миграций базы данных и другие функциональные возможности.

Теперь мы добавим объект базы данных, который представляет нашу базу данных, а также создать экземпляр класса миграции для обработки миграций базы данных.

Открыть Приложение/__init__.py И сначала импортировать пакеты Flask-Migrate и SQLalchemy:

from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy

Затем добавьте следующие переменные:

db = SQLAlchemy(app) ## Create DB object
migrate = Migrate(app,db) ## Create migration object

Настройте модель базы данных PostgreSQL

Теперь мы наконец готовы создать Models.py Файл для настройки нашей модели базы данных. Модели базы данных используются для представления таблиц и их структур в базе данных; Они определяют схему стола.

Models.py Определите структуру наших таблиц и другой необходимой таблицы информации. Нам нужно создать модель (класс), атрибуты которых такие же, как поля данных, которые мы намерены хранить в таблицах баз данных.

Внутри приложение каталог, создайте новый файл под названием Models.py И сначала импортируйте экземпляр БД, который мы создали в предыдущем разделе: Из приложений импортирует БД Отказ

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

class Registration(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    first_name = db.Column(db.String(64))
    last_name = db.Column(db.String(64))
    username = db.Column(db.String(64))
    company = db.Column(db.String(64))
    contact_no = db.Column(db.String(64))
    email = db.Column(db.String(120), index=True, unique=True)

    def __repr__ (self):
        return ''.format(self.username)

Последний шаг импортирует модель в Приложение \ __init__.py Файл: Из моделей импорта приложений Отказ

Если вы работаете со своей собственной базой данных, мы создали бесплатный инструмент для Дизайн базы данных схемы Отказ

Создание новых регистрационных таблиц в Postgres, используя колбу

Далее мы будем создавать базу данных из командной строки, запустив Флэк БД init в виртуальной среде.

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

(env) $ python                   
Python 3.8.2 (default, Dec 21 2020, 15:06:04) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print(os.environ['FLASK_APP'])
app.py
>>> quit()

После запуска Flask DB INIT. Вы должны увидеть следующий вывод:

(env) $ flask db init
    Creating directory /Users/mac/Desktop/Web_Registration_Form/migrations ... done
  Creating directory /Users/mac/Desktop/Web_Registration_Form/migrations/versions ... done
  Generating /Users/mac/Desktop/Web_Registration_Form/migrations/script.py.mako ... done
  Generating /Users/mac/Desktop/Web_Registration_Form/migrations/env.py ... done
  Generating /Users/mac/Desktop/Web_Registration_Form/migrations/README ... done
  Generating /Users/mac/Desktop/Web_Registration_Form/migrations/alembic.ini ... done
  Please edit configuration/connection/logging settings in
  '/Users/mac/Desktop/Web_Registration_Form/migrations/alembic.ini' before proceeding.

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

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

Убедитесь, что ваши Postgres Server работает, затем запустите Флэк БД мигрирует Команда для автоматического перенесения нашей базы данных SQLALCHEMY в базу данных Postgres, которую мы назначали ранее с URI в файле конфигурации.

(env) $ flask db migrate -m "registrations table"
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'registration'
INFO [alembic.autogenerate.compare] Detected added index 'ix_registration_email' on '['email']'
  Generating /Users/mac/Desktop/Web_Registration_Form/migrations/versions/eccfa5d8a3f6_registrations_table.py ... done

Флэк БД мигрирует Не вносит никаких изменений в базу данных, она генерирует только сценарий миграции. Чтобы внести изменения, мы используем Колбочка БД обновляется команда. Вы также можете вернуть изменения, используя Flask DB Downded Отказ

(env) $ flask db upgrade
INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO [alembic.runtime.migration] Will assume transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> eccfa5d8a3f6, registrations table

Теперь мы можем открыть ARCTYPE и проверить, была ли таблица была успешно перенесена в локальную базу данных Postgres

Начните с Arctype бесплатно

Вставка данных из приложения для колбы в Postgres

В этом разделе мы обновим нашу функцию маршрута, чтобы добавить данные, собранные с веб-страницы на сайт.

Во-первых, мы обновим наш импорт, включая нашу экземпляр базы данных и модель таблицы в приложение \ marross.py файл:

from app.models import Registration
from app import db
from flask import redirect, url_for

В функции маршрута мы создадим экземпляр Регистрация Класс и обновите его с помощью информации, собранной из формы. Затем мы перейдем к добавлению и зафиксированию экземпляра в базу данных.

Добавьте следующее, если оператор внутри Индекс () Функция в Маршруты .py :

if form.validate_on_submit(): 
        reg_form = Registration(username=form.username.data,email=form.email.data, first_name=form.first_name.data,last_name=form.last_name.data, company=form.company.data,contact_no=form.contact_no.data)
        db.session.add(reg_form)
        db.session.commit()
        return redirect(url_for('index'))

Тестирование, если приложение Flask вставляет данные в Postgres

Давайте проверим наше приложение на местном уровне еще раз, прежде чем развертывать в Heroku:

(env) $ flask run
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Перейдите к http://127.0.0.1:5000/ и отправить форму.

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

Попробуйте Arctype сегодня

Развертывание приложения Flask и Postgres базы данных Heroku

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

Первый шаг – Загрузка и установка Heroku CLI Отказ

Тогда мы можем войти в Heroku из командной строки с: Heroku Login.

Как только мы вошли в систему, мы можем Создайте новое приложение на Heroku С запуском: Heroku Создать [Имя приложения] Отказ Приложения Heroku находятся в глобальном пространстве имен, поэтому вам нужно выбрать уникальное имя для вашего приложения. Если вы не укажете имя для вашего приложения, Heroku будет генерировать случайное имя для вашего приложения.

(env) $ Heroku create arctype-registration-app
Creating ⬢ arctype-registration-app... done
https://arctype-registration-app.herokuapp.com/ | https://git.heroku.com/arctype-registration-app.git

Чтобы продолжить разработку, нам нужно обновить наши требования .txt Файл и создать Procfile в нашем корневом каталоге. Procfile Используется для объявления команд, управляемых приложением на Heroku.

Далее нам нужно установить боевик который является сервером Python, необходимый для запуска приложения на Heroku. В активированной среде Python запустите Пип устанавливает густогин установить боевик упаковка.

Беги PIP Freeze> требования .txt Чтобы обновить файл требований. Procfile Определяет процессы, основанные на следующем формате <Тип процесса>: <Команда> Отказ Поскольку наша приложение содержит веб-сервер (Gunicorn), тип процесса IS Web, и команда запустит сервер Gunicorn. Следовательно, нам нужно запустить команду ниже на терминале, чтобы создать ProCFile:

Echo Web: Hunicorn App: App> ProCFile

Heroku имеет разные Сервисные планы Для его postgresql предлагает. Выбор плана для вашего приложения зависит от характеристик вашего приложения и его пропускной способности для простоя. В этом руководстве мы будем использовать Hobby-dev Plan , который свободен и служит цели, насколько нам нужно.

Теперь мы создадим базу данных Hobby-DEV Postgres для нашего приложения, используя Heroku Addons: создать heroku-postgresql: hobby-dev --app app-name команда:

(env) $ heroku addons:create heroku-postgresql:hobby-dev --app arctype-registration-app
Creating heroku-postgresql:hobby-dev on ⬢ arctype-registration-app... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-slippery-96960 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation

Больше информации о работе с Postgres Базы данных могут быть нашел здесь Отказ

Теперь, когда мы создали базу данных Remote Postgres для нашего приложения на Heroku, нам нужно обновить Sqlalchemy_database_uri Переменная в config.py Файл с новой базой данных URI. Чтобы получить удаленную базу данных URI, мы используем heroku config --app app-name команда.

Как только URI обновляется, последний шаг развернут ваше приложение к серверам Heroku.

Во-первых, мы будем совершать все наши файлы и подтолкнуть к главной ветке Heroku. Беги Git Add. и Гит Commit -M "Heroku Compick" Тогда Git Push Heroku Main Развернуть в Heroku.

Ваше приложение сейчас живет на https://your-app-name.herokuapp.com. !

Миграция таблиц из базы данных локальных Postgres в Heroku

Последний шаг передает таблицу регистраций, которые мы создали в нашей локальной базе данных Postgres к New Axcastrate базы данных Heroku. Мы можем сделать это, запустив db create_all () От терминала Heroku Python:

(env) $ heroku run python
Running python on ⬢ arctype-registration-app... up, run.9023 (Free)
Python 3.6.12 (default, Sep 29 2020, 17:50:28) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from app import db
>>> db.create_all()

Чтобы проверить, было ли таблица регистраций была успешно создана, подключитесь к базе данных Heroku из Arctype, и вы должны увидеть таблицу регистраций.

Поздравляю!

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

  1. Как работает приложение для колбы
  2. Создание базы данных Postgres
  3. Создание модели базы данных в Python с использованием SQLALCHEMY
  4. Миграция базы данных в Python с использованием миграции Flask-Migrate
  5. Вставка данных в базу данных Postgres из приложения Flask
  6. Развертывание приложения Flask и Postgres базы данных Heroku

Postgres – это мощная база данных, которая используется крупными технологическими компаниями по всему миру. Арктип Это бесплатный редактор SQL, который облегчает работу с базами данных. Попробуйте Arctype бесплатно сегодня Отказ

Оригинал: “https://dev.to/arctype/create-a-web-app-and-deploy-to-the-cloud-in-20-minutes-with-python-2ilm”