藍圖概念的簡單介紹:
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的頁面中。對象
以上大部份內容都借鑑自官方文檔,若是有不明白的地方,能夠自行查閱。