2017-04-09 32 views
0

在燒瓶中,我知道它可以使用子域,但我想在相同的路由中設置一些不同的子域。 有沒有一種方法,我們可以使用子域名正則表達式就像它的URL路徑,如:?Flask是否支持在其子域中使用正則表達式?

@app.route('/', subdomain='<regex("www|test"):subdomain>') 
def example(subdomain): 
    return "{}".format(subdomain) 

if __name__ == '__main__': 
    app.run(debug=True) 

但有新的問題,如果我不希望這樣的一個說法,我該怎麼辦?

@app.route('/', subdomain='<regex("www|test"):subdomain>') 
def example(): 
    return "test" 

if __name__ == '__main__': 
    app.run(debug=True) 
+0

你是什麼意思與「像在其URL路由「? '@ app.route()'默認不支持regex。 – Vallentin

+0

我的意思是我可以簡單地在路由中實現它,但我不能在子域中。 –

+0

也許我可以通過同樣的方式實現它?我只是嘗試它 –

回答

0

我發現WERKZEUG用同樣的方法來分析在here DOMAIN_URL和URL路徑!

這樣我就可以通過這個實現它:

from flask import Flask 
from werkzeug.routing import BaseConverter 

app = Flask(__name__) 


class Config(object): 
    DEBUG = False 
    TESTING = False 
    SQLALCHEMY_TRACK_MODIFICATIONS = True 


class DevelopmentConfig(Config): 
    DEBUG = True 
    SERVER_NAME = 'local.dev:9090' 


class RegexConverter(BaseConverter): 
    def __init__(self, url_map, *items): 
     super(RegexConverter, self).__init__(url_map) 
     self.regex = items[0] 


app.url_map.converters['regex'] = RegexConverter 
app.config.from_object(DevelopmentConfig) 

@app.route('/', subdomain='<regex("www|test"):subdomain>') 
def example(subdomain): 
    return "{}".format(subdomain) 

if __name__ == '__main__': 
    app.run(debug=True) 

,如果你想在本地測試,你也許像編輯您的主機:

127.0.0.1  www.local.dev 
127.0.0.1  local.dev 
127.0.0.1  test.local.dev 
相關問題