前言

本来这个章节想排在最后在写,但是考虑到自身的码字速度,还是优先输出本篇文档,让大家先上手进行LUCI的相关调试。
本篇整理分为以下几个部分

  1. LUA脚本开发
  2. HTML页面开发
  3. 常见函数及命令整理
  4. 官方及参考网址
LUA脚本开发

1、查找页面及需要修改的元素

LUCI的目录框架包含LUA及HTML两部分,当你不知道想要修改的页面或者节点在哪个文件里时,可以选择将LUCI页面语言切换成英文模式,然后选择页面中相应的元素,通过设备串口或者版本机输入find . -type f |xargs grep "xxxx"命令进行搜索,找到对应的文件。例如:查找“状态->总览->网络状态信息”存在哪个文件中,可以选择在“系统->语言与界面”中选择英文。然后在版本机敲写find . -type f |xargs grep “IPv4 WAN Status”查找文件。

2、LUA注释

LUA单行注释使用“--”;LUA块注释使用“--[[ 注释内容 ]]--”;

3、LUA添加log打印信息

此方法转自下列链接,主要通过在/luasrc/下创建log.lua文件,并在需要增加调试信息的LUA代码中进行引用(此处为何写LUA代码,主要因为HTML页面中也可以添加LUA语句,同样可以使用这种方法增加打印信息),引用方法如下:

local log = require "luci.log"
log.print("=====STEP1=====")

4、LUA文件引用其他LUA脚本中的函数

在LUA文件中使用require关键字进行其他LUA脚本引用,引用的起始目录在/lua/,每一个"."号相当于文件目录的"/"分隔号。例1:require "nixio.fs",引用的是/lua/nixio/fs.lua文件;例2:local uci = require("luci.model.uci").cursor()调用/lua/luci/model/uci.lua中的cursor函数,使用该函数可以进行底层uci get及set操作。

5、LUA脚本调用函数时用点号还是用冒号

(1)使用点号时,需要开发者手动把自身self值当作参数传入到函数中; (2)使用冒号时,定义函数时,给函数的添加隐藏的第一个参数self;调用函数时,默认把当前调用者作为第一个参数传递进去。

6、LUA中字符串的处理

(1)连接字符串,使用“..”符号;(2)判断字符串是否相等使用“==”;(3)判断字符串不相等使用“~=”;(4)其他字符串操作可参考下列链接;

7、LUA中table的处理

(1)遍历table中的元素,需要使用for循环。其中v是table类型,x是遍历table的位置,默认位置从1开始,y是当前位置的值。

local maclist = {}
for x,y in pairs(v) doif y ~= nil thenmaclist_v[x] = yend
end

(2)如果将table转化成字符串,可以使用table.concat()函数

8、多语言

(1)对于/usr/lib/lua/luci/controller/目录下的模块,我们可以使用_()来翻译标题 entry({"admin", "example"}, firstchild(), _("Example"), 60)

(2)对于/usr/lib/lua/luci/model/cbi/下的 lua 脚本,则使用 translate()来翻译 m = Map("example", translate("Example for cbi"), translate("This is very simple example for cbi"))

HTML页面开发

1、view下HTML页面的内容

(1)HTML页面使用“<% %>”嵌入 LUA 代码,在HTML页面的开头会发现有一段“<% %>”的引用,那里包含着LUA的数据处理;(2)可以在HTML的任何地方,使用<%=xxx%>进行LUA数据的引用;(3)HTML页面里的<%+header%>表示加载/usr/lib/lua/luci/view/header.htm;(4)使用<%:xxx%>,实现页面节点不同语言风格的切换。

2、XHR函数

HTML通过XHR调用LUA脚本,通常LUA的脚本位置在/usr/lib/lua/luci/controller/目录下

(1)XHR.get

XHR.get,静态从后台获取数据,仅调用一次,其函数模型如下所示

