четверг, 21 июня 2012 г.

Настройка Eclipse для разработки простого web-приложения на языке Python для развертывания в среде Google App Engine

Описан процесс установки, настройки среды разработки Eclipse, необходимых плагинов для него и создания простого web-приложения на языке Python для размещения в среде Google App Engine. При разработке приложения рассматриваются вопросы создания правил маршрутизации http-запросов с помощью среды webapp2, предоставляемой облаком Google App Engine, использования шаблонов в среде Jinja2.

Установка среды разработки Eclipse и плагинов для него

  1. Скачайте и установите комплект разработки Java с этой страницы http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html
  2. Скачайте и установите тоже самое для Python'а со страницы http://python.org/download/releases/2.7.3/
  3. Качаем и устанавливаем комплект разработчика для Google App Engine для Python со страницы https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Python
  4. Скачайте с этой страницы http://www.eclipse.org/downloads/packages/eclipse-ide-java-and-report-developers/indigosr2 Eclipse для вашей платформы, распакуйте скачанный архив, запустите Eclipse с помощью программы eclipse.exe папки eclipse, извлеченной из архива.
  5. Установите плагин Google App Engine для Eclipse: 
    1. Откройте окно установки плагинов через пункт меню Help - Install New Software...
    2. Нажмите кнопку Add... для добавления нового источника программного обеспечения
    3. В поле Name напишите GAE Plugin, а в поле Location: http://dl.google.com/eclipse/plugin/3.7 и нажмите кнопку OK
    4. Дождемся, когда загрузится список доступных из этого источника плагинов, и отметим пункты:
      • Google Plugin for Eclipse (required)
      • SDKs
    5. Нажмем кнопку Next дважды, соглашаемся с лицензиями и нажимаем кнопку Finish
    6. Терпеливо ждем окончания установки, попутно соглашаемся со всеми вопросами и предупреждениями, а в конце соглашаемся с перезагрузкой Eclipse'а
  6. Установите плагин PyDev для поддержки языка Python:
    1. Откройте окно установки плагинов через пункт меню Help - Install New Software...
    2. Нажмите кнопку Add... для добавления нового источника программного обеспечения
    3. В поле Name напишите PyDev, а в поле Location: http://pydev.org/updates и нажмите кнопку OK
    4. После загрузки списка плагинов отмечаем пункт PyDev
    5. Нажимаем кнопку Next, а потом еще раз, соглашаемся с лицензией и нажимаем кнопку Finish
    6. Ждем окончания процесса установки, соглашаясь со всем, в конце и с перезагрузкой
  7. Подключим интерпретатор Eclipse к установленному Python'у: откроем окно настроек через меню Window - Preferences; разверните ветку PyDev и выберите пункт Interpreter - Python; нажмите кнопку New...; рядом с полем Interpreter Executable нажмите кнопку Browse... и укажите python.exe из папки с Python'ом, установленном в пункте 2, нажмите ОК и в следующем окне тоже; кнопкой OK закройте окно настроек.
  8. Этот пункт следует выполнять после создания web-приложения. Добавим пункт запуска web-приложения в кнопку Run на панели инструментов: нажмите кнопочку со стрелкой вниз рядом с кнопкой Run и выберем пункт Run Configurations...; слева выберите ветку Python Run и нажмите кнопку New launch configuration в верхней части окна; в правой части окна заполните реквизиты следующими значениями:
    1. Name (название пункта запуска): helloworld
    2. Project: выберите наш проект
    3. Main Module (файл старта сервера разработки приложений: dev_appserver.py, он находится в комплекте разработчика для Google App Engine, установленном в пункте 3): в моем случае выглядит так: D:/gae-python-1.6.6/dev_appserver.py
    4. На закладке Arguments реквизит Program Arguments: "${workspace_loc}/helloworld" (название нашего проекта, создаваемого в следующем пункте)
    5. На последней закладке в реквизите Display in favorites menu установите галочку для пункта Run
    6. Нажмите кнопку Apply и теперь пунктик запуска будет доступен в кнопке Run

Создание простого web-приложения

