Hue二次开发(一):创建App

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 f
calculator/setup.py                                 # distutils setup file
calculator/src/calculator/__init__.py               # main src module
calculator/src/calculator/forms.py
calculator/src/calculator/models.py
calculator/src/calculator/settings.py               # app metadata setting
calculator/src/calculator/urls.py                   # url mapping
calculator/src/calculator/views.py                  # app business logic
calculator/src/calculator/templates/index.mako
calculator/src/calculator/templates/shared_components.mako

# Static resources
calculator/src/calculator/static/art/calculator.png # logo
calculator/src/calculator/static/css/calculator.css
calculator/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 calculator
Updating 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 calculator
calculator           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, commonfooter
from 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, commonfooter
from 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 render
import datetime

def index(request):
  return render('index.mako', request, dict(date=datetime.datetime.now()))

我们修改成这样:

#!/usr/bin/env python

from desktop.lib.django_util import render
import operator

OPS=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

时间: 2024-08-29 12:29:22

Hue二次开发(一):创建App的相关文章

ecmall 二次开发 如何修改商品链接创建方式?

问题描述 ecmall 二次开发 如何修改商品链接创建方式? 请问如何修改商品链接创建方式? 例如: 默认创建方式www.xxx.com/index.php?app=goods&id=1www.xxx.com/goods/1 (伪静态) 商品名称:iphone 6 16/64GB 1GB RAM店铺名称:apple商品ID:1(系统依照顺序自动生成) www.xxx.com/iphone+6+16+64GB+1GB+RAM+apple+1 谢谢您.

二维码-新手开发andriod pad app

问题描述 新手开发andriod pad app 我没有开发过andriod app,现在想把自己开发的一个exe,改成成app,请大家指导下,最好有类似框架或者代码,时间要求比较急,非常感谢大家!要求:用户输入账号密码登录,然后用手机摄像头扫描一个产品的二维码,到SQL Server数据库得到产品文档信息编号,这个文档是一个pdf文件,然后在pad上打开.打开后可以在旁边输入一些用户使用的信息和这份文档关联,存储到数据表中.请大家多帮忙,最好有框架,我可以自己填,新手不知道如何下手,非常感谢!

实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目

 系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构  实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能 实战使用Axure设计App,使用WebStorm开发(6)

ios-Delphi XE8开发FMX 的App,IOS持续使用一段时间程序被系统杀了。。什么原因??

问题描述 Delphi XE8开发FMX 的App,IOS持续使用一段时间程序被系统杀了..什么原因?? 程序主要用于数据库查询,有40个Form,在安卓里是完全没问题的,但是到ios里就会闪退.delphi官方说一套代码,多平台通用,结果悲剧了.检查代码,感觉没有错误,在安卓下一只查询数据也不会闪退.可到了Iphon6上,刚开始没问题,多查询几次就会闪退,郁闷死我了.后来以为窗体太多是不是太占内存,就改代码,除了主窗体,其他窗体一律动态创建,关闭窗体时候马上Free:Clientdataset

udp-android应用开发在创建DatagramSocket对象时绑定不 了端口

问题描述 android应用开发在创建DatagramSocket对象时绑定不 了端口 package com.example.clientudp; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import android.os.Bundle; import android.app.Activity;

Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法

原文:Win10 IoT C#开发 2 - 创建基于XAML的UI程序 及 应用的三种部署方法 Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,与以往的Windows版本不同,是为物联网设备专门设计的,硬件也不仅仅限于x86架构,同时可以在ARM架构上运行. 上一章我们讲了Raspberry安装Win10 IoT系统及搭建Visual Studio 2015开发环境的方法(http://www.cnblogs.com/cloudtech/p/5562120.html)

ios企业账户-关于IOS企业开发账号发布APP的问题

问题描述 关于IOS企业开发账号发布APP的问题 需要发布出App给未注册UDID的机器使用测试,第一次进行企业开发账号发布,有几点疑问: 1.是否一定需要企业账户(本人手上只有企业账户下的admin账户) 2.使用admin账户在创建provisioning profile时没有In-House方式,是否是只有企业账户才能选择? 3.在打包发布时选择Save for Enterprise Deployment会提示增加账户,是否需要企业账户 开发环境是xcode6.2 解决方案 我这里就是企业

微信二次开发:从媒体到产品 如何使用?

硅谷网讯 腾讯副总裁被誉为微信之父的张小龙曾一语道破微信的真实所在,"你如何使用微信,决定了微信对你而言,它到底是什么." "我们判断,微信在这个阶段还是媒体,是对外界的信息输出渠道,也是了解用户的渠道.目前,我们公司专门建了一个群,里面都是我们的核心忠实用户与产品经理,让我们的产品经理真实了解用户的需求.从这个角度看,营销的价值目前还未完全显现."任鑫说. 其实,目前很多企业账号实际做的更多是媒体的工作,消息推送亦是如此.比如发布一些美容健康类的常识.服饰类的搭配

安卓(Android)开发之统计App启动时间_Android

前言 作为 Android 开发者,想必多多少少要接触启动速度优化相关的事情,当用户越来越多,产品的功能也随着迭代越来越多,App 逐渐变得臃肿是一件很常见的现象,甚至可以说是不可避免的现象,随之而来的工作就是优化 App 性能,其中最主要的一项就是启动速度优化.但本文的主角并不是启动速度优化,而是启动时间统计. 一.启动类型 工欲善其事,必先利其器.想要优化 App 的启动速度,必须有准确衡量启动时间的方法,否则优化完之后效果怎样,自己都不知道,说出去别人也不信服不是.在做 App 启动时间统