概要
- 什么是flask_appbuilder摆昧?
- 什么是superset击胜?
- Web實(shí)現(xiàn)框架
- 藍(lán)圖(Blueprint)的概念
- superset對flask_appbuilder的封裝細(xì)節(jié)體現(xiàn)
1.什么是flask_appbuilder?
- flask_appbuilder是flask的擴(kuò)展,便于迅速搭建一個Web應(yīng)用(帶有強(qiáng)大的用戶權(quán)限管理能力烧颖,高度配置化應(yīng)用)
2.什么是superset?
- superset可以看做flask_appbuilder的一層封裝,經(jīng)過封裝后簸州,?web開發(fā)人員能夠高效實(shí)現(xiàn)數(shù)據(jù)可視化鉴竭。
3.Web實(shí)現(xiàn)框架
MVC示意圖
結(jié)合superset代碼,從MVC?角度看:
- Model岸浑,依靠SQLAlchemy(強(qiáng)大且流行的ORM)
- View搏存,很重(含大量業(yè)務(wù)邏輯,由于有封裝好的很多基類矢洲,所以代碼量其實(shí)不大)
- Controller璧眠,很輕(幾乎僅僅用于路由)
以Menu中的Slice為例,看其簡要代碼:
superset/models/core.py (Model層)
class Slice(Model, AuditMixinNullable, ImportMixin):
"""A slice is essentially a report or a view on data"""
__tablename__ = 'slices'
id = Column(Integer, primary_key=True)
slice_name = Column(String(250))
... # 表相應(yīng)的字段读虏,及相關(guān)方法屬性
superset/views/core.py (View層)
class SliceModelView(SupersetModelView, DeleteMixin): # noqa
datamodel = SQLAInterface(models.Slice)
list_title = _('List Charts')
show_title = _('Show Chart')
add_title = _('Add Chart')
edit_title = _('Edit Chart')
can_add = False
label_columns = {
'datasource_link': _('Datasource'),
}
... # 各種對父類屬性的重寫
appbuilder.add_view(
SliceModelView,
'Charts',
label=__('Charts'),
icon='fa-bar-chart',
category='',
category_icon='')
由于superset的處理责静,Slice會隱含有l(wèi)ist,show,edit,delete等相應(yīng)的關(guān)聯(lián)處理(也就是Control層),業(yè)務(wù)開發(fā)人員需要根據(jù)需求做改動即可盖桥。
4.藍(lán)圖(Blueprint)的概念
藍(lán)圖是flask中的概念灾螃,通過藍(lán)圖實(shí)現(xiàn)在一個應(yīng)用中構(gòu)建應(yīng)用組件以及支持通用模式。
Blueprint示意圖
如上圖所示揩徊,main和auth就是通過藍(lán)圖來實(shí)現(xiàn)模塊的劃分腰鬼,這樣開發(fā)者可以便于開發(fā)各自的模塊。
應(yīng)用Blueprint簡要示例代碼
from flask import Blueprint
main = Blueprint('main', __name__)
app.registrer_blueprint(main)
@main.route('/', methods=['GET', 'POST'])
def index():
pass
superset/connectors/sqla的底層應(yīng)該就是用到了藍(lán)圖的概念塑荒。
業(yè)務(wù)上對應(yīng)數(shù)據(jù)源頭的相關(guān)內(nèi)容的CRUD操作顯示熄赡。
5.superset對flask_appbuilder的封裝細(xì)節(jié)體現(xiàn)
- 關(guān)于config
superset/config.py就是flask_appbuilder中所說的configuration,高度配置化。(配置項(xiàng)有數(shù)據(jù)庫地址齿税,數(shù)據(jù)庫訪問超時設(shè)置等) - 關(guān)于has_access
觀察源碼會發(fā)現(xiàn)彼硫,superset/utils.py中定義的has_access與flask_appbuilder.security.decorators中定義的核心區(qū)別在于,superset加了一段代碼:
elif g.user and g.user.get_id() and g.user.is_authenticated():
return redirect('/apply_permissions')
這樣強(qiáng)化了建權(quán)的控制凌箕。
- ...
參考文檔:
http://flask-appbuilder.readthedocs.io/en/latest/quickfiles.html
http://www.reibang.com/p/95b584e4f76e