在瓶

2013-02-12 28 views
12

多個域我想要實現結構瓶,可同時處理多個域處理。 所以,當我在瀏覽器中「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時,它會更改網址。我應該如何組織這樣的結構?謝謝!

回答

21

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()有瓶爲你生成一個URL;它會考慮到url_root。請參閱URL Building文檔。

+0

完善和明顯的決定,謝謝! – user2065831 2013-02-12 18:55:42

+0

順便說一句,什麼是最好的決定,動態地添加SEO網址,將它們存儲在數據庫中,並在我的應用程序中添加路線?我認爲不要每次都執行app.add_url_rule會更容易,更快速。 – user2065831 2013-02-12 19:03:06

+0

在它們中找到一個模式並註冊*一條*路線一次性匹配它們? – 2013-02-12 19:03:45

0

下面的代碼是什麼樣子與進口:

import flask 

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