Запрашиваемый в коде код в Google App Engine - os.environ? - PullRequest
2 голосов
/ 14 февраля 2010

В GAE вы можете сказать users.get_current_user(), чтобы получить пользователя, вошедшего в систему, неявно для текущего запроса. Это работает, даже если несколько запросов обрабатываются одновременно - модуль users каким-то образом знает, какой запрос вызывается функцией get_current_user от имени. Я взглянул на код модуля на сервере разработки, и он, похоже, использует os.environ для получения электронной почты пользователя и других значений, связанных с текущим запросом.

Означает ли это, что каждый запрос получает независимый os.environ объект?

Мне нужно реализовать сервис, аналогичный users.get_current_user(), который бы возвращал разные значения в зависимости от запроса, обрабатываемого вызывающим кодом. Предполагая, что os.environ - это путь, как мне узнать, какие имена переменных уже используются (или зарезервированы) GAE?

Кроме того, есть ли способ добавить хук (или обработчик событий), который вызывается перед каждым запросом?

1 Ответ

3 голосов
/ 14 февраля 2010

Как документы говорят,

Веб-приложение Python взаимодействует с Веб-сервер App Engine с использованием CGI протокол.

Это в основном означает, что ровно один запрос обрабатывается за один раз в любом данном процессе (хотя, в отличие от реального CGI, один процесс может последовательно использоваться повторно для нескольких запросов, один за другим, если он определяет main функций в различные модули, к которым app.yaml отправляет). См. Также эту страницу и эту для документации переменных окружения, которые CGI определяет и использует.

Хуки, определяемые App Engine, относятся к вызовам на уровне RPC, а не к HTTP-запросам. Чтобы перехватить каждый запрос до того, как он будет обработан, вы можете использовать app.yaml, чтобы перенаправить все запросы в один файл .py и выполнить перехват в функции main этого файла перед перенаправлением (или вы можете вызвать перехват в начале main в каждом модуле, для отправки которого вы используете app.yaml).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...