XHR.get(callPath,null,function(x,rval){......}
);
/*******************************************************************************************************************
callPath:访问LUA脚本的路径,可拼接参数下发,例:callPath=callPath+'/'+param1+'/'+param2;
null:此参数默认设置为null,功能待查
function(x,rval):回调函数,其中x:是XHR对象,rval是所访问LUA函数的返回值
********************************************************************************************************************/

(2)XHR.poll

XHR.poll,动态从后台获取数据,设置固定的时间进行调用,其函数模型如下所示

XHR.poll(time,callPath, param,function(x,rval){......}
);
/*******************************************************************************************************************
time:刷新间隔时间
callPath:访问LUA脚本的路径
param:拼接下发的JSON字符串,例如{ status: 1 }
function(x,rval):回调函数,其中x:是XHR对象,rval是所访问LUA函数的返回值
********************************************************************************************************************/

(3)XHR.post

XHR().post,将数据发送给后台LUA脚本执行,其函数模型如下所示

var xhr = new XHR();
xhr.post(callPath, null,function(rval){}
);
/*******************************************************************************************************************
callPath:访问LUA脚本的路径
null:此参数为传入参数,可拼接JSON字符串,例如{ status: 1 }
function(rval):回调函数,其中rval是所访问LUA函数的返回值
********************************************************************************************************************/
常见函数及命令整理

1、LUCI的跳转方式

(1)cbi的跳转方式(跳转LUA页面):

local http = require 'luci.http'
local dsp = require 'luci.dispatcher'
http.redirect(dsp.build_url("/admin/system/wifitest"))

(2)template的跳转方式(跳转HTML页面):

local temp = require 'luci.template'
temp.render("sysauth")

2、luci.http.formvalue函数

此函数用于获取我们post发送的表单值,例如在model目录下的LUA页面中,当想自定义保存生效按钮时,可以使用如下代码;同时也可以在HTML页面的LUA部分判断当前页面提交哪些信息

--此段代码功能是点击保存生效按钮后,跳转到登录页面
local apply = luci.http.formvalue("cbi.apply")
if apply thenlocal dsp = require "luci.dispatcher"local utl = require "luci.util"local sid = dsp.context.authsessionif sid thenutl.ubus("session", "destroy", { ubus_rpc_session = sid })dsp.context.urltoken.stok = nilluci.http.header("Set-Cookie", "sysauth=%s; expires=%s; path=%s/" %{sid, 'Thu, 01 Jan 1970 01:00:00 GMT', dsp.build_url()})endluci.http.redirect(luci.dispatcher.build_url())os.execute("rm -rf /tmp/luci*")
end

3、调用Linux底层脚本及程序函数

(1)luci.sys.call(command)

允许调用linux下任何的shell脚本或者执行程序

(2)luci.sys.exec(command)

执行底层命令,返回程序运行结果

(3)os.execute(command)

执行底层命令,判断命令是否执行成功

4、ubus

在LUCI页面中,多数使用ubus库函数获取网络、无线、状态等参数,具体引用方法查看luci目录下的util.lua文件。同样可以在设备串口敲写ubus --h命令查看ubus的使用方法。

(1)ubus list:显示当前ubus注册的接口

(2)ubus -v list 接口:添加-v参数,详细打印接口信息,例如:ubus -v list network.interface.wan,详细打印wan接口信息

(3)ubus call: 调用对象方法,例如:ubus call network.interface.wan status,调用wan接口状态

5、清除页面缓存

LUCI页面缓存文件存储在/tmp/luci-modulecache下,如果不想清除浏览器缓存记录,可以使用rm -rf /tmp/luci*命令清理缓存

6、修改登录密码

在串口执行passwd命令进行修改,改动后的密码存储在/etc/shadow里。

官方及参考网址

