当前位置 主页 > 网站技术 > 代码类 >

    flask框架蓝图和子域名配置详解

    栏目:代码类 时间:2020-01-25 15:08

    本文实例讲述了flask框架蓝图和子域名配置。分享给大家供大家参考,具体如下:

    蓝图

    在flask项目中,我们所有的url和视图函数都写在一个文件app.py中,但是当我们的项目大起来之后,这显然就不是一个合理的结构了。而蓝图就可以优雅的帮我们实现这个需求,对我们的项目进行分块。

    比如现在的豆瓣网,https://www.douban.com/,他分为好几个模块。

    有读书,电影,音乐,同城,FM等模块,假设我们也需要实现一个类似的网站,用过Django框架的朋友都知道,可以给每个模块新建一个app,然后相应模块的代码写在对应的app中,这样也很方便我们对代码的管理,和后期项目维护,但是在flask中呢。如果我们把所有的代码都放在app.py文件中的话,那么肯定不好管理和维护。所以我们需要对网站模块化,每个模块写在对应的为止。这里就会使用到我们的蓝图了。

    首先我们在项目的跟目录下新家一个包blueprints,用啦存放我们所有的蓝图(模块)。然后在这个包里面新建book.py,movie.py,music.py,FM.py文件,对应我们上面读书,电影,音乐,FM几个模块。

    然后我们在这些文件里面开始编写代码。

    book.py

    from flask import Blueprint
    book_bp = Blueprint('book',__name__)
    @book_bp.route('/book/')
    def index():
     return 'book index'
    
    

    movie.py

    from flask import Blueprint
    movie_bp = Blueprint('movie',__name__)
    @movie_bp.route('/movie/')
    def index():
      return 'movie index'
    
    

    music.py

    from flask import Blueprint
    music_bp = Blueprint('music',__name__)
    @music_bp.route('/music/')
    def index():
      return 'music index'
    
    

    FM.py

    from flask import Blueprint
    FM_bp = Blueprint('FM',__name__)
    @FM_bp.route('/fm/')
    def index():
      return 'FM index'
    
    

    代码解析

    Blueprint():实例化一个蓝图对象,第一个参数为我们蓝图的名字,第二个参数为蓝图这个拉努文件的位置,我们直接写__name__就可以了。所以其实蓝图的实例对象和app.py中的flask实例化对象app都一样,只是多了一个参数,蓝图的名字而已,使用起来都是一样的。 Blueprint(‘xxx',name).route():和app.route()用法一样,没有任何差别。

    这样,我们就在定义好了4个蓝图,然后我们需要在app.py中区注册蓝图。

    app.py

    from flask import Flask,url_for,jsonify,render_template
    from flask import views
    # 首先导入我们的蓝图
    from blueprints.movie import movie_bp
    from blueprints.FM import FM_bp
    from blueprints.music import music_bp
    from blueprints.movie import movie_bp
    app = Flask(__name__)
    # app.config['SERVER_NAME'] = 'xujin.com:5000'
    app.register_blueprint(movie_bp)
    app.register_blueprint(FM_bp)
    app.register_blueprint(music_bp)
    app.register_blueprint(movie_bp)
    if __name__ == '__main__':
      app.run()
    
    

    然后我们运行项目,输入对应的url,就能访问到我们的视图了。这样,我们就对我们的项目进行了模块化处理。方便我们的后期维护。

    1. url前缀

    有时候我们需要个一些模块下的视图函数添加一些url前缀,比如说当访问电影模块下面的视图的时候,url都有一个前缀movie,例如127.0.0.1:5000/movie/index/,127.0.0.1:5000/movie/list/。。。当然我们可以手动的在每一个视图函数之前添加movie前缀,但是这样肯定不是最好的选择。那么在flask中,有没有更好的实现方式呢?答案当然是有的。在我们初始化蓝图的时候,还有一个参数url_prefix,当我们指定这个参数之后,就会给我们的movie模块写的所有视图函数添加一个前缀了。