Flask蓝图使用子域名

config.py
#首先配置中加上
SERVER_NAME = "mysite.com"

__init__.py
#设置默认
app.url_map.default_subdomain = 'www'

#蓝图注册
from .home import home as home_blueprint
app.register_blueprint(home_blueprint)

#工具页蓝图注册,用tool子域名
from .tool import tool as tool_blueprint
app.register_blueprint(tool_blueprint, subdomain='tool')

这样设置后
url_for('home.index'),就是www.mysite.com了
url_for('tool.index'),就是tool.mysite.com了
但是有一个问题,那就是static
url_for('static'),居然是mysite.com的域名,导致css之类的静态文件全部无法访问,怎么办呢?自己定义static路由,自己加上子域名。

找了好久,发现add_url_rule可以添加路由,添加其他路由可以生效,唯独static不生效,还是按照Flask默认的路由,最后发现只要将static_folder预先设置为None,Flask就不会自己生成static路由了,自己添加的static路由就可以生效了。

完整代码

config.py:

SESSION_COOKIE_DOMAIN = 'mysite.com'  # session 支持taokemiao.com所有顶级域名和子域名
SERVER_NAME = 'mysite.com'
app/__init__.py:

def create_app(config_name):
    app = Flask(__name__, static_folder=None)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)

    app.url_map.default_subdomain = 'www'
    #开启SERVER_NAME和sub_domain子域名之后,static需要重新自己添加路由
    #要自己添加的static路由生效,必须开头的Flask先将static_folder=None才行,app = Flask(__name__, static_folder=None)
    app.static_url_path = "/static"
    app.static_folder = "static"
    app.add_url_rule(app.static_url_path + '/',
                     endpoint='static',
                     view_func=app.send_static_file,
                     subdomain="static")
    print(app.url_map)

    #注册蓝图
    from .home import home as home_blueprint
    app.register_blueprint(home_blueprint)

    #工具页蓝图注册,用tool子域名
    from .tool import tool as tool_blueprint
    app.register_blueprint(tool_blueprint, subdomain='tool')

你可能感兴趣的:(Flask蓝图使用子域名)