在Flask中处理多个域

use*_*831 15 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)
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 25

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

print request.url_root  # prints "http://domain1.com/"
print request.headers['Host']  # prints "domain1.com"
Run Code Online (Sandbox Code Playgroud)

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

最好还是request.url_for()让Flask为你生成一个URL; 它会考虑url_root到.请参阅URL构建文档.