2013-08-24 75 views
1

我想在使用Flask重定向之前驗證url。如何驗證網址和使用燒瓶重定向到一些URL

我的抽象的代碼是在這裏...

@app.before_request 
def before(): 
    if request.before_url == "http://127.0.0.0:8000": 
     return redirect("http://127.0.0.1:5000") 

你有什麼想法? 在此先感謝。

+0

驗證您可能想要使用正則表達式查看的URL。這可能會有所幫助: http://stackoverflow.com/questions/827557/how-do-you-validate-a-url-with-a-regular-expression-in-python – petermlm

回答

4

使用urlparse (builtin module)。然後,使用內置的燒瓶redirection methods

>>> from urlparse import urlparse 
>>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html') 
>>> o 
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', 
     params='', query='', fragment='') 
>>> o.scheme 
'http' 
>>> o.port 
80 
>>> o.geturl() 
'http://www.cwi.nl:80/%7Eguido/Python.html' 

然後,您可以檢查所剖析出端口和重建URL(使用相同的庫)與正確的端口或路徑。這將保持你的url的完整性,而不是處理字符串操作。

+0

感謝您的有用答案! – nobinobiru

0

你可以做這樣的事情(未測試):

@app.route('/<path>') 
def redirection(path): 
    if path == '': # your condition 
     return redirect('redirect URL') 
0

您可以使用urlparse from urllib解析url。下面的函數檢查解析url後發現的scheme,netlocpath變量。支持Python 2和3.

try: 
    # python 3 
    from urllib.parse import urlparse 
except ImportError: 
    from urlparse import urlparse 

def url_validator(url): 
    try: 
     result = urlparse(url) 
     return all([result.scheme, result.netloc, result.path]) 
    except: 
     return False