在GAE中,您可以说users.get_current_user()
以使当前登录的用户隐含在当前请求中。即使同时处理多个请求,这也有效 - users
模块以某种方式知道代表get_current_user
函数正在调用哪个请求。我查看了开发服务器中模块的代码,它似乎使用os.environ
来获取用户电子邮件和与当前请求相关的其他值。
这是否意味着每个请求都会获得一个独立的os.environ
对象?
我需要实现类似于users.get_current_user()
的服务,该服务将根据调用代码处理的请求返回不同的值。假设os.environ
是要走的路,我怎么知道GAE已经使用(或保留)了哪些变量名?
另外,有没有办法添加在每个请求之前调用的钩子(或事件处理程序)?
答案 0 :(得分:3)
正如the docs所说,
Python Web应用程序与 使用CGI的App Engine Web服务器 协议
这基本上意味着在任何给定的流程中,一次只提供一个请求(尽管与实际CGI不同,一个流程可以连续重复用于多个请求,一个接一个,如果它定义main
app.yaml
调度的各个模块中的函数。另请参阅this page和this one以获取CGI定义和使用的环境变量的文档。
App Engine定义的钩子是围绕RPC层的调用,而不是HTTP请求。要在提供服务之前拦截每个请求,您可以使用app.yaml
将所有请求重定向到单个.py
文件,并在重定向之前在该文件的main
函数中执行拦截(或者,您可以在您使用main
发送到的每个模块的app.yaml
开头调用您的钩子。