在Flask中处理多个域

时间:2013-02-12 18:49:23

标签: python routing flask

我想在Flask中实现结构,它可以处理多个域。 因此,当我输入浏览器“http://domain1.com/show/1”时,它实际上执行带有路由的功能,如

@app.route('<string:domain>/show/<int:id>')
def show(domain = '', id = ''):
    return 'Domain is ' + domain + ', ID is ' + str(id)

非常重要的是,客户端浏览器中的URL仍应为“http://domain1.com/show/1”。据我所知,在Flask中使用redirect时,它会更改网址。我该如何组织这样的结构?谢谢!

2 个答案:

答案 0 :(得分:24)

request对象已有url_root参数。或者您可以使用Host标题:

print request.url_root  # prints "http://domain1.com/"
print request.headers['Host']  # prints "domain1.com"

如果您需要在应用程序中重定向,url_root是要查看的属性,因为它将包含WSGI应用程序的完整路径,即使根植于更深的路径(例如,从http://domain1.com/path/to/flaskapp)。

最好还是使用request.url_for()让Flask为您生成网址;它会考虑url_root。请参阅URL Building文档。

答案 1 :(得分:1)

以下是使用导入的代码:

import flask

print flask.request.url_root  # prints "http://domain1.com/"
print flask.request.headers['Host']  # prints "domain1.com"