luci范例
转自:http://www.cnblogs.com/souroot/p/4511760.html
LuCI (Lua Configiration Interface) 是OpenWRT 的Web 管理介面。LuCI 是一个MVC (Model View Controller) framework,所以我们可以在LuCI 的基础上写Web 的应用程式。
第一个controller 模组
假设我们想做一件事:「当使用者浏览/cgi-bin/luci/myapp/mymodule/time.htm 时,便在网页上显示OpenWRT 目前的系统时间」。那么可以写一段程式码如下(mymodule.lua):
-- Save this to /usr/lib/lua/luci/controller/myapp/mymodule.lua
-- Browse to: /cgi-bin/luci/myapp/mymodule/time.htm module("luci.controller.myapp.mymodule", package.seeall) function index()
-- 定義節點, request 時會呼叫 action_time
page = entry({"myapp", "mymodule", "time.htm"}, call("action_time")) -- 沒有上層節點
page.dependent = false
-- 假如是葉節點, 就設成 true 避免錯誤
page.leaf = true
end function action_time()
luci.http.prepare_content("text/html")
luci.http.write("<h1>Hello LuCi</h1>")
luci.http.write("<h2>Current time: " .. os.date("%D %T") .. "</h2")
end
其中,以entry() 定义了一个节点,作用是「当使用者浏览/cgi-bin/luci/myapp/mymodule/time.htm 时,便会呼叫action_time() 函式」,而action_time() 函式则会负责产生一个显示目前系统时间的网页。
把mymodule.lua 放到/usr/lib/lua/luci/controller/myapp/mymodule.lua,然后浏览/cgi-bin/luci/myapp/mymodule/time.htm,就会看到底下的结果:
略
建立VIEW
跟PHP, ASP.NET, JSP 一样,LuCI 也有template 的功能,可以在HTML 里混用Lua Script 产生动态网页。底下做个示范。
首先,建立了一个template 档如下,并把它存到/usr/lib/lua/luci/view/myapp_mymodule/time.htm:
<!-- Save this to /usr/lib/lua/luci/view/myapp_mymodule/time.htm -->
<%+header%>
<h1>Hello LuCI</h1>
<h2>Current Time: <%= os.date("%D %T")%></h2>
<%+footer%>
接着写个controller 模组如下,把它存到/usr/lib/lua/luci/controller/myapp/mymodule.lua:
-- Save this to /usr/lib/lua/luci/controller/myapp/mymodule.lua
-- Browse to: /cgi-bin/luci/myapp/mymodule/ module("luci.controller.myapp.mymodule", package.seeall) function index()
-- 定義節點, 當作 myapp.mymodule.time.htm 的別名
page = entry({"myapp", "mymodule"},
alias("myapp", "mymodule", "time.htm"), "My Module")
page.dependent = false -- 定義節點, request 時會 render view/myapp_mymodule/time.htm
page = entry({"myapp", "mymodule", "time.htm"},
template("myapp_mymodule/time"), "Time")
page.dependent = false; page.leaf = true
end
略
LuCI 现在预设都是用bootstrap CSS frontend,time.htm 引入了header template,因此享受bootstrap 的好处,变得比较美观了。
暂除LuCI 模组暂存档
在学习写LuCI 模组时,有件特别注意的事。由于LuCI 会把module 暂存起来,就算你写的module 有做过变动,LuCI 也不会跑更新过后的版本。所以当你更新module 时,记得删除LuCI 的模组暂存档,这样LuCI 才会跑新版本的模组。
删除LuCI 模组暂存档的指令为:
rm /tmp/luci-indexcache /tmp/luci-modulecache/*
参考资料
HOWOT: Write Modules
luci范例的更多相关文章
- 对应sslocal的简易luci web界面
直接通过官方ss代码库安装的ss, 只有一个可执行的sslocal, 也没找到对应的luci-app, 所以就自己写了一个. 因为/etc/init.d/sslocal 和 /etc/config/s ...
- openwrt下部署adbyby去广告大师 免luci 带自启动,自动开启透明代理
最近朋友送了个360老路由器 C301,于是乎就掉进了智能路由器的坑, 玩智能路由器第一件事一定是去广告, 要么怎么对得起智能路由器- -! 路由器去广告当然首推广告屏蔽大师 www.adbyby.c ...
- C# 7.0 新功能代码范例
随着新版本的IDE Visual Studio 15 紧锣密鼓的开发中,2016年8月24日,微软发布了与之配套的C# 7.0 preview 的新特性. 其主要特性有: 内联声明out变量 (Out ...
- Information Management Policy(信息管理策略)的使用范例
基础知识 很多人都会定期收拾自己的书架或者抽屉,把里面过旧的资料拿走,为新的资料腾出空间来,这样既可以节省空间,而且当冗余资料过多的时候也会降低你查找的速度和效率.那么,在企业的SharePoint中 ...
- 开发OpenWrt路由器上LuCI的模块
[题外话] 学校里最近改造了校园网,要求必须用iNode验证,万幸的是路由器能刷OpenWrt,并且OpenWrt上有好多iNode认证的开源项目,比如njit8021xclient(以下简称njit ...
- 关于LuCi
好吧,又长见识了...相见恨晚的赶脚,恩,居然是我喜欢的lua.其主页在这里:http://luci.subsignal.org/ The initial reason for this projec ...
- Java学习笔记13---一个循环程序的设计范例
package welcome; import java.util.Scanner; /* * 一个循环程序的设计范例 * 首先编写仅执行一次的程序(当无循环时) * 循环的设计步骤: * 1.确定程 ...
- [liusy.api-SMJ]-创建工程范例 MAVEN archetype 学习阶段(一)
由于这个架构需要好多不同能力的工程,为了创建方便减少冗余,创建工程范例尤为重要 学习阶段: 参考资料 http://maven.apache.org/archetype/maven-archetype ...
- 通过 UDP 发送数据的简单范例
package j2se.core.net.udp; import java.io.IOException;import java.net.DatagramPacket;import java.net ...
随机推荐
- yml格式
是什么? yml文件扩展名是YAML的缩写,YAML于2001年出现,是一种数据描述语言,和xml类似 为什么用它? 我们在做javaweb项目的时候最常见的就是.xml配置文件和properitie ...
- JVM对象分配和GC分布【JVM】
最近在学习java基础结构,刚好学到了jvm,总结了以下并可以结合思维导图认识以下Jvm的对象: 栈:什么是栈? 先说一下栈的数据结构吧,栈它是一种先进后出的数据结构(FILO),跟队列刚好相反(先进 ...
- C#调用Excel报 error CS1969: 找不到编译动态表达式所需的一个或多个类型。是否缺少引用?
转自[http://blog.csdn.net/bodybo/article/details/43191319] 程序需要读取Exel文件,有如下代码段 object oMissing = Syste ...
- Hadoop-MR[会用]MR程序的运行模式
1.简介 现在很少用到使用MR计算框架来实现功能,通常的做法是使用hive等工具辅助完成.但是对于其底层MR的原理还是有必要做一些了解. 2.MR客户端程序实现套路 这一小节总结归纳编写mr客户端程序 ...
- NOIP 2012 Day2
tags: 扩展欧几里得 二分答案 查分 倍增 二分答案 贪心 NOIP categories: 信息学竞赛 总结 同余方程 借教室 疫情控制 同余方程 Solution 首先同余式可以转化为等式. ...
- jstorm系列-1:入门
一. Storm整体介绍 Storm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这 ...
- python中的偏函数partial
Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function).要注意,这里的偏函数和数学意义上的偏函数不一样. 在介绍函数参数的时候,我们讲到,通过 ...
- Majority Element——算法课上的一道题(经典)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- 【JBPM4】获取任务
示例代码: <?xml version="1.0" encoding="UTF-8"?> <process name="test&q ...
- vue2.0--组件通信(非vuex法)
写在前面: 1.父组件的data写法与子组件的data写法不同 //父组件 data:{ //对象形式 } //子组件 data:function(){ return { //函数形式 } } 2.引 ...