在讲如何使用蓝图前,我们先看看蓝图的作用:
蓝图作用:
用于将项目模块化、方便大型项目管理
我们先新建一个blueprit_demo项目,例图如下:
为了方便讲解蓝图如何使用,我跟大家举个例子!假设我们要做一个大型的门户网站,里面有新闻版块、汽车版块、美食版块.....等版块,如果把所有版块都放在主app文件中,随着项目越做越大,网站项目维护就很蛋疼。为了方便管理呢,我们新建一个blueprint包,例图如下:
然后在该包下新建新闻(news.py)、汽车(car.py)、美食(food.py)版块,例图如下:
选择news.py文件,在该文件输入以下代码
#从flask中导入蓝图
from flask import Blueprint
#实例化一个蓝图对象,第一个为蓝图名字,第二个参数为inport_name,跟flask项目中的inport_name一样
news_bp = Blueprint("news",__name__)
#news_bp用法跟app相似
@news_bp.route("/list")
def list():
return "list page"
@news_bp.route('/arctire')
def arctire():
return "arctire page"
OK,蓝图写好了,心急的小伙伴迫不及待的打开浏览器,输入127.0.0.1:5000/list,然后出现大大的几个字:Not Found!!嘿!!!我们不是写好了蓝图吗?为啥访问不了勒??原因就是我们写好了蓝图,并没有将蓝图注册到主app文件中。
既然知道了原因,我们就在主app文件(blueprint_demo.py)输入以下代码:
#从news.py文件中导入news_bp
from blueprint.news import news_bp
#将news_bp注册到app中
app.register_blueprint(news_bp)
blueprint_demo.py文件完整代码如下:
from flask import Flask
#从news.py文件中导入news_bp
from blueprint.news import news_bp
app = Flask(__name__)
#将news_bp注册到app中
app.register_blueprint(news_bp)
@app.route('/')
def index():
return "index page"
if __name__ == "__main__":
app.run(debug=True)
然后我们运行主app文件,打开浏览器输入http://127.0.0.1:5000/list,结果如下: