若是你打算改造和定製caravel,這篇文章可能對你有幫助javascript
上邊的這張圖列出了caravel用到的部分技術(由Wappalyzer分析得出)css
包括:html
採用python的Flask框架(當前版本是Flask 0.11.10,caravel版本是0.10.0)前端
技術棧的細節能夠經過翻閱源碼庫獲得java
查閱caravel的項目頁咱們能夠知道其技術棧構成,python和javascript分別支撐先後端,python佔據大半代碼量python
查閱源碼庫中的setup.py,咱們能夠知道項目依賴react
咱們忽視工具型的庫,對核心庫作個簡要介紹jquery
Simple and rapid application development framework, built on top of Flask. Includes detailed security, auto CRUD generation for your models, google charts and much more.webpack
flask-appbuilder是caravel的項目骨架,若是想定製深度caravel,建議認真讀完flask-appbuilder的文檔git
更多介紹能夠參考flaskappbuilder.pythonanywhere.com/或者Introduction
一些簡單的案例能夠參考這裏examples和Flask-AppBuilder-Skeleton
flask-appbuilder給我感受像是把flask的工具鏈作了整合,使其功能全面(通往django之路?)
關於pandas的介紹咱們引這篇文章:
Pandas是python的一個數據分析包,最初由AQR Capital Management於2008年4月開發,並於2009年末開源出來,目前由專一於Python數據包開發的PyData開發team繼續開發和維護,屬於PyData項目的一部分。Pandas最初被做爲金融數據分析工具而開發出來,所以,pandas爲時間序列分析提供了很好的支持。 Pandas的名稱來自於面板數據(panel data)和python數據分析(data analysis)。panel data是經濟學中關於多維數據集的一個術語,在Pandas中也提供了panel的數據類型
SQLAlchemy是Python社區中最普遍使用的ORM工具,底層而強大
SQLAlchemy的理念是,SQL數據庫的量級和性能重要於對象集合;而對象集合的抽象又重要於表和行
關於sqlalchemy的更多細節,能夠參考個人這篇文章
caravel提供命令行工具caravel
,項目的建立,demo的加載都由改指令負責,例如:
# Create default roles and permissions caravel init # Load some data to play with caravel load_examples # Start the web server on port 8088 caravel runserver -p 8088
咱們知道setup.py裏的scripts將被註冊爲命令行工具(參考 Installing Scripts),caravel
即是註冊自這裏
從源碼中咱們看到scripts=['caravel/bin/caravel']
,按圖索驥找到入口:caravel
從中咱們鏈接到caravel(caravel runserver)服務跑起來時各個參數的意義
當咱們用-d參數運行caravel runserver時,咱們並未將wsgi app跑在gunicorn,若是是生產使用,應該去掉-d
若是咱們有興趣跟蹤或定製caravel init(建立默認角色和權限)和caravel load_example的執行流程,跟蹤相應函數便可
由caravel runserver
跑起來的web服務的相關信息:
接下來咱們開始分析caravel:app
,這是整個項目的核心所在
由python模塊相關的知識(建議參考《learning python》),咱們知道from caravel import app
中,當caravel是目錄是,app來自caravel/init.py
這其實是Flask-AppBuilder常見的項目組織形式 ,能夠參考這個簡要的例子,相關解釋看這篇文檔
要想了解caravel的項目骨架,必須通讀一遍flask-appbuilder的文檔
經過閱讀flask-appbuilder的文檔,咱們瞭解到caravel實際是Flask-AppBuilder的一個具體應用(app),因此咱們能夠用fabmanager來控制caravel,諸如
# Create an admin user fabmanager create-admin --app caravel fabmanager list-users --app caravel fabmanager list-views --app caravel
經過閱讀Model Views (Quick How to),咱們瞭解了caravel的項目骨架和model相關的知識,和django十分類似,包括管理CURD機制也和django admin極其類似,django admin的確是個耀眼的設計,被借鑑卻是不奇怪。
這篇文章還提到ModelView最終會暴露出 REST API,並且帶有權限驗證,方面你作各類粒度的控制 ! 這個設計比django admin還漂亮,驚爲天人
相關細節參考Exposed methods
咱們到caravel中一試,徹底可用:
caravel的默認配置爲config,咱們可能對其中的一些配置項感興趣
這些變量的自說明性很好,就不解釋了
建立caravel_config.py,經過在PYTHONPATH裏添加caravel_config.py所在目錄的路徑
至於如何修改PYTHONPATH,個人作法是修改~/.bash_profile
,添加
export PYTHONPATH=/home/wwj/caravel_dev
以後須要退出shell,再進入才生效
個人caravel_config.py在/home/wwj/caravel_dev目錄下
啓動caravel runserver -d,便可看到定製化的caravel
點擊dashboard裏Edit the dashboard'css
按鈕,以後你能夠選擇不一樣的主題,方然也能夠添加你本身css樣式
caravel使用flask-appbuilder構建項目骨架,flask-appbuilder採用了bootswatch來定製主題樣式,能夠經過APP_THEME變量來改變主題,可選主題參考bootswatch.com,我偏好slate主題,slate對應的配置爲APP_THEME = "slate.css"
具體的配置選項參考:examples/oauth/config.py
前頭說到caravel使用flask-appbuilder來構建項目骨架,因此flask-appbuilder的配置參數,對caravel有效,具體配置參考:flask-appbuilder config
首先你須要修改LANGUAGES變量的默認值,默認不包含漢語,當前(2016-07-26)默認安裝的caravel版本爲caravel-0.10.0,這個版本的源碼不帶有翻譯包(translations), 若是你指望作漢化的話,須要手動將translations/zh/LC_MESSAGES
目錄放到package安裝路徑下
如下是個人漢化文件,在目錄下執行如下代碼便可
wget https://raw.githubusercontent.com/wwj718/caravel/master/caravel/translations/zh/LC_MESSAGES/messages.po wget https://raw.githubusercontent.com/wwj718/caravel/master/caravel/translations/zh/LC_MESSAGES/messages.mo
目前漢化包還不完備,以後有時間,我想維護一個caravel_cn
的項目,作些本地化的工做,包括經常使用前端庫的國內cdn和google字體之類的本地化,有興趣的小夥伴能夠一塊兒
默認的認證系統爲AUTH_TYPE = AUTH_DB
,咱們能夠將其配置爲其餘選項,諸如:AUTH_REMOTE_USER,AUTH_OID,AUTH_LDAP以及AUTH_OAUTH,配置爲OAuth時,須要安裝Flask-OAuthlib
,以後flask-appbuilder和Flask-OAuthlib有一個整合,若是你須要使用本身的oauth provider,可能須要處理下這部分
另,把用戶設置爲public,會致使沒法登錄(錯誤信息爲:Access is Denied for: can_welcome)。建議給新用戶alpha權限,這樣一來不具備管理權限,又能夠正常瀏覽