Flask蓝图使用子域名
2016-11-20 本文已影响923人
晓函
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 + '/<path:filename>',
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')