Hue二次开发(一):创建App
来源:互联网 发布:软件测试培训网站 编辑:程序博客网 时间:2024/05/10 11:41
Hue二次开发(一):创建App
一、版本
基于2.5版本的源码。
二、技术架构
三、编译
$ git clone http://github.com/cloudera/hue.git$ cd hue$ make apps
Hue会将所有依赖都打在自己的build目录里。需要maven,依赖jdk1.6版本。
四、例子
4.1创建一个app
我们创建一个自己的空app,会自动生成目录结构:
$ ./build/env/bin/hue create_desktop_app calculator$ find calculator -type fcalculator/setup.py # distutils setup filecalculator/src/calculator/__init__.py # main src modulecalculator/src/calculator/forms.pycalculator/src/calculator/models.pycalculator/src/calculator/settings.py # app metadata settingcalculator/src/calculator/urls.py # url mappingcalculator/src/calculator/views.py # app business logiccalculator/src/calculator/templates/index.makocalculator/src/calculator/templates/shared_components.mako# Static resourcescalculator/src/calculator/static/art/calculator.png # logocalculator/src/calculator/static/css/calculator.csscalculator/src/calculator/static/js/calculator.js
4.2安装app
setup.py是distutils用于注册app的入口点。用于打包?app_reg.py管理注册app.使用如下命令进行注册:
$ ./build/env/bin/python tools/app_reg/app_reg.py --install calculator=== Installing app at calculatorUpdating registry with calculator (version 0.1)--- Making egg-info for calculator$ ./build/env/bin/python tools/app_reg/app_reg.py --list 2>&1 | grep calculatorcalculator 0.1 /Users/philip/src/hue/calculator
Hue使用virtualenv隔离和管理python依赖包。
4.3调试运行
$ build/env/bin/hue runserver_plus
runserver_plus开启了Werkzeug debugger。方便调试。访问 http://localhost:8000 可以看到我们的新app:
4.4定制视图和模板
自动生成的模板calculator/src/calculator/templates/index.mako是这样的:
<%!from desktop.views import commonheader, commonfooter %><%namespace name="shared" file="shared_components.mako" />${commonheader("Calculator", "calculator", user, "100px")}${shared.menubar(section='mytab')}## Use double hashes for a mako template comment## Main body<div class="container-fluid"> <h2>Calculator app is successfully setup!</h2> <p>It's now ${date}.</p></div>${commonfooter(messages)}
注意
:这里用了mako模板,如果后缀为.html,hue会使用django的模板引擎去渲染。这里编码有问题,改成unicode,才能正常显示header和footer:
<%!from desktop.views import commonheader, commonfooterfrom django.utils.translation import ugettext as _%><%namespace name="shared" file="shared_components.mako" />${commonheader("Calculator", "calculator", user, "100px")| n,unicode }${shared.menubar(section='mytab')}## Use double hashes for a mako template comment## Main body<div class="container-fluid"> <h2>Calculator app is successfully setup!</h2> <p>It's now ${date}.</p></div>${ commonfooter(messages) | n,unicode }
好了能正常显示,我们将修改模板,添加计算页面:
<%!from desktop.views import commonheader, commonfooterfrom django.utils.translation import ugettext as _%><%namespace name="shared" file="shared_components.mako" />${commonheader("Calculator", "calculator", user, "100px")| n,unicode }${shared.menubar(section='mytab')}## Use double hashes for a mako template comment## Main body<div class="container-fluid"> % if op: <span>${a} ${op} ${b} = ${result}</span> % endif <form action=${url("calculator.views.index")} method=POST> <input name="a"> <input type="radio" name="op" value="add">+</input> <input type="radio" name="op" value="subtract">-</input> <input type="radio" name="op" value="multiply">*</input> <input type="radio" name="op" value="divide">/</input> <input name="b"> <input type="submit" value="Calculate"> </form></div>${ commonfooter(messages) | n,unicode }
是这个样子了:
模板搞定了,我们接着要处理表单提交过来的数据
自动生成的calculator/src/calculator/views.py是这样的:
from desktop.lib.django_util import renderimport datetimedef index(request): return render('index.mako', request, dict(date=datetime.datetime.now()))
我们修改成这样:
#!/usr/bin/env pythonfrom desktop.lib.django_util import renderimport operatorOPS=dict(add=operator.add, subtract=operator.sub, multiply=operator.mul, divide=operator.truediv)OP_STRING=dict(add="+", subtract="-", multiply="*", divide="/")def index(request): if "op" not in request.REQUEST: return render('index.mako', request, dict()) a = float(request.REQUEST["a"]) b = float(request.REQUEST["b"]) op = request.REQUEST["op"] result = OPS[op](a, b) return render('index.mako', request, dict(a=a, b=b, op=OP_STRING[op], result=result))
五、调试Django
我们故意少输入一个,点击计算会出现错误:
可以使用调试控制台,和代码展示。这就是runserver_plus的方便之处了。
六、Reference
http://cloudera.github.io/hue/docs-2.5.0/sdk/sdk.html
0 0
- Hue二次开发(一):创建App
- Hue二次开发(一):创建App
- Hue(一)介绍
- hue的定制与二次开发
- Ecshop二次开发:如何创建一个自定义页面(一)
- Ecshop二次开发:如何创建一个自定义页面(一)
- android 二次开发 莫名其妙问题一(文件夹创建方式)
- MasterCAM二次开发(一)
- Cad二次开发(一)
- Nutch二次开发总结(一)
- Nutch二次开发总结(一)
- GoogleEarth二次开发(资料一)
- ArcGIS二次开发入门(一)
- ArcGIS二次开发入门(一)
- ecshop二次开发新发现(一)
- Openstack -- Horizon二次开发(一)
- DTcms二次开发心得(一)
- Hue(二)安装
- Implementation of +,-,*,/ with bitwise operator
- Boto Config File
- mysql及创建不同端口实例(方法二)
- android系统如何自适应屏幕大小
- eclipse中编码格式的设置
- Hue二次开发(一):创建App
- C语言中""和{""}的区别
- Struts2常用标签总结
- chef安装openstack文档
- 世界杯10大影帝你造么?演技派的天下
- asp.net web api帮助文档的说明
- vim编辑器的使用
- 发现 IOS 如UIButton 事件处理函数参数和不带参数写法不一样
- 截取字符串长度 不算html代码的长度