OpenWRT下web框架初嘗試之總結
OpenWRT下web總結
目 錄
第一章 Web框架以及實現
第一節 luci框架
OpenWRT的web採用的是luci框架,該框架採用了MVC的設計模式。在luci目錄下有三個重要的目錄:controller、model、view。將前端的htm檔案放置在view下、邏輯控制檔案放置在controller下、一些對映生成htm的模板放置在model下。
controller目錄:將所有用到的“邏輯上的處理”,通過註冊“樹節點”的方式組織起來。也就是說,將所有的邏輯上的處理,像樹的枝葉一樣組織起來。
Model:業務上的處理以及生產
View:htm檔案。
網上參考資料:
第二節 controller下檔案(*.lua)的編寫
如第一節所述,controller在luci框架中作用是邏輯上的組織。編碼時主要分為兩塊:
1 “枝註冊”---模組註冊
2 “葉註冊”---節點註冊
1 模組註冊
如:module("luci.controller.admin.system", package.seeall)
解釋:表示在luci/controller/admin/下注冊一個system模組
2 節點註冊
行1:function index()
行2:entry({"admin", "system", "system"}, cbi("admin_system/system"), _("System"), 1)
行3:end
行1和行3將表示一個函式塊
行2:表示在admin/system模組下注冊一個system的節點,節點序列為1,cbi(後面討 論)
備註:行2中的第四個引數序列很重要,它會影響在web上的顯示順序
Entry()函式分析:
引數一:插入的節點名字,如:{“admin”, “system”, “heyg1”},表示在admin下system中插入節點heyg1
引數二:插入的heyg1節點要做什麼(動作時什麼),通常有下面幾種方式:
方式一:template方式,即調該節點會直接呼叫view下的相應htm檔案
方式二:cbi/form方式,會呼叫model下的相應檔案做相應的處理
方式三:call方式,會呼叫本檔案或者匯入檔案的函式
其他方式:
Alias:表示連結到其他某個節點
這裡template(“heyg/heyg1”)會呼叫view/heyg/heyg1.htm檔案
引數三:插入節點在對應位置的名字,在web介面對應選單中的顯示名字
這裡_(“heyg1”),在web的選單中顯示為heyg1
引數四:插入結點的同等級的不同分類,或者說是區別同等級下的其他結點的數字代號
這裡3,不能和同級別下的其他選項重複
在選單中級別是從小到大的顯示如:system(1)、Administration(2)、heyg1(3)....
Entry()函式的一些屬性解析:對於插入一個結點,該結點除了有相應的名稱和處理動作之外,它還有一些相應的屬性,我們可以手動的設定它的屬性值類似於entry().dependent=false
官方文旦中給出以下屬性:
dependent :當該節點的父節點丟失時,將該節點保護起來,不讓它被意外呼叫
leaf:如果該節點下還有其他子節點,解析到該結點時,就不向下繼續解析其子節點。
sysauth:在使用該節點時需要一個系統賬戶驗證
I18n:定義了當求頁面請求時,哪些檔案會自動載入
其他屬性(純屬自己猜測,如有不正,多多指教,勿噴):
Index:將該節點作為同級目錄下的作為首頁,或者說預設的第一個頁面
第三節 model下檔案(*.lua)編寫
第四節 view下檔案(*.htm)編寫
嵌入lua指令碼、htm、js多種語句
第二章 web的訪問流程
第三章 lua學習資料
英文手冊:
http://www.lua.org/manual/5.1/index.html
中文手冊:
lua學習教程:
大多數lua語句分析中出現的函式介面:
NB的部落格和學習文章
參考資料
LuCI上配置Makefile:
CBI:
Luci:
Luci類庫的函式定義和使用說明:
UCI介面: