openwrt 关于 luci

it2022-05-05  189

Openwrt luci

目录说明

/usr/lib/lua/luci #luci主目录 luci/controller/ #MVC的控制器目录 ->./admin/ #admin模块 luci/view/ #mvc 的view目录 ->./admin_status/ #admin_status的视图

目录为 luci/model/ #MVC模型的model -> cbi #mode的CBI模块

CBI模块的操作

$cat /etc/config/helloconfig config hello option enabled 0

CBI管理配置文件

Map表示/etc/config/目录中的配置文件

m = Map("helloconfig", translate("hello config"), translate("hello config")) --/etc/config/helloconfig m:chain("luci")

section 表示配置文件中的项目, 如上: config hello

s=m:section(TypedSection, "hello", translate("Config")) s.anonymous = true --不显示Section的名称 s.addremove = true --支持增加 s.template = "cbi/tblsection" --表示在一行显示

TypedSection :为这个配置文件中的那个config, 上面为config hello

TypedSection 定义在luci/cbi.lua

TypedSection说明Flag选择框Value文本框Button按钮TextValue文本ListValuelist下拉框

如何控制新建TypedSection项

function s.create(self, section) return TypedSection.create(self, section) end o=s:option(Flag, "enabled", translate("启用")) o.default=0 --默认值

option:表示这个config文件中的option

l= s:option(ListValue, "level", translate("Level")) -- option level l:value("1", translate("a")) --显示别名 l:value("2", translate("b")) option说明o.passowrd表示密码o.default=0默认值0o.rmempty=true是否允许为空true/falseo.placeholder背景提示o.datatype数据类型(见 luci/cbi/datatypes.lua)

数据类型(datatype )

o.datatype -, 见 luci/cbi/datatypes.lua, 可以or() 或者and() 如 “and(uinteger,range(1,255))” IP范围 range(1,255) 取值范围1-255 max(1000) 最大不超过1000 uinteger 无符号整形

o:depends(“enabled”,“1”) --需要enable为1才可使用,用于联动

--保存o的时候将value进行base64编码 function o.write(self, section, value) local base64 = require "luci.base64" if(value~=nil) then value= base64.encode(value) end AbstractValue.write(self, section, value) --- self.map.uci:foreach(self.map.config, "user", function(item) log.print(json.stringify(item)) end ) end -- 读取值这个值必须与保存时的一样,不然就会执行两次write function user.cfgvalue(self, value) return Value.cfgvalue(self, value) end

显示环境变量

#!/bin/sh #/www/cgi-bin/os_export echo "Content-Type: text/plain" echo "" export

关于luci

添加新界面

--[[ 在 luci/controller/admin/help.lua ]] module('luci.controller.admin.help', package.seeall) function index() local page --添加页 page = node('admin', 'help') page.target = firstchild() page.title = _('help') page.order = 70 page.index = true ---help下添加菜单,系统日志 entry({"admin", "help", "syslog"}, call("action_help_syslog"), _("System Log"), 4) end

关于entry(路劲, 目标,标题,排序)

目标target:

template(“模板文件名在luci/view目录”) 比如: template(“admin_status/index”) #状态模板 这相当于MVC中的View cbi其实是对View的一种分类封装,专门处理/etc/config配置文件 在index.htm中也可以调用luci.http.formvalue得到请求参数call(“方法名”) 调用方法:call(“action_load”)post(“方法名”) 通过http post调用此方法alias( “”,"","", …)

controller中的方法

function action_test() --- #得到http请求参数 local prm = luci.http.context.request.message.params ---#返回json格式如下 luci.http.prepare_content("application/json") luci.http.write_json({ action="hello", msg="aa" }) --#返回一个模板 luci.template.render("admin_status/syslog", {syslog=syslog}) end

通用调用

-- 执行命令行,返回命令打印数据 luci.sys.exec("命令行") luci.sys.call("date -s 'd-d-d d:d:d'" %{ date.year, date.month, date.day, date.hour, date.min, date.sec }) luci.sys.call("uci set system.lede.zonename='Asia/Shanghai'") luci.sys.call("uci set system.lede.timezone='CST-8'") luci.sys.call("uci commit system") --解析json字符串为对象 luci.jsonc.parse("json字符串") --得到http参数数据 luci.http.formvalue("http参数") --http回复json数据 luci.http.prepare_content("application/json") luci.http.write_json({ timestring = os.date("%F %T ") .. luci.i18n.translate(os.date('%A')) }) --序列号json对象返回json字符串 luci.util.serialize_json(x,b) --读文件返回文件数据 nixio.fs.readfile("文件路劲") --写文件 nixio.fs.writefile("文件路劲", "数据") -- 中文翻译 luci.i18n.translate("Enable") --uci信息获取 local uci = require("luci.model.uci").cursor() local enable=uci:get("system","ntp","enable")

最新回复(0)