美文网首页
Flask蓝图使用子域名

Flask蓝图使用子域名

作者: 晓函 | 来源:发表于2016-11-20 12:53 被阅读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')
    

    相关文章

      网友评论

          本文标题:Flask蓝图使用子域名

          本文链接:https://www.haomeiwen.com/subject/dgxypttx.html