Google Code предлагается на следующих языках: English – Español – 日本語 – 한국어 – Português – Pусский – 中文(简体) – 中文(繁體)
Стандарт CGI прост, но писать весь использующий его код вручную было бы трудоемко. Такими деталями занимается инфраструктура веб-приложения, а вы можете сконцентрироваться на разработке функций приложения. Google App Engine поддерживает любую инфраструктуру, полностью написанную на Python, понимающую CGI (и любые WSGI-совместимые инфраструктуры, использующие CGI-адаптер), в том числеDjango, CherryPy, Pylons и web.py. Объединить выбранную инфраструктуру с кодом приложения можно, скопировав ее код в каталог приложения.
App Engine включает собственную простую инфраструктуру веб-приложения под названием webapp. Инфраструктура webapp уже установлена в среде App Engine и в SDK, поэтому чтобы использовать ее, объединять ее с кодом приложения не нужно. Мы будем использовать 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 находится в пакете 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.