Eclipse запущен, содержит необходимые плагины, и даже немного настроен, теперь создадим простое web-приложение и запустим его на локальном сервере разработки.
  1. Через меню File - New - Project... открываем окно создания проекта
  2. Разворачиваем ветку PyDev и выбираем пункт PyDev Google App Engine Project, нажимаем кнопку Next >
  3. Вводим следующие характеристики создаваемого приложения:
    • Project name: helloworld
    • Project type: Python
    • Grammar Version: 2.7
    • Interpreter: Default
    • Add project directory to the PYTHONPATH?
  4. Нажимаем кнопку Next >
  5. На следующей странице указываем каталог с комплектом разработчика Google App Engine для Python, установленного в 3-ем пункте предыдущего абзаца
  6. Потом появится окошко со списком добавляемых библиотек, нажмите OK, а потом кнопку Finish
  7. На вопрос о необходимости переключиться в перспективу PyDev - соглашайтесь
Проект создан приступим к разработке. Будем использовать фреймвок webapp, он уже установлен в Google App Engine.

Создание конфигурационного файла web-приложения

Конфигурационный файл определяет название приложения, его версию, а также различные компоненты приложения.
В корневой папке проекта создайте файл app.yaml со следующим содержимым:


Первые четыре реквизита определяют: название приложения, его версию, тип среды исполнения, версию используемого API.
Блок, начинающийся с элемента handlers, определяет коллекцию обработчиков http-запросов, каждый обработчик начинается с дефиса. В нашем случае все запросы обрабатываются объектом app скрипта main.py, кроме тех, что адресованы к каталогам css и img, эти папки содержат статические ресуры, о чем и указано в конфигурационном файле.
Блок, начинающийся с элемента libraries, определяет библиотеки, подключаемые к web-приложению, в нашем случае подключается библиотека jinja версии 2.6, используемая для реализации шаблонов отображения страниц.


Создание простого контроллера для отображения главной страницы

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


Строки, начинающиеся с import, подключают используемые библиотеки.
Класс MainPage, унаследованный от webapp2.RequestHanlder, определяет метод get, ответственный за обработку запроса. Метод создает шаблон на основе html-файла, описываемого ниже, и передает результат генерации страницы на основе шаблона в объект http-ответа.
Строка, определяющая объект app, содержит определение правил маршрутизации запроса http-запроса, из этого определения видно, что запрос к корневому каталогу ("/") должен обрабатываться классом Main.
Последняя строка создает окружение jinja для генерации  страниц из шаблонов.


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

  1. В каталоге проекта создайте каталог pages, в ней будем размещать страницы нашего одностраничного web-приложения.
  2. В каталоге pages создайте файл main.html со следующим содержимым:

Страница представляет собой описание блоков шаблона страницы, у нас два блока: title и body.


Создание шаблона отображения страниц

Будем отображать главную страницу с помощью шаблона Simplex, а возьмем его отсюда http://www.oswd.org/design/preview/id/2552. Шаблон состоит из трех файлов:
  1. html -страница,
  2. css-стиль,
  3. изображение, используемое для рисования рамок.
Можно использовать и любой другой шаблон.
  1. В папке проекта создадим папки templates, css и img для хранения шаблонов html-страниц, листов стилей и изображений соответственно.
  2. В папку css положим лист стилей style.css.
  3. В папку img положим файл изображения bg.gif.
  4. В папку templates положим файл index.html и переименовываем его в simplex.html.
  5. В файле simplex.html находим строку, начинающуюся с <link href="style.css" и меняем значение реквизита href на "../css/style.css".
  6. Теперь в файле css/style.css меняем путь к файлу картинки на "../img/bg.gif".
  7. Добавим в шаблон точки вхождения блоков страницы, они отмечены конструкциями, вида: {% block [имя блока] %}{% endblock %}, в нашем случае их две под названиями title и body, шаблон должен выглядеть следующим образом:


Запуск web-приложения

Для запуска приложения выберите пункт меню helloworld из кнопки Run. После появления надписи "Running application dev~helloworld on port 8080: http://localhost:8080", откройте введите адрес http://localhost:8080 в адресную строку браузера.
Сейчас приложение запущена на локальном компьютере, это удобно в процессе разработки и отладки приложения. После завершения разработки необходимо опубликовать приложение в облаке Google AppEngine. Эта процедура несложна и аналогична созданию кнопки запуска приложения, при этом используется строка запуска скрипта: appcfg.py update ${workspace_loc}/helloworld