Как развернуть веб-приложения Python с помощью Bottle Micro Framework в Ubuntu 14.04

Вступление

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

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

В этом руководстве мы расскажем, как настроить и использовать Bottle для создания простых веб-приложений на сервере Ubuntu 14.04.

Предпосылки

Прежде чем начать это руководство, вам понадобится следующее:

  • A Ubuntu 14.04 Droplet

  • Знание того, как редактировать текстовые файлы из командной строки

  • Https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04[sudo user]

Шаг 1 - Установите виртуальную среду для Python

Python, язык программирования, для которого создан Bottle, по умолчанию устанавливается в Ubuntu.

Мы установим пакет + python-virtualenv +, чтобы изолировать наш проект Python от системной среды Python. Программное обеспечение virtualenv позволяет нам создавать отдельную изолированную среду для наших проектов Python, которая не затронет всю ОС.

Обновите свои списки пакетов:

sudo apt-get update

Установите + python-virtualenv + из репозиториев:

sudo apt-get install python-virtualenv

Мы собираемся создать папку + projects + в нашем домашнем каталоге, а затем создать виртуальную среду в этой папке:

mkdir ~/projects
cd ~/projects
virtualenv --no-site-packages venv

Это создаст каталог с именем + venv + внутри каталога + projects +. Он устанавливает некоторые утилиты Python внутри этой папки и создает структуру каталогов для установки дополнительных инструментов.

Шаг 2 - Активируйте виртуальную среду для Python

Мы должны активировать виртуальную среду перед началом работы над нашим проектом:

source venv/bin/activate

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

Шаг 3 - Установите бутылку

Одним из инструментов, которые установила программа virtualenv, был + pip +.

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

Если мы хотим найти пакеты Python, связанные с Bottle, мы можем запустить:

pip search bottle

Начнем с установки пакета Bottle:

pip install bottle

После завершения процесса у нас должна появиться возможность использовать инфраструктуру Bottle в наших приложениях.

Шаг 4 - Создайте свое первое приложение для бутылочек

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

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

Применение бутылок может быть невероятно простым. В своей самой простой форме они могут реализовать все эти компоненты в одном файле. Мы создадим приложение «Hello World», чтобы показать, как это делается.

С помощью вашего любимого текстового редактора создайте приложение Python под названием + hello.py +:

nano ~/projects/hello.py

Мы покажем вам каждую строку по одному и добавим окончательный файл в конце этого раздела.

В этом файле первая строка, которую мы добавим, импортирует некоторые функциональные возможности из пакета Bottle. Это позволит нам использовать инструменты фреймворка в нашем приложении:

hello.py

from bottle import route, run

Эта строка сообщает нашей программе, что мы хотим импортировать маршрут и запустить модули из пакета Bottle.

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

  • Модуль + route +, который мы импортируем, отвечает за то, чтобы сообщить приложению, какие URL-запросы обрабатываются какими функциями Python. Приложения бутылки реализуют маршрутизацию, вызывая одну функцию Python для каждого запрошенного URL. Затем он возвращает результаты функции пользователю

Прямо сейчас мы можем добавить маршрут, который будет соответствовать шаблону URL + / hello +. Добавьте одну новую строку внизу файла:

hello.py

from bottle import route, run

Этот декоратор маршрута соответствует URL + / hello +, поэтому, когда этот путь запрашивается на сервере, будет выполняться функция, которая следует непосредственно за ним. Добавьте еще две строки в конец файла:

hello.py

from bottle import route, run

@route('/hello')

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

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

hello.py

from bottle import route, run

@route('/hello')
def hello():
   return "<h1>Hello World!</h1>"

Эта строка будет запускать экземпляр сервера.

  • Передав параметр + host = '0.0.0.0' +, он будет передавать контент на любой компьютер, а не только на локальный компьютер. Это важно, поскольку наше приложение размещается удаленно

  • Параметр + port + указывает порт, который он будет использовать

Сохраните и закройте файл.

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

python ~/projects/hello.py

Вы можете посетить это приложение в своем веб-браузере, перейдя на свой IP-адрес, затем порт, который мы выбрали для запуска (8080), и маршрут, который мы создали (/ hello):

  • + HTTP: //: 8080 / привет +

Это будет выглядеть так:

изображение: https: //assets.digitalocean.com/articles/bottle/hello_world.png [Привет, мир DigitalOcean Bottle]

Вы можете остановить сервер в любое время, набрав:

CTRL-C

Шаг 5 - Создание модели бутылки

Мы реализовали наше первое приложение. Это было просто, но на самом деле не реализовывало принципы MVC и не делало ничего особенно интересного. Давайте на этот раз создадим немного более сложное приложение.

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

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

Установите SQLite с помощью этой команды:

sudo apt-get install sqlite

Нам также необходимо скачать и установить плагин Bottle, который позволит нам использовать эти базы данных:

pip install bottle-sqlite

Теперь, когда у нас есть компоненты, мы создадим файл Python, который сгенерирует базу данных SQLite с некоторыми данными. Мы могли бы сделать это в интерпретаторе Python, но создание файла облегчает повторение.

Создайте файл:

nano ~/projects/picnic_data.py

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

picnic_data.py

import sqlite3
db = sqlite3.connect('picnic.db')
db.execute("CREATE TABLE picnic (id INTEGER PRIMARY KEY, item CHAR(100) NOT NULL, quant INTEGER NOT NULL)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('bread', 4)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cheese', 2)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('grapes', 30)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('cake', 1)")
db.execute("INSERT INTO picnic (item,quant) VALUES ('soda', 4)")
db.commit()