1、lua添加log调试信息网址(http://blog.csdn.net/bailyzheng/article/details/48663369)
2、lua调用底层uci网址(https://wiki.openwrt.org/doc/techref/uci#api)
3、luci系统调用函数网址(https://htmlpreview.github.io/?https://raw.githubusercontent.com/openwrt/luci/master/documentation/api/modules/luci.util.html)
4、lua处理字符串网址(http://www.3lian.com/edu/2015/05-29/217576.html)
5、标准OS库网址(https://www.cnblogs.com/chenny7/p/4056976.html)
6、lua table表单处理网址(https://www.runoob.com/lua/lua-tables.html)

OPENWRT-LUCI开发总结-LUCI开发过程中的小技巧相关推荐

  1. 开发过程中的小问题和小方法

    开发过程中的小问题和小方法 1.亲手敲代码,反复敲代码. 亲手敲是必须的,躺着刷到抖音里篮球教学,眼镜说你学会了,第二天手会告诉你,你并没有学会.至于反复,学习就是一个重复的过程,学到的知识反复输出, ...

  2. EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续

    今天,正运动小助手给大家分享一下EtherCAT运动控制卡开发教程之Qt,主要介绍一下如何通过Qt编程实现小线段轨迹连续加工,暂停与继续. ECI2828运动控制卡的硬件介绍 ECI2828系列控制卡 ...

  3. python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  4. 杂谈---小故事小道理,面试中的小技巧(NO.2)

    本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些"扯淡",LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还 ...

  5. python处理大量excel数据-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  6. python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...

  7. python输出数据到excel-如何使用python将大量数据导出到Excel中的小技巧之一

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  8. ubuntu pycharm设置快捷图标_这些Ubuntu中的小技巧,你知道吗?

    Ubuntu中的小技巧 大家伙儿暑假愉快!假期的小I也有在认真探索,这些Ubuntu中的快捷键小技巧,来和小I一起get吧! 01快速截图 使用ubuntu自带的截图功能快速截图(全屏截图.当前窗口截 ...

  9. 如何将python数据输入到excel中_如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

  10. python获取excel整行数据如何保存到新的工作簿中_如何使用python将大量数据导出到Excel中的小技巧之一...

    如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...

最新文章

  1. 安装VMwareTools后虚拟机中的鼠标滚轮无法使用解决办法
  2. Python基本语法_强制数据类型转换
  3. 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
  4. android open source
  5. iis 防火墙防止恶意ip攻击
  6. dnn5.5.1的配置
  7. streamsets rest api 转换 graphql
  8. 【学习笔记4】Action名称的搜索顺序
  9. JavaScript字符串替换replace方法
  10. coco 数据集_Tensorflow对COCO目标检测数据预处理
  11. missing 1 required positional argument: ‘on_delete‘报错解决方案
  12. “OSPF” DR与BDR
  13. Mysql中给数据库,表,字段设置字符编码
  14. elasticsearch设置_search的size
  15. Linux Mint(version19)
  16. MMCM时钟动态调相
  17. jQuery weui Select组件显示指定值
  18. 采用计算机辅助数据收集,可用性测试中计算机辅助数据收集和分析机制研究
  19. 考研每日加油站(持续更新)
  20. php实训参考文献,SPSS实训心得体会

热门文章

  1. 长沙好吃的地方?这个好吃的地方你可能真的没来过
  2. infinity新标签页失效
  3. 计算机一黑屏就显示当前账户已锁定,电脑黑屏用户已锁定账户怎么办?
  4. 高德离线数据api_高德地图Android API发布V1.0.4版本,增加离线地图功能
  5. Java解析多种文件输出字符串以及图片(ppt、odc、odcx、pptx、xls、xlsx、rtf)
  6. 基于机智云平台的厨房智能监控系统
  7. [紧急通告]关于蓝色理想经典论坛无法访问的声明
  8. 高通烧录报ufs需要重新provision
  9. 《JETS Jointly Training FastSpeech2 and HiFi-GAN for End to End Text to Speech》
  10. 计算机小狐狸操作,简易的操作手册-小狐狸商务软件.DOC