Flask是否支持其子域中的正则表达式?

时间:2017-04-09 01:43:16

标签: python regex flask subdomain

在烧瓶中,我知道它可以使用子域,但我想在同一路由中设置一些不同的子域。 有没有办法可以像在URL路由中一样使用子域中的正则表达式?比如:

@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)

1 个答案:

答案 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