Это первая статья в серии, где я буду документировать мой опыт написания веб- приложения на Python, используя микрофреймворк Flask.
Я разработчик ПО с двузначным числом лет опыта разработки комплексных приложений на нескольких языках. Впервые я познакомился с Python для создания привязок к C++ библиотеке на работе. Вдобавок к Python, я писал веб-приложения на PHP, Ruby, Smalltalk и, верите вы или нет, еще на С++. Из всего этого, я нахожу комбинацию Python/Flask самой гибкой.
Приложение, которое я собираюсь разрабатывать как часть этого руководства,
является сервером микроблогов, и я решил назвать его microblog. Довольно
креативно, я знаю.
Во время нашего прогресса я затрону следующие темы:
Если ваш компьютер поддерживает Python 2.6/2.7, то все, вероятно, пойдет
хорошо. Приложение из руководства должно нормально работать на Windows, OS X и
Linux.
Это руководство подразумевает, что вы знакомы с окном терминала (командной
консолью в случае Windows), и вы знаете основные команды для работы с файлами
вашей ОС. Если это не так, то перед тем как продолжить, я рекомендую вам
ознакомиться с тем, как создавать директории, копировать файлы и т.д.,
используя консоль.
Наконец, вы должны чувствовать себя свободно в написании кода на Python.
Знакомство с модулями и пакетами этого языка также не помешает.
Ну что ж, приступим!
Если у вас еще не установлен Python 2.7, то берем его
отсюда.
Теперь нам нужно установить Flask и несколько расширений, которые мы будем
использовать. Я предпочитаю создание виртуального
окружения, где все это будет
установлено таким образом, что ваша основная установка Python затронута не
будет. В качестве бонуса, вам не нужен будет root доступ для установки таким
способом.
Итак, открываем терминал, выбираем место, где будет ваше приложение, и создаем
новую папку, в которой оно будет содержаться. Назовем эту папку microblog.
Далее скачиваем
virtualenv.py и
кладем его внутрь новой папки.
Чтобы создать новое окружение введите следующую команду:
python virtualenv.py flask
Эта команда создаст полноценное окружение Python внутри папки flask
Виртуальные окружения могут быть активированы и деактивированы по желанию.
Активированное окружение добавляет путь своей папки bin в path системы,
например, когда вы вызываете интерпретатор python, то получаете версию
текущего окружения, а не системную. Лично я никогда не любил это свойство,
поэтому ни разу не активировал ни одно из моих окружений, вместо этого я
просто вызывал тот интерпретатор, который хотел, печатая его путь.Прим.
пер.: Перед тем как вы начнете вводить команды, хочу отметить, что в
комментариях к девятой части отметится баг в flask-whooshalchemy, исправленную
версию можнонужно скачать отсюда (репозиторий автора)
Если вы пользователь Linux, OS x или Cygwin, установите flask и расширения,
вводя следующие команды одну за одной:
Список команд
flask/bin/pip install flask==0.9
flask/bin/pip install flask-login
flask/bin/pip install flask-openid
flask/bin/pip install flask-mail
flask/bin/pip install sqlalchemy==0.7.9
flask/bin/pip install flask-sqlalchemy==0.16
flask/bin/pip install sqlalchemy-migrate
flask/bin/pip install flask-whooshalchemy==0.54a
flask/bin/pip install flask-wtf==0.8.4
flask/bin/pip install pytz==2013b
flask/bin/pip install flask-babel==0.8
flask/bin/pip install flup
Если же вы пользователь Windows, то команды слегка отличаются:
Список команд
flask\Scripts\pip install flask==0.9
flask\Scripts\pip install flask-login
flask\Scripts\pip install flask-openid
flask\Scripts\pip install sqlalchemy==0.7.9
flask\Scripts\pip install flask-sqlalchemy==0.16
flask\Scripts\pip install sqlalchemy-migrate
flask\Scripts\pip install flask-whooshalchemy==0.54a
flask\Scripts\pip install flask-wtf==0.8.4
flask\Scripts\pip install pytz==2013b
flask\Scripts\pip install flask-babel==0.8
flask\Scripts\pip install flup
Эти команды скачают и установят все пакеты, которые мы будем использовать в
нашем приложении.
Учтите, что мы собираемся использовать Flask 0.9, а не последнюю версию. Flask
0.10 не было довольно долго и некоторые расширения не готовы для работы с
данной версией. Также есть несколько несовместимостей между пакетами и
последней версией pip, которые решены использованием конкретных версий для
установки.
Windows пользователей ждет еще один шаг. Наблюдательный читаель заметит, что в
списке команд для Windows отсутствует flask-mail. Это расширение не
устанавливается чисто на Windows, поэтому мы пойдем обходным путем:
flask\Scripts\pip install --no-deps lamson chardet flask-mail
Я не буду вдаваться в подробности, поэтому если вы хотите узнать больше,
прочтите документацию к flask-mail.
Если установка всех пакетов прошла успешно, вы можете удалить virtualenv.py,
поскольку файл нам больше не понадобится.
Теперь у вас есть подпапка flask, в вашей папке microblog, содержащая
интерпретатор Python и фреймворк Flask с расширениями, которые мы будем
использовать в этом приложении. Настало время написать наше первое веб-
приложение!
После того как вы переместились папку microblog, давайте создадим основную
структуру папок для нашего приложения:
mkdir app
mkdir app/static
mkdir app/templates
mkdir tmp
В папку app мы поместим само наше приложение. Подпапка static нужна для
хранения статики, такой как картинки, javascript файлы и таблицы стилей.
Подпапка templates, очевидно, предназначена для хранения наших шаблонов.
Давайте начнем с создания простого скрипта инициализации нашего пакета app
(файл app/__init__.py)
from flask import Flask
app = Flask(__name__)
from app import views
Скрипт выше просто создает объект приложения (наследуя Flask), затем
импортирует модуль представлений, который мы еще не написали.
Представления — это обработчики, которые отвечают на запросы веб-браузера.
Представления в Flask пишутся как Python функции. Каждая функция представления
сопоставляется с одним или несколькими запросами URL.
Напишем нашу первую функцию представления (файл app/views.py)
from app import app
@app.route('/')
@app.route('/index')
def index():
return "Hello, World!"
Это весьма простое представление, которое просто возвращает строку для
отображения в пользовательском браузере. Два декоратора route создают
привязку адресов / и /index к этой функции.
Последним шагом для получения полностью работающего веб-приложения будет
создание скрипта, который стартует веб-сервер нашего приложения. Давайте
назовем скрипт run.py и положим его в корневой каталог (microblog/):
#!flask/bin/python
from app import app
app.run(debug = True)
Скрипт просто импортирует переменную app из нашего пакета app и вызывает
метод run для того, чтобы запустить сервер. Помните, что переменная app —
экземпляр класса Flask, мы создали его выше.
Для запуска вашего приложения просто запустите скрипт. На OS X, Linux и Cygwin
вам следует пометить файл исполняемым перед тем как вы сможете его запустить.
chmod a+x run.py
Тогда скрипт может быть вызван просто:
./run.py
В Windows процесс немного отличается. Нет необходимости помечать файл исполняемым. Вместо этого вам нужно запустить скрипт как аргумент интерпретатора Python:
flask/Scripts/python run.py
После старта сервер будет прослушивать порт 5000, ожидая соединений. Теперь
откроем браузер и введем следующий URL в адресную строку:
Или же вы можете использовать эту ссылку:
http://localhost:5000/index
Теперь вы увидели маршрутизацию в действии? Первый URL привязан к /, в то
время как второй к /index. Оба маршрута ассоциированы с нашей функцией
представления, поэтому они дают одинаковый результат. Если вы введете любой
другой маршрут, то получите ошибку, так как только эти два были привязаны к
функции представления.
Когда вы закончите играть с сервером вы можете просто нажать Ctrl-C, чтобы
остановить его.
И этим я хочу закончить первую часть этого руководства.
Те из вас, кто поленился печатать, могут скачать код из этого руководства
ниже:
Скачать microblog-0.1.zip.
Обратите внимание, что вам нужно установить Flask, чтобы запустить приложение
из архива выше.
В следующей части серии мы изменим наше маленькое приложение для использования
HTML шаблонов.
Надеюсь увидимся в следующей части.
Мигель