参考:http://www.pythondoc.com/flask/blueprints.html
Flask 使用了 蓝图 的概念在一个应用或者跨应用中构建应用组件以及支持通用模式。 蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。 一个 Blueprint
对象与 Flask
应用对象的工作方式很像,但它确实不是一个应用, 而是一个描述如何构建或扩展应用的 蓝图 。
蓝图的作用:
一般大小的项目使用此如下结构即可:
flaskBluePrint01 项目
-app1 程序子应用
-static 静态文件
-templates 模板文件
-views 视图模块
-account.py 视图文件
-admin.py
-user.py
- __init__.py 初始化文件:注册应用,实例化对象,使用蓝图
-manage.py 项目启动文件
步骤如下:
1.创建app
app1/ __ init _ _.py
from flask import Flask
app = Flask(__name__)
2.创建启动文件
manage.py
from app1 import app
if __name__ == '__main__':
app.run()
3.创建子视图
app1/views/ account.py
from flask import Blueprint
ac = Blueprint('ac', __name__)
@ac.route('/login')
def login():
return 'login'
@ac.route('/logout')
def logout():
return 'logout'
app1/views/admin.py
from flask import Blueprint
ad = Blueprint('ad', __name__)
@ad.route('/home')
def home():
return 'home'
app1/views/ user.py
from flask import Blueprint
us = Blueprint('us', __name__)
@us.route('/info')
def info():
return 'info'
4.注册蓝图
app/ __ init _ _.py
from flask import Flask
app = Flask(__name__)
from .views import account
from .views import admin
from .views import user
app.register_blueprint(account.ac)
app.register_blueprint(admin.ad)
app.register_blueprint(user.us)
对于一些大型项目可以使用以下数据结构
注:
1.如果在 templates 中存在和 templates_users 有同名模板文件时, 则系统会优先使用 templates 中的文件 ;
2.如果是前后端分离项目,则不需要static和templates静态文件夹。
使用步骤如下:
1.创建app
app/ __ init _ _.py
from flask import Flask
app = Flask(__name__)
2.创建启动文件
manage.py
from app1 import app
if __name__ == '__main__':
app.run()
3.创建子视图子应用和子视图
app1/admin/_ _ init_ _.py
from flask import Blueprint
ad=Blueprint('ad', __name__)
from . import views
app1/admin/views.py
from . import ad
@ad.route('/home')
def home():
return 'home'
app1/web/_ _ init_ _.py
from flask import Blueprint
wb=Blueprint('wb', __name__)
from .views import *
app1/web/views.py
from . import wb
@wb.route('/login')
def login():
return 'login'
@wb.route('/logout')
def logout():
return 'logout'
4.注册蓝图
app/ __ init _ _.py
from flask import Flask
app = Flask(__name__)
app.debug=True
from .admin import ad
from .web import wb
app.register_blueprint(ad)
app.register_blueprint(wb)
如下,修改app1|views| admin.py文件
from flask import Blueprint
ad = Blueprint('ad', __name__, url_prefix='/admin')
@ad.route('/home')
def home():
return 'home'
也可以在注册时候添加,如下:
from flask import Flask
app = Flask(__name__)
from .views import account
from .views import admin
from .views import user
app.register_blueprint(account.ac)
app.register_blueprint(admin.ad, url_prefix="/admin")
app.register_blueprint(user.us)
一个蓝图可以通过 static_folder 关键字参数提供一个指向文件系统上文件夹的路 径,来公开一个带有静态文件的文件夹。这可以是一个绝对路径,也可以是相对于蓝图文件夹的路径:
ad=Blueprint('ad', __name__, static_folder='static_admin')
指定蓝图使用的模板文件夹:
ad=Blueprint('ad',
__name__,
static_folder='static_admin',
template_folder='templates_admin')
当你想要从一个页面链接到另一个页面,你可以像通常一个样使用 url_for()
函数,只是你要在 URL 的末端加上蓝图的名称和一个点(.
)作为前缀:
url_for('admin.index')
此外,如果你在一个蓝图的视图函数或是模板中想要从链接到同一蓝图下另一个端点, 你可以通过对端点的只加上一个点作为前缀来使用相对的重定向:
url_for('.index')