![](/img/trans.png)
[英]Why I don't need to pass the required 2 positional arguments in WSGI-compliant apps?
[英]AppEngine confusion - CGI, WSGI-compliant?
我很困惑。
如果 AppEngine 应该允许运行使用 WSGI 的应用程序..
# somewhere in a webapp.RequestHandler
env = dict(os.environ.items())
for key, value in env.items():
self.response.out.write(key+': '+value+'<br/>')
req_uri = wsgiref.util.request_uri(env)
.. 那么为什么env
不包含PEP 333列出的必须存在的变量 - 导致wsgiref.util.request_uri()
引发KeyError
?
我基本上是在编写一些需要在 AppEngine 或典型的 Apache + modwsgi 设置中工作的库。 我认为只需编写一个符合WSGI
的应用程序就足够了,但似乎 AppEngine 本身..不是吗?
必须包含environ
特定键的环境是传递给 wsgi 应用程序可调用的环境。 PEP-333 不要求这是os.environ
的值。 CGI 应用程序会发现很多键都在os.environ
中,因为网关服务器已经提供了它们,而 cgi 到 wsgi 网关接口(比如wsgiref.handlers.CGIHandler
)只需要在调用之前添加 wsgi 特定的键wsgi 应用程序。
需要明确的是,当 PEP-333 提到environ
时,它并不意味着os.environ
。
编辑: google.appengine.ext.webapp.Request
显然继承自webob.Request
。 因此,webapp 处理程序可以像这样访问 wsgi environ
。
class MainPage(webapp.RequestHandler):
def get(self):
dosomethingwith(self.request.environ)
AFAIK pep 333 没有说明强制所有 wsgi 环境变量进入os.environ
除非模拟 CGI,只是 wsgi 环境变量应该包含这些东西。
在 wsgi 应用程序的上下文中,环境字典是传递给 wsgi 应用程序 function 的部分。 在 GAE 中,您可以通过request.environ
访问 wsgi environ dict。 所以我认为你的代码应该更像:
# somewhere in a webapp.RequestHandler
env = self.request.environ
for key, value in env.iteritems():
self.response.out.write(key+': '+value+'<br/>')
req_uri = wsgiref.util.request_uri(env)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.