蓝图就是把app的各个路由整合,或者说把这个app切分成块,它实现了MVC中的controller的功能。
接下来的例子是模拟了一个场景:
如果我们需要向自己的网站添加一个blog的模块,这样我们就可以把所有和bolg相关的路由全部放到一起,而不会影响到其他的模块
blog_blueprint = Blueprint(
'blog', # 定义蓝图名称
__name__, # 传入包名
template_folder='templates/blog', # 定义蓝图渲染的文件路径
url_prefix="/blog" # 将这个前缀之间添加在蓝图的路由之前
)
替换app.route为blog_blueprint.route
@blog_blueprint.route('/user/<string:username>')
def user(username):
user = User.query.filter_by(username=username).first_or_404() # 根据username获得username
posts = user.posts.order_by(Post.publish_date.desc()).all() # 获得username对应的post按降序排列
recent, top_tags = sidebar_data()
由于我们在‘blog’的蓝图中添加了user路由,所以现在发生的改变是
user的路由从/user/<string:username>
变成了1./blog/user/<string:username>
2.静态文件的路径也从templates/
变成了templates/blog