Создание приложения Python при помощи Web2py

Python – это универсальный высокоуровневый язык программирования, который часто применяется в веб-программировании.

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

Python поддерживает множество разных фреймворков, и web2py – один из наиболее интересных.

web2py – это полнофункциональный фреймворк, предназначенный для разработки веб-приложений. Он может взаимодействовать с базами данных SQL, предоставляет многопоточный веб-сервер, и поставляется с IDE для разработки программы. Все это позволяет сделать процесс программирования гораздо быстрее. Имея доступ к веб-браузеру, можно создавать и тестировать приложения в том же интерфейсе.

Данное руководство поможет установить фреймворк web2py на сервер Ubuntu 12.04.

Установка web2py

Сервер Ubuntu поставляется с предустановленным пакетом Python, а это единственная зависимость web2py.

В дальнейшем может понадобиться утилита unzip, которая распаковывает архивы. Установите её сейчас, если она не была установлена ранее.

sudo apt-get update
sudo apt-get install unzip

Теперь можно загрузить пакеты фреймворка с сайта проекта в домашний каталог:

cd ~
wget http://www.web2py.com/examples/static/web2py_src.zip

Распакуйте полученные пакеты при помощи unzip:

unzip web2py_src.zip

Откройте каталог фреймворка:

cd web2py

Фреймворк web2py не нуждается в установке. Достаточно просто загрузить пакеты в соответствующий каталог и распаковать их. После этого можно сразу запустить фреймворк:

python web2py.py

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

Нужно исправить ошибку доступа. Чтобы остановить сервер, нажмите CTRL-C в терминале.

Создание SSL-сертификата

Чтобы исправить ошибку доступа и разрешить удалённый доступ к фреймворку, нужно запустить его при помощи SSL. Для этого нужно создать сертификат. Пакет openssl установлен в системе Ubuntu по умолчанию.

Создайте ключ RSA, который необходим для создания сертификата.

openssl genrsa -out server.key 2048

При помощи этого ключа можно создать файл .csr:

openssl req -new -key server.key -out server.csr

Теперь используйте эти компоненты для создания сертификата.

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Теперь в каталоге web2py есть файлы server.key, server.csr и server.crt. Их можно использовать для запуска интерфейса в безопасном режиме. Для этого при запуске web2py нужно добавить следующие параметры:

python web2py.py -a 'admin_password' -c server.crt -k server.key -i 0.0.0.0 -p 8000

Примечание: Установите надёжный пароль вместо условного пароля ‘admin_password’.

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

Теперь можно открыть интерфейс:

https://your_ip:8000

На экране появится предупреждение о том, что SSL-сертификат не подписан надёжным центром сертификации.

The site’s security certificate is not trusted!

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

Разработка приложения в интерфейсе

Посетив сайт, вы увидите приложение web2py по умолчанию.

Welcome
Hello World
How did you get here? [...]

Нажмите на кнопку Administrative Interface и введите установленный ранее пароль, чтобы получить доступ к интерфейсу.

На экране появится список установленных приложений; это три папки в левой части экрана. Они содержат стандартные приложения и образцы приложений. Если кликнуть по папке, можно просмотреть приложение в действии. К примеру, на данный момент открыто приложение admin, которое отвечает за работу интерфейса. Ранее вы видели стандартное приложение Hello World, которое хранится в папке welcome.

Все приложения, кроме admin, можно редактировать в интерфейсе, открыв выпадающее меню Manage и выбрав Edit. Чтобы вернуться назад после редактирования, нажмите ссылку Site в верхней панели навигации.

Попробуйте создать новое приложение. Найдите справа поле New simple application, введите имя приложения и нажмите кнопку Создать.

Примечание: В данном руководстве приложение условно называется sample_app.

На экране появится интерфейс для редактирования приложения. Он показывает список стандартных файлов MVC (модели, виды, контролеры), каталогов языков, каталогов статических страниц, модулей, плагинов и личных файлов.

Это, по сути, простая графическая презентация состояния файловой системы. Чтобы убедиться в этом, можно остановить сервер (CTRL-C) и перейти в подкаталог applications/sample_app в каталоге web2py. Он содержит все эти категории.

Реализация шаблона MVC

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

Web2py основывается на политике «coding by convention». Coding by convention – это метод разработки, позволяющий уменьшить количество решений, которое должен принять разработчик, без ущерба для гибкости приложения.

К примеру, если контроллер приложения называется imageblog.py и имеет функцию main, web2py попытается обслужить его при помощи вида imageblog/main.html. Расширение .html используется по умолчанию, если другие расширения не были заданы. Нарушив данное соглашение, придётся выполнять множество работы самостоятельно. Следуя соглашению, можно сэкономить время, так как большинство задач автоматизируется.

Если контроллер не указан, используется контроллер по умолчанию – default.py. Чтобы просмотреть функции контроллера, нажмите кнопку Edit.

Чтобы вернутся в основной интерфейс редактирования, нажмите Edit в верхней панели навигации.

Создание контроллера и вида

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

Если открыть этот контроллер для редактирования, можно увидеть, что он вызывает функцию index, если другая функция не указана. Эта функция просто выводит значение переменной message (hello from hello.py).

# coding: utf8
# try something like
def index(): return dict(message="hello from hello.py")

При необходимости можно отредактировать контроллер.

После этого нужно создать вид, который будет отображать обработанные данные. Нажмите кнопку Edit или <<back, чтобы вернуться в каталог приложения.

В разделе Views создайте новый вид. Чтобы вид применялся автоматически, его имя должно состоять из имени контроллера и имени функции. То есть если контроллер называется hello, а функция  index, то в данном случае вид будет называться hello/index.html.

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

{{extend 'layout.html'}}
<h1>This is the hello/index.html template</h1>
{{=BEAUTIFY(response._vars)}}

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

https://your_ip:8000/sample_app/hello

На экране появится следующий текст:

Sample app
This is the hello/index.html template
message : hello from hello.py

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

{{extend 'layout.html'}}
<h1>{{=message}}</h1>

Теперь на экране появится только сообщение от контроллера:

Sample app
hello from hello.py

Компонент {{=message}} позволяет встраивать код Python в файлы приложения. Таким образом можно динамически генерировать контент, который не обязательно должен быть доступен на момент написания программы.

Заключение

Данное руководство охватывает только базовые функции фреймворка web2py.

Гибкие текстовые файлы и удобный веб-интерфейс позволяют разработать любую необходимую приложению среду.

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

Tags: , , , ,

Добавить комментарий