• Официальный сайт SDK
  • Сайт с примерами кода

Использование фреймворка webapp

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

Вместе с тем, платформа App Engine уже имеет в своем составе простой web-фреймворк webapp. Он же входит в состав среды разработки, таким образом нет необходимости загружать его на сервер вместе со своим приложением. В этом руководстве в дальнейшем мы покажем работу webapp с нашим приложением.

Hello, webapp!

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

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

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

CmltcG9ydCB3c2dpcmVmLmhhbmRsZXJzCmZyb20gZ29vZ2xlLmFwcGVuZ2luZS5leHQgaW1wb3J0IHdlYmFwcApjbGFzcyBNYWluUGFnZSh3ZWJhcHAuUmVxdWVzdEhhbmRsZXIpOgpkZWYgZ2V0KHNlbGYpOgpzZWxmLnJlc3BvbnNlLmhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ3RleHQvcGxhaW4nCnNlbGYucmVzcG9uc2Uub3V0LndyaXRlKCdIZWxsbywgd2ViYXBwIFdvcmxkIScpCmRlZiBtYWluKCk6CmFwcGxpY2F0aW9uID0gd2ViYXBwLldTR0lBcHBsaWNhdGlvbigKWygnLycsIE1haW5QYWdlKV0sCmRlYnVnPVRydWUpCndzZ2lyZWYuaGFuZGxlcnMuQ0dJSGFuZGxlcigpLnJ1bihhcHBsaWNhdGlvbikKaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKbWFpbigpCg===

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

Как работает webapp

Модуль webapp находится в пакете google.appengine.ext. Он уже входит в состав среды разработки и самой платформы App Engine.

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

Объект приложения является экземпляром класса webapp.WSGIApplication. Если при его создании мы укажем в конструкторе параметр debug=true, то в случае неперехваченного исключения фреймворк webapp будет выводить подробные сообщения об ошибках. Это опция полезна для отладки приложения, однако в финальной версии имеет смысл ее убрать.

Для запуска экземпляра WSGIApplication через CGI адаптер наш код использует модуль wsgiref из стандартной библиотеки Python. Для дополнительной информации об этом модуле смотрите документацию по модулю wsgiref .

В дальнейшем мы задействуем еще несколько возможностей фреймворка webapp. Для дополнительной информации обратитесь к документации по webapp.

Далее...

Фреймворки позволяют разрабатывать web приложения проще, быстрее и создавать меньше ошибок. Webapp это только один из множества фреймворков, доступных для языка Python. Теперь давайте добавим в наше приложение дополнительные функции.

Перейти к Использование авторизации пользователей.