В этом файле мы:

  • Импортируйте пакет SQLite

  • Выполните команду, которая создает нашу таблицу и вставляет данные

  • Наконец, мы фиксируем изменения

Сохраните и закройте файл.

Запустите файл, который создаст файл базы данных с именем + picnic.db + в нашем текущем каталоге:

python ~/projects/picnic_data.py

Если вы хотите, вы можете + ls + каталог, чтобы подтвердить, что файл базы данных был создан.

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

[[6---create-a-bottle-controller]] === 6 - Создать Контроллер Бутылки

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

Создайте файл с именем + picnic.py + для хранения нашего основного приложения:

nano ~/projects/picnic.py

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

В этом файле нам нужно импортировать некоторые вещи из пакета Bottle, как и раньше. Нам нужны некоторые дополнительные модули, которые мы не использовали раньше. Кроме того, нам нужно импортировать функциональность SQLite:

picnic.py

import sqlite3
from bottle import route, run, template

Далее мы определим маршрут, который соответствует URL-пути + / picnic +:

picnic.py

import sqlite3
from bottle import route, run, template

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

picnic.py

import sqlite3
from bottle import route, run, template

@route('/picnic')
  • Команда, которая подключается к базе данных, является командой + db = sqlite3.connect ('picnic.db') +

  • Мы запрашиваем базу данных и выбираем все наши значения с помощью следующих четырех строк

  • Строка, в которой мы вызываем представление для форматирования ваших данных: + output = template ('yield_to_picnic', rows = data) +. Это вызывает шаблон (представление) с именем + yield_to_picnic.tpl + для форматирования данных. Он передает переменную + data в качестве переменной шаблона` + columns`

  • Наконец, он возвращает форматированный вывод нашему пользователю

Наконец, нам нужно добавить нашу команду + run + для запуска реального сервера:

picnic.py

import sqlite3
from bottle import route, run, template

@route('/picnic')
def show_picnic():
   db = sqlite3.connect('picnic.db')
   c = db.cursor()
   c.execute("SELECT item,quant FROM picnic")
   data = c.fetchall()
   c.close()
   output = template('bring_to_picnic', rows=data)
   return output

Сохраните и закройте файл.

В следующем разделе мы создадим этот файл шаблона + yield_to_picnic.tpl +.

Шаг 7 - Создайте вид бутылки

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

Приложение будет искать шаблон, соответствующий имени, данному в функции шаблона, оканчивающемся на + .tpl +. Это может быть либо в главном каталоге проекта, либо в каталоге с именем + view +.

Создайте файл, соответствующий тому, который мы вызвали, с помощью функции шаблона в строке + output + в предыдущем скрипте:

nano ~/projects/bring_to_picnic.tpl

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

bring_to_picnic.tpl

<h1>Things to bring to our picnic</h1>

<table>
   <tbody>
       <tr><th>Item</th><th>Quantity</th></tr>
       %for row in rows:
       <tr>
       %for col in row:
           <td>{{col}}</td>
       %end
       </tr>
   %end
   <tbody>
</table>

Это сделает нашу страницу в HTML.

  • Язык шаблонов, который мы здесь видим, в основном Python

  • Переменная + строки +, которую мы передали в шаблон, доступна для использования при проектировании вывода

  • Мы можем напечатать строки Python, поставив перед ними +% +

  • Мы можем получить доступ к переменным в HTML, используя синтаксис + {{var}} +.

Сохраните и закройте файл.

Шаг 8 - Запустите приложение бутылки

Наше заявление завершено.

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

python ~/projects/picnic.py

Мы можем увидеть результаты, посетив наш IP-адрес и порт, а затем URL-адрес, который мы создали:

  • + HTTP: //: 8080 / пикник +

Ваша веб-страница должна выглядеть так:

изображение: https: //assets.digitalocean.com/articles/bottle/mvc_example.png [пример mvc DigitalOcean Bottle]

Нажмите + CTRL-C +, чтобы остановить приложение. (+ CTRL-Z + - более сильный сигнал остановки.)

(Необязательно) Шаг 9 - Загрузите свое приложение

Чтобы загрузить собственное приложение Bottle, вам нужно скопировать все файлы проекта в этот каталог:

~/projects/

Например:

scp :~/projects/

Загрузите * все файлы *, связанные с этим проектом, аналогичным образом. SFTP - это другой способ загрузки файлов, если вы Вы не знакомы с + scp +.

(Необязательно) Шаг 10 - Запустите собственное приложение

Активируйте свою виртуальную среду (если вы еще этого не сделали).

cd ~/projects/
source venv/bin/activate

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

nohup python ~/projects/ &

В выводе вы должны увидеть свой идентификационный номер процесса и следующее сообщение:

Выход

[1]
(venv)[sammy@bottle projects]$ nohup: ignoring input and appending output to ‘nohup.out’

Когда вы будете готовы к работе, мы настоятельно рекомендуем разработать более надежный план запуска вашего приложения. (Просто запуск в фоновом режиме означает, что ваше приложение остановится после перезагрузки сервера.) Ubuntu 14.04 использует https://www.digitalocean.com/community/tutorials/the-upstart-event-system-what-it-is-and -как в использовании, он [Upstart].

Заключение

К настоящему времени вы сможете увидеть, как вы можете создавать сложные приложения, используя простую базовую микро-инфраструктуру, такую ​​как Bottle. Хотя наши примеры были просты, легко воспользоваться преимуществами более продвинутой функциональности.

Система плагинов бутылки также является важным активом. Плагины активно используются сообществом, и с помощью системы плагинов легко реализовать более сложное поведение.

Например, один простой способ найти совместимые с Bottle плагины - использовать команду + pip search bottle +. Это даст вам представление о некоторых из наиболее популярных вариантов.

Related