2016-07-07 27 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