OPENWRT-LUCI开发总结-LUCI开发过程中的小技巧
前言
本来这个章节想排在最后在写,但是考虑到自身的码字速度,还是优先输出本篇文档,让大家先上手进行LUCI的相关调试。
本篇整理分为以下几个部分
- LUA脚本开发
- HTML页面开发
- 常见函数及命令整理
- 官方及参考网址
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.亲手敲代码,反复敲代码. 亲手敲是必须的,躺着刷到抖音里篮球教学,眼镜说你学会了,第二天手会告诉你,你并没有学会.至于反复,学习就是一个重复的过程,学到的知识反复输出, ...
- EtherCAT运动控制卡开发教程之Qt(中):小线段连续轨迹加工、暂停与继续
今天,正运动小助手给大家分享一下EtherCAT运动控制卡开发教程之Qt,主要介绍一下如何通过Qt编程实现小线段轨迹连续加工,暂停与继续. ECI2828运动控制卡的硬件介绍 ECI2828系列控制卡 ...
- python数据导出excel_【python Excel】如何使用python将大量数据导出到Excel中的小技巧之一...
如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...
- 杂谈---小故事小道理,面试中的小技巧(NO.2)
本篇是接着上一篇面试随笔的,上一次有猿友反应写的有些"扯淡",LZ思来想去最大的原因可能是由于上一章写的全是一些大忌,既然是大忌,那么在现实当中发生的概率还是相对较小的,大部分人还 ...
- python处理大量excel数据-使用python将大量数据导出到Excel中的小技巧分享
(1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...
- python输出数据到excel-使用python将大量数据导出到Excel中的小技巧分享
(1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以 ...
- python输出数据到excel-如何使用python将大量数据导出到Excel中的小技巧之一
如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...
- ubuntu pycharm设置快捷图标_这些Ubuntu中的小技巧,你知道吗?
Ubuntu中的小技巧 大家伙儿暑假愉快!假期的小I也有在认真探索,这些Ubuntu中的快捷键小技巧,来和小I一起get吧! 01快速截图 使用ubuntu自带的截图功能快速截图(全屏截图.当前窗口截 ...
- 如何将python数据输入到excel中_如何使用python将大量数据导出到Excel中的小技巧之一...
如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...
- python获取excel整行数据如何保存到新的工作簿中_如何使用python将大量数据导出到Excel中的小技巧之一...
如何使用python将大量数据导出到Excel中的小技巧 (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢 ...
最新文章
- 安装VMwareTools后虚拟机中的鼠标滚轮无法使用解决办法
- Python基本语法_强制数据类型转换
- 【Android 应用开发】 Android APK 反编译 混淆 反编译后重编译
- android open source
- iis 防火墙防止恶意ip攻击
- dnn5.5.1的配置
- streamsets rest api 转换 graphql
- 【学习笔记4】Action名称的搜索顺序
- JavaScript字符串替换replace方法
- coco 数据集_Tensorflow对COCO目标检测数据预处理
- missing 1 required positional argument: ‘on_delete‘报错解决方案
- “OSPF” DR与BDR
- Mysql中给数据库,表,字段设置字符编码
- elasticsearch设置_search的size
- Linux Mint(version19)
- MMCM时钟动态调相
- jQuery weui Select组件显示指定值
- 采用计算机辅助数据收集,可用性测试中计算机辅助数据收集和分析机制研究
- 考研每日加油站(持续更新)
- php实训参考文献,SPSS实训心得体会
热门文章
- 长沙好吃的地方?这个好吃的地方你可能真的没来过
- infinity新标签页失效
- 计算机一黑屏就显示当前账户已锁定,电脑黑屏用户已锁定账户怎么办?
- 高德离线数据api_高德地图Android API发布V1.0.4版本,增加离线地图功能
- Java解析多种文件输出字符串以及图片(ppt、odc、odcx、pptx、xls、xlsx、rtf)
- 基于机智云平台的厨房智能监控系统
- [紧急通告]关于蓝色理想经典论坛无法访问的声明
- 高通烧录报ufs需要重新provision
- 《JETS Jointly Training FastSpeech2 and HiFi-GAN for End to End Text to Speech》
- 计算机小狐狸操作,简易的操作手册-小狐狸商务软件.DOC