2016-07-07 6 views
0

В фляге I a before_request функция, которая выполняет некоторые проверки и возвращает пользователя к другому URL-адресу, если это необходимо.Change path of url flask with regex

У меня есть что-то похожее на следующем примере, который, когда я получаю 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) 

Я пробовал некоторые регулярные выражения, но это не работает при использовании сервера Dev с порт. Так что я задал себе вопрос:

  1. Как написать это регулярное выражение - лучший способ получить лучшее совпадение.
  2. Можно ли делать это с помощью регулярного выражения или у Flask есть лучший способ?
+0

Этот запрос поступает из вашего приложения или за его пределами? ... потому что, если он первый, почему бы вам не добавить язык в URL-адрес на первом месте, не беспокоясь, используя 're' .? –

+0

@ IronFist Outside. Если пользователь приходит из США и нажимает на URL-адрес Google, который находится в английском магазине, мне нужно будет перенаправить их? Может быть, есть лучший подход к этому? – 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». Backreference \ g < 0> заменяет всю подстроку, соответствующую RE.

+0

Спасибо, никогда не знал о группах. – lennard