flask藍圖的簡單介紹

flask藍圖的簡單介紹

藍圖概念的簡單介紹:
Flask 用 藍圖(blueprints) 的概念來在一個應用中或跨應用製做應用組件和支持通的模式。藍圖很好地簡化了大型應用工做的方式,並提供給 Flask 擴展在應用上註冊操做的核心方法。一個 Blueprint 對象與 Flask 應用對象的工做方式很像,但它確實不是一個應用,而是一個描述如何構建或擴展應用的 藍圖 。html

下面是我demo結構:
圖片描述flask

爲何要使用藍圖?

  • 把一個應用分解爲一個藍圖的集合。這對大型應用是理想的。一個項目能夠實例化一個應用對象,初始化幾個擴展,並註冊一集合的藍圖。
  • 以 URL 前綴和/或子域名,在應用上註冊一個藍圖。 URL 前綴/子域名中的參數即成爲這個藍圖下的全部視圖函數的共同的視圖參數(默認狀況下)。
  • 在一個應用中用不一樣的 URL 規則屢次註冊一個藍圖。
  • 經過藍圖提供模板過濾器、靜態文件、模板和其它功能。一個藍圖不必定要實現應用或者視圖函數。
  • 初始化一個 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

構造URL

要想從一個頁面跳轉到另外一個頁面,一般是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的頁面中。對象

以上大部份內容都借鑑自官方文檔,若是有不明白的地方,能夠自行查閱。

相關文章
相關標籤/搜索