Google App Engine中的请求感知代码 - os.environ?

时间:2010-02-14 00:45:26

标签: python google-app-engine request

在GAE中,您可以说users.get_current_user()以使当前登录的用户隐含在当前请求中。即使同时处理多个请求,这也有效 - users模块以某种方式知道代表get_current_user函数正在调用哪个请求。我查看了开发服务器中模块的代码,它似乎使用os.environ来获取用户电子邮件和与当前请求相关的其他值。

这是否意味着每个请求都会获得一个独立的os.environ对象?

我需要实现类似于users.get_current_user()的服务,该服务将根据调用代码处理的请求返回不同的值。假设os.environ是要走的路,我怎么知道GAE已经使用(或保留)了哪些变量名?

另外,有没有办法添加在每个请求之前调用的钩子(或事件处理程序)?

1 个答案:

答案 0 :(得分:3)

正如the docs所说,

  

Python Web应用程序与   使用CGI的App Engine Web服务器   协议

这基本上意味着在任何给定的流程中,一次只提供一个请求(尽管与实际CGI不同,一个流程可以连续重复用于多个请求,一个接一个,如果它定义main app.yaml调度的各个模块中的函数。另请参阅this pagethis one以获取CGI定义和使用的环境变量的文档。

App Engine定义的钩子是围绕RPC层的调用,而不是HTTP请求。要在提供服务之前拦截每个请求,您可以使用app.yaml将所有请求重定向到单个.py文件,并在重定向之前在该文件的main函数中执行拦截(或者,您可以在您使用main发送到的每个模块的app.yaml开头调用您的钩子。