Pyramid:如何指定应用的基础 URL
假设我的应用程序是在域名 www.example.com
上提供服务的。
我应该在哪里在Pyramid的配置文件中指定这个域名,这样像 request.route_url
这样的功能就能自动识别并生成正确的URL呢?
(我觉得 [server:main]
不是放这个的地方)
2 个回答
1
没错,一个合适的反向代理会把正确的头信息转发给你的wsgi服务器。你可以查看pyramid的食谱,里面有关于nginx的具体做法。
4
这些生成网址的函数,比如 route_url
、static_url
和 resource_url
,都依赖于一个叫 WSGI 的环境字典。这个字典里包含了生成完整网址所需的所有重要参数。
所以,有一种方法是在创建请求的时候,修改这个 WSGI 环境字典,调整里面需要的参数。使用事件来处理这种事情非常合适:
from pyramid.events import NewRequest
from pyramid.events import subscriber
@subscriber(NewRequest)
def mysubscriber(event):
event.request.environ['HTTP_HOST'] = 'example.com'
这样一来,route_url
就会把 example.com
当作基础网址来使用。