Избранное | Русский | Войти

Использование инфраструктуры webapp

Стандарт CGI прост, но писать весь использующий его код вручную было бы трудоемко. Такими деталями занимается инфраструктура веб-приложения, а вы можете сконцентрироваться на разработке функций приложения. Google App Engine поддерживает любую инфраструктуру, полностью написанную на Python, понимающую CGI (и любые WSGI-совместимые инфраструктуры, использующие CGI-адаптер), в том числеDjango, CherryPy, Pylons и web.py. Объединить выбранную инфраструктуру с кодом приложения можно, скопировав ее код в каталог приложения.

App Engine включает собственную простую инфраструктуру веб-приложения под названием webapp. Инфраструктура webapp уже установлена в среде App Engine и в SDK, поэтому чтобы использовать ее, объединять ее с кодом приложения не нужно. Мы будем использовать webapp на протяжении всего этого учебника.

Hello, webapp!

Приложение webapp состоит из трех частей:

  • один или несколько классов RequestHandler, обрабатывающих запросы и создающих ответы;
  • экземпляр WSGIApplication, направляющий входящие запросы обработчикам в зависимости от URL;
  • основная часть, выполняющая WSGIApplication с помощью CGI-адаптера.

Перепишем наше дружеское приветствие как приложение webapp. Перейдите к редактированию файла helloworld/helloworld.py и замените его содержание следующим:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, webapp World!')

application = webapp.WSGIApplication(
                                     [('/', MainPage)],
                                     debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()

Перезагрузите http://localhost:8080/ в браузере и посмотрите на новую версию в действии. (Если вы остановили работу веб-сервера, перезапустите его, выполнив команду, описанную в разделе "Hello, World!".)

Что делает webapp

Модуль webapp находится в пакете google.appengine.ext. Этот модуль входит в SDK, а также в рабочую среду выполнения.

Этот код определяет один обработчик запросов, MainPage, сопоставленный с корневым URL (/). Когда webapp получает HTTP-запрос GET на URL /, она создает экземпляр класса MainPage и вызывает метод get этого экземпляра. В этом методе информация о запросе доступна посредством self.request. Обычно этот метод устанавливает свойства на self.response, чтобы подготовить ответ, и завершает работу. webapp отправляет ответ на основании конечного состояния экземпляра MainPage.

Само приложение представляется экземпляром webapp.WSGIApplication. Параметр debug=true, переданный его конструктору, дает webapp указание вывести записи из стека в браузер, если обработчик сталкивается с ошибкой или создает исключение. Из итоговой версии приложения этот параметр лучше удалить.

Функция run_wsgi_app() получает экземпляр WSGIApplication (или другой объект приложения, совместимого с WSGI) и выполняет его в CGI-среде App Engine. Функция run_wsgi_app() аналогична адаптеру WSGI-to-CGI, входящему в модуль wsgiref стандартной библиотеки Python, но включает ряд дополнительных возможностей. Например, она может автоматически определять, запущено ли приложение на сервере разработки или в App Engine, и отображать ошибки в браузере, если оно запущено на сервере разработки.

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

Далее...

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

Переходите к разделу Использование службы Users.