LUCI简单说明教程

上传人:宝路 文档编号:6835680 上传时间:2017-09-14 格式:DOC 页数:6 大小:37.50KB
返回 下载 相关 举报
LUCI简单说明教程_第1页
第1页 / 共6页
LUCI简单说明教程_第2页
第2页 / 共6页
LUCI简单说明教程_第3页
第3页 / 共6页
LUCI简单说明教程_第4页
第4页 / 共6页
LUCI简单说明教程_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《LUCI简单说明教程》由会员分享,可在线阅读,更多相关《LUCI简单说明教程(6页珍藏版)》请在金锄头文库上搜索。

1、LUCI 这个在百度上搜索除了一篇我的百度文库 luci 的介绍文章之外,前三页都是些不知所云的名词(足见百度在专业领域的搜索之烂) ,我却在大学毕业的大半年的大部分时间里与它纠结,由于开始的发懵到后来逐渐感觉到这家伙还很好玩的,现在就把我对 luci 的浅显认识介绍给大家。官网:http:/luci.subsignal.org/有关 luci 的各个方面,你几乎都可以从这里获得,当然,只是浅显的获得,luci 的文档写的还算比较全,但是写的稍显简略,开始看的时候会有一点不知所措。UCI 熟悉 openwrt 的人都会有所了解,就是 UnifiedConfigurationInterface

2、的简称,而 luci这个 openwrt 上的默认 web 系统,是一个独立的由严谨的德国人开发的 web 框架,是 LuaConfigurationInterface 的简称,如果在您的应用里,luci 是对 openwrt 的服务,我们就有必要做一下 uci 的简介,我这里就不说了,见链接:http:/.hk/url?sa=t&source=web&cd=5&ved=0CEMQFjAE&url=http%3A%2F%2Fnbd.name%2Fopenwrt-fosdem-09.pdf&ei=h52iTcXvOcrMcJ-xxOwD&usg=AFQjCNGFhumCIgS5tK_mDJ2dD

3、FU4qsskfQ有的时候,我们开发的 luci 是在自己的 LinuxPC 上开发,在普通的 linux 上,一般是没有uci 命令的,为了开发方便,可以手动编译一下,方法见链接:https:/forum.openwrt.org/viewtopic.php?id=15243OK,之前罗里罗嗦的说了很多,现在就进入正题,进入正题的前提是你已经 makeinstall 正确的安装了 lua ,luci ,以及编译好链接了相关的 so(如果你需要,比如 uci.sonixio.so) ,以及 makeinstall 正确 webserver, (我用的 webserver 是 thttpd,也编译

4、过mongoose,lighttpd,在这三个之中,lighttpd 是功能最完善的,mongoose 是最小巧的) 。进入正题:一:luci 的启动在 webserver 中的 cgi-bin 目录下,运行 luci 文件(权限一般是 755) ,luci 的代码如下:1#!/usr/bin/lua -cgi 的执行命令的路径2requireluci.cacheloader -导入 cacheloader 包3requireluci.sgi.cgi -导入 sgi.cgi 包4luci.dispatcher.indexcache=/tmp/luci-indexcache -cache 缓存路

5、径地址5luci.sgi.cgi.run() -执行 run 方法,此方法位于*/luci/sgi/cgi.lua 中run 方法的主要任务就是在安全的环境中打开开始页面(登录页面) ,在 run 中,最主要的功能还是在 dispatch.lua 中完成。运行 luci 之后,就会出现登录界面:-bash-4.0#pwd/var/www/cgi-bin-bash-4.0#./luciStatus:200OKContent-Type:text/html;charset=utf-8Cache-Control:no-cacheExpires:0/*somehtmlcode*/如果你成功的运行了 lu

6、ci 就说明你的 luci 框架成功的跑了起来。二:LUCI 的 MVC1:用户管理:在 luci 的官方网站说明了 luci 是一个 MVC 架构的框架,这个 MVC 做的可扩展性很好,可以完全的统一的写自己的 html 网页,而且他对 shell 的支持相当的到位, (因为 luci是 lua 写的,lua 是 C 的儿子嘛, 与 shell 是兄弟) 。在登录界面用户名的选择很重要,luci 是一个单用户框架,公用的模块放置在*/luci/controller/下面,各个用户的模块放置在*/luci/controller/下面对应的文件夹里面,比如 admin 登录,最终的页面只显示/l

