Несмотря на то, что стандарт CGI очень простой, использующие его приложения бывает сложно сопровождать, так как приходится делать вручную много элементарных вещей. Для повышения эффективности работы программистов были созданы специальные каркасы разработки, так называемые web-фреймворки, которые позволяют разработчику сфокусироваться на основной логике приложения. Платформа Google App Engine поддерживает работу любого существующего фреймворка, написанного на чистом языке Python и взаимодействующего через стандарт CGI (либо WSGI-совместимый фреймворк, использующий CGI адаптер), такие как Django, CherryPy, Pylons и web.py. Вы можете разместить выбранный фреймворк вместе со своим приложением, скопировав его код в рабочий каталог приложения.
Вместе с тем, платформа App Engine уже имеет в своем составе простой web-фреймворк webapp. Он же входит в состав среды разработки, таким образом нет необходимости загружать его на сервер вместе со своим приложением. В этом руководстве в дальнейшем мы покажем работу webapp с нашим приложением.
Простое приложение, использующее webapp можно условно разделить на три части:
RequestHandler, которые будут являться обработчиками запросовWSGIApplication, который распределяет входящие запросы по обработчикам на основании данных об URLWSGIApplication, используя CGI адаптерДавайте попробуем переписать наше приложение, задействуя возможности фреймворка webapp. Откройте файл helloworld/helloworld.py и замените его содержимое следующим:
import wsgiref.handlers
from google.appengine.ext import webapp
class MainPage(webapp.RequestHandler):
def get(self):
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('Hello, webapp World!')
def main():
application = webapp.WSGIApplication(
[('/', MainPage)],
debug=True)
wsgiref.handlers.CGIHandler().run(application)
if __name__ == "__main__":
main()
Обновите страницу http://localhost:8080/ в своем браузере и увидите изменения. (Если вы уже остановили web сервер, запустите его снова командой, описанной в разделе "Hello, World!".)
Модуль 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. Теперь давайте добавим в наше приложение дополнительные функции.
Перейти к Использование авторизации пользователей.