若是你打算改造和定制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权限,这样一来不具备管理权限,又能够正常浏览