Приложение, использующее фреймворк webapp, состоит из трех частей:
В классе 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, которые затем будут переданы как параметры в обработчик запросов.
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, чтобы связать запросы с конкретным приложением.