在flask中使用藍圖將路由分開寫在不同檔案

在flask中使用藍圖將路由分開寫在不同檔案

Flask 用 藍圖(blueprints) 的概念來在一個應用中或跨應用製作應用元件和支援通用的模式。藍圖很好地簡化了大型應用工作的方式,並提供給 Flask 擴充套件在應用上註冊操作的核心方法。一個Blueprint 物件與Flask
應用物件的工作方式很像,但它確實不是一個應用,而是一個描述如何構建或擴充套件應用的藍圖

Flask 中的藍圖為這些情況設計:

  • 把一個應用分解為一個藍圖的集合。這對大型應用是理想的。一個專案可以例項化一個應用物件,初始化幾個擴充套件,並註冊一集合的藍圖。
  • 以 URL 字首和/或子域名,在應用上註冊一個藍圖。 URL 字首/子域名中的引數即成為這個藍圖下的所有檢視函式的共同的檢視引數(預設情況下)。
  • 在一個應用中用不同的 URL 規則多次註冊一個藍圖。
  • 通過藍圖提供模板過濾器、靜態檔案、模板和其它功能。一個藍圖不一定要實現應用或者檢視函式。
  • 初始化一個 Flask 擴充套件時,在這些情況中註冊一個藍圖。

Flask 中的藍圖不是即插應用,因為它實際上並不是一個應用——它是可以註冊,甚至可以多次註冊到應用上的操作集合。為什麼不使用多個應用物件?你可以做到那樣(見應用排程
),但是你的應用的配置是分開的,並在 WSGI 層管理。

藍圖作為 Flask 層提供分割的替代,共享應用配置,並且在必要情況下可以更改所註冊的應用物件。它的缺點是你不能在應用建立後撤銷註冊一個藍圖而不銷燬整個應用物件。

以上內容來自Flask0.10.1文件

測試專案結構:


 user.py:

#coding:utf-8
#user
from flask import Blueprint, render_template, redirect
user = Blueprint('user',__name__)
@user.route('/index')
def index():
return render_template('user/index.html')
@user.route('/add')
def add():
return 'user_add'
@user.route('/show')
def show():
return 'user_show'

admin.py:

# coding:utf-8
#admin.py
from flask import Blueprint,render_template, request
admin = Blueprint('admin',__name__)
@admin.route('/index')
def index():
return render_template('admin/index.html')
@admin.route('/add')
def add():
return 'admin_add'
@admin.route('/show')
def show():
return 'admin_show'

view.py:

# coding:utf-8
from flask import Flask,request,render_template
from admin.admin import admin
from user.user import user
app=Flask(__name__)
app.register_blueprint(admin,url_prefix='/admin')
app.register_blueprint(user, url_prefix='/user')
if __name__ == '__main__':
app.run()