蓝图概念的简单介绍:
Flask 用 蓝图(blueprints) 的概念来在一个应用中或跨应用制做应用组件和支持通的模式。蓝图很好地简化了大型应用工做的方式,并提供给 Flask 扩展在应用上注册操做的核心方法。一个 Blueprint 对象与 Flask 应用对象的工做方式很像,但它确实不是一个应用,而是一个描述如何构建或扩展应用的 蓝图 。html
下面是我demo结构:flask
在我看来,有了蓝图能够将一个应用注册成不少模块,方便管理,和添加扩展。app
导入相应的模块,Blueprint中的三个参数,第一个能够本身随意命令,第二个通常都是__name__,
他指定了当前的flask应用,也就是当前个人app文件夹(也是一个包),第三个参数指定你存放,模板文
件的位置,这个主要看你你应用的目录结构,我喜欢只存放一个templates目录在app文件夹下,而后
使用相对路径。函数
from flask import Blueprint, render_template, abort, redirect, url_for from jinja2 import TemplateNotFound blog = Blueprint('blog', __name__, template_folder='../templates')
@blog.route('/index') def index(): try: return render_template("blog.html") except TemplateNotFound: abort(404)
@blog.route('/welcome') def welcome(): return "welcome to blog"
当时这样你并不能访问网页,由于你尚未注册蓝图,蓝图不是即插即用的url
在注册前必定要导入相应的蓝图,如代码中的admin和blog。spa
from flask import Flask from view.addmin import admin from view.blog import blog
app = Flask(__name__) app.register_blueprint(blog, url_prefix='/blog') app.register_blueprint(admin, url_prefix='/admin') if __name__ == "__main__": app.run(debug=True) # from werkzeug.serving import run_simple # run_simple('localhost', 5000, app)
访问相应的页面时,必定要将url_prefix中的前缀加上,好比要访问blog.html中的内容,要写成http://localhost/blog/index 的形式。debug
要想从一个页面跳转到另外一个页面,一般是redirect和url_for配合使用,因为咱们加入了蓝图,在访问时
咱们能够更加轻松code
url_for('blog.index')
具体代码以下:htm
from flask import Blueprint, render_template, abort, redirect, url_for from jinja2 import TemplateNotFoun blog = Blueprint('blog', __name__, template_folder='../templates')
@blog.route('/index') def index(): try: return redirect(url_for('blog.welcome')) except TemplateNotFound: abort(404)
@blog.route('/welcome') def welcome(): return "welcome to blog"
当你访问/blog/index的页面时,会自动帮你跳转到/blog/welcome的页面中。对象
以上大部份内容都借鉴自官方文档,若是有不明白的地方,能够自行查阅。