7、uci/controller/admin 下面的菜单。这样既有效的管理了不同管理员的权限。2:controller 文件夹下的 lua 文件说明:(以 mini 用户为例)在 mini 目录下面,会有一个 index.lua 文件,简略的代码如下:这个文件定义了 node,最外面的节点,最上层菜单的显示等等。在其他的 lua 文件里,定义了其他菜单的显示和 html 以及业务处理路径。每个文件对应一个菜单相。例如 system.lua 文件mudel 是对应文件的,function index 定义了菜单,比如这一句 entry(mini,system,reboot,call(action_r

8、eboot),i18n(reboot),100)第 1 项为菜单入口:mini,system,reboot,mini 是最上层的菜单,即为用户项,system 为一个具体的菜单,reboot 为这个菜单的子菜单,如果 reboot 还需要加上子菜单的话,可以这样写:entry(mini,system,reboot,chreboot,call(action_chreboot),i18n(chreboot),1),这样就会在 reboot 上产生一个新的子菜单,以此类推,可以产生 N 层菜单。第二项为菜单对应的页面,可以是 lua 的源代码文件,也可以是 html 页面。aliascgiformc

9、all 等定义了此菜单相应的处理方式, form 和 cgi 对应到 model/cbi 相应的目录下面,那里面是对应的定制好的 html 和 lua 业务处理。alias 是等同于别的链接,call 调用了相应的 action_function。还有一种调用,是 template,是直接链接到 view 相应目录下面的 htm 页面。 (说明:luci 框架下面的 htm 都是可以嵌入 lua语句的,做业务处理,相当于 jsp 页面的内部的 Java 语句) 。问价查找对应简介:entry(mini,system,reboot,call(action_reboot),i18n(reboot)

10、,100) :对应此文件的action_rebootfunctionentry(mini,system,index,cbi(mini/system,autoapply=true),i18n(general), 1):对应*/model/cbi/mini/system.lua autoapply=true 这个失传的参数。 。 。 。 。第 三 项 为 i18n 显 示 , 比 如 entry(mini, system, reboot, call(action_reboot),i18n(reboot), 100),菜单的名字为 admin-core 文件内的对应显示。此处也可以这样写,i18n(

11、reboot,重启),即直接做了国际化。菜单上显示的就是“重启” 。第四项为现实的顺序,这个数字越小,显示越靠前,靠上。3:model 业务处理和页面生成简介我认为 model 的业务处理和 html 生成,是 luci 框架的精华,但是想用好它,最终扩展定义自己的页面也是最难的,但是一旦定义好了,后面的工作就会轻松高效简介统一,不失为一种好的解决方案。但是它又有缺点,就是写页面虽然统一,但是不够灵活。下面以 SimpleForm 为例,讲解一下。具体文件*/luci/model/cbi/passwd.luaf =SimpleForm(password,translate(a_s_change

12、pw), translate(a_s_changepw1) -调用SimpleForm 页面当然还是 I18N 从中捣乱,看上去没那么直观,不理他pw1=f:field(Value,pw1,translate(password) - SimpleForm 里面加一个 field 至于SimpleForm 和 fiemd 是什么,一会去看 SimpleForm 页面去pw1.rmempty=false- 把 SimpleForm 的 rmempty 为不显示后面就不做注释了应该看得懂了pw2=f:field(Value,pw2,translate(confirmation)pw2.rmempty

13、=falsefunctionpw2.validate(self,value,section)returnpw1:formvalue(section)=valueandvalueendfunctionf.handle(self,state,data)ifstate=FORM_VALIDthen -这个就是业务处理了你懂得呵呵localstat=luci.sys.user.setpasswd(admin,data.pw1)=0 -rootadminifstatthenf.message=translate(a_s_changepw_changed)elsef.errmessage=translat

14、e(unknownerror)enddata.pw1=nildata.pw2=nilendreturntrueendreturnf说明:(simpleForm 位于 view/cbi 下面,可以研究一下,各个元素是如何定义的 )现在在给一个小例子:以.*/luci/model/cbi/admin_system/version_manage.lua 为例,介绍一下 luci 中 web 页面 lua 代码6localh=loadfile(/usr/local/luci/help.lua)7ifhthen8 h()9end10localhelp_txt=help_infoand help_info

15、.version加载帮助帮助文件 help.lua,关于 loadfile()的用法可以查看 lua 的手册( 我还没完全弄明白,先用了)help_txt 是一个全局变量12appadmin_path=/usr/local/appadmin/bin/定义一个全局变量,其实跟功能跟宏一样,定义 appadmin 的绝对路径14versionlist=1516functiongetline(s).32end3334functionget_versionlist().68end6970versionlist=get_versionlist()定义一个全局变量和两个函数,并初始化此变量接下来就是和最终

16、展现的 Web 页面直接相关的代码了,大部分都是对 luci 封装好的一些html控件(代码)的使用和扩展。luci 封装好的 html 控件类可以在以下文件查看:./host/usr/lib/lua/luci/cbi.lua71m=SimpleForm(version,translate(版本管理)72m.submit=false73m.reset=false74m.help=help_txtandtrueorfalse75m.helptxt=help_txtor使用了一个 SimpleForm 的控件,SimpleForm 实际上对应一个 html 表单,是整个页面最大的 容器,本页面内的绝大部分控件都处于 SimpleFor

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号