2016-07-07 32 views
0

在flask中,我有一個before_request函數,它執行一些檢查並在必要時將用戶返回到其他url。用正則表達式更改url flask的路徑

我有類似於下面的例子在那裏我得到request_url我現在想這個改變從東西:https://www.example.com:5000/user/profile/https://www.example.com:5000/us/user/profile/

@app.before_request 
def check_location(): 
    country = request.cookies.get('country') 
    if country != g.country: 
     url = request.url 
     url = re.sub('.com[^\/]*', '.com/us', url) 
     return redirect(url, 301) 

我嘗試了一些正則表達式,但使用開發服務器用的時候,這並不工作港口。所以我的問題是:

  1. 我該如何編寫這個正則表達式更好的方式來獲得更好的匹配。
  2. 這可以用正則表達式來處理嗎?還是Flask有更好的方法?
+0

這個請求是來自您的應用程序還是來自外部?因爲如果它是前者,爲什麼不在第一個地方添加語言,而沒有使用're'來解決所有問題? 。? –

+0

@IronFist外面。如果用戶來自美國,並點擊英文網店中的谷歌地址,我將需要重定向他們?也許有更好的方法呢? – lennard

回答

2

使用組:

url = "https://www.example.com:5000/user/profile/" 
url = re.sub('.com[^\/]*', '\g<0>/us', url) 
print url # https://www.example.com:5000/us/user/profile/ 

從文檔:

除了字符轉義和反向引用如上所述,\克將使用由指定的組的名稱相匹配的子串,如(?P ...)語法所定義的。 \ g使用​​相應的組號碼; \ g < 2>因此等同於\ 2,但在替換例如\ g < 2> 0中不含糊。 \ 20將被解釋爲對組20的引用,而不是對組2的引用,後面是字面字符「0」。反向引用\ g < 0>替代RE中匹配的整個子字符串。

+0

謝謝,從來不知道團體。 – lennard