Работа приложения

Приложение, использующее фреймворк webapp, состоит из трех частей:

  • один или несколько потомков класса RequestHandler (описанных в разделе Обработчики запросов)
  • объект WSGIApplication, который содержит схему URL, сопоставленную с потомками класса RequestHandler
  • основная функция приложения, которая запускает в работу объект WSGIApplication с помощью CGI адаптера

В классе WSGIApplication реализован интерфейс стандарта WSGI, который осуществляет взаимодействие между веб-фреймворком и сервером. Любой совместимый со стандартом WSGI фреймворк может работать с App Engine при помощи соответствующего адаптера. В фреймворк webapp включен такой адаптер: функция run_wsgi_app() принимает в качестве аргумента объект, указывающий на конфигурацию приложения, и запускает его. Вы также можете использовать CGI-адаптер, включенный в состав модуля wsgiref стандартной библиотеки языка Python.

Следующий пример сопоставляет четыре URL с четырьмя соответствующими классами-обработчиками (не приведены в примере), и затем выполняет приложение при помощи вызова функции run_wsgi_app():

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

application = webapp.WSGIApplication([('/', MainPage),
                                      ('/newentry', NewEntry),
                                      ('/editentry', EditEntry),
                                      ('/deleteentry', DeleteEntry),
                                     ],
                                     debug=True)

def main():
  run_wsgi_app(application)

Конструктор класса WSGIApplication принимает в качестве своих параметров список кортежей с парами значений, которые сопоставляют адреса URL с обработчиками запросов.

Опциональный параметр debug=True переводит приложение в отладочный режим, при работе в котором фреймворк выдает подробный стэк ошибок в том случае, если в процессе обработки запроса выдается исключение. По умолчанию, фреймворк в таких случаях возвращает стандартную ошибку 500 протокола HTTP.

Схема URL

Строка с URL в схеме является регулярным выражением. Все используемые в выражениях специальные символы должны быть экранированы. Регулярные выражения могут задавать группировки частей строки в URL, которые затем будут переданы как параметры в обработчик запросов.

class BrowseHandler(webapp.RequestHandler):

  def get(self, category, product_id):
    # Отобразить продукт с указанным идентификатором и категорией.


# Все адреса вида /browse/(category)/(product_id) направлять в обработчик BrowseHandler.
application = webapp.WSGIApplication([(r'/browse/(.*)/(.*)', BrowseHandler)
                                     ],
                                     debug=True)

def main():
  run_wsgi_app(application)

Подсказка: Платформа App Engine выполняет сопоставление URL запросов и соответствующих скриптов-обработчиков на языке Python на основании данных конфигурационного файла app.yaml. Затем фреймворк webapp перенаправляет указанные URL в соответствующие им классы-обработчики на основании схемы, заданной в объекте WSGIApplication. То, как вы будете использовать оба этих сопоставления зависит только от вас: вы можете направить все динамические запросы в один скрипт на языке Python, который в дальнейшем будет их обрабатывать, или, например, можете разнести несколько WSGI приложений по разным скриптам и использовать соответствующие URL в файле app.yaml, чтобы связать запросы с конкретным приложением.