前面都是準備,這裡是整個web mvc框架的核心地方,稍微多介紹一下。核心類是乙個叫dspth的模組。這裡我沒有處理路由,乙個是不太熟,另外乙個是主要是體會架構。我用的路由規則如下:
1)用url的位址引數進行路由,有兩個引數,乙個是ctr,表示控制類,乙個是act表示執行的方法
2)所有執行方法都約定引數格式如下
self,environ,cgi,cgitb,form,cookies,sessionid,*args
當然,真正做框架的時候,可以把environ,cgi,cgitb,form,cookies,sessionid這些引數用乙個物件包含,通過全域性性變數傳遞給控制類。或者放在控制類的基類中,也可以直接賦給控制物件(指令碼語言這樣處理非常方便)
下面是路由模組:
from os import environ
import cgi, cgitb
from oshelper import oshelper
import gl
from htmlhelper import htmltools
thecgi = cgi;
thecgitb = cgitb;
theform = cgi.fieldstorage()
theenviron = environ;
thecontrollername = theform.getvalue('ctr')
theaction = theform.getvalue('act')
thecookies=htmltools.getcookies(theenviron)
thesessionid = thecookies.get('sessionid')
thecando=true
#寫入響應頭資訊.
if thesessionid==none:
thesessionid = oshelper.getguid()
print('content-type:text/html;')
print("set-cookie:sessionid=%s;" % thesessionid)
print("set-cookie:userid=xyz;")
print("set-cookie:password=xyz123;")
print("set-cookie:expires=tuesday, 31-dec-2007 23:12:40 gmt\";")
print("set-cookie:domain=www.w3cschool.cc;")
print("set-cookie:path=/perl;")
print("\r\n\r\n")
if thecontrollername=='' or thecontrollername==none:
print("控制名不存在
") thecando = false
exit
if theaction=='' or theaction==none:
print("動作不存在
") thecando = false
exit
#匯入控制類模組
themodule = oshelper.loadmodule(thecontrollername)
if themodule==none:
print("控制模組不存在
") thecando = false
exit
#匯入控制類型別
theclass = oshelper.loadclass(themodule,thecontrollername)
if theclass==none:
print("控制類不存在
") thecando = false
exit
#例項化控制類
theinst = theclass()
#匯入控制的action方法
themethod = oshelper.loadclass(theinst,theaction)
if themethod==none:
print("響應不存在
") thecando = false
exit
#執行控制類的目標方法
if thecando:
themethod(theenviron,thecgi,thecgitb,theform,thecookies,thesessionid)
下面是乙個簡單的控制類:
import gl
from oshelper import oshelper
from htmlhelper import htmltools
class person:
def __init__(self):
self.first_name=''
self.last_name=''
class test:
count=1
def __init__(self):
self.aaa='a'
def execute(self,environ,cgi,cgitb,form,cookies,sessionid,*args):
viewbag=gl.obj()
test.count+=1
them = person()
htmltools.tryupdate(them,form)
viewbag.first_name=them.first_name
viewbag.last_name=them.last_name
viewbag.sessionid=sessionid
theviewtext = oshelper.readfile('testview.py')
exec(theviewtext)
大家注意,view檢視,我這裡並沒有進行特殊處理,僅僅是直接執行裡面的**,實際上可以很容易的實現類似asp的那種標記性檢視。要注意的,viewbag這個物件是傳遞給檢視層的模型資料。因為採用的是直接執行檢視**的方法,整個檢視執行的變數作用域都在execute方法裡,viewbag是可以直接訪問的。下面是檢視類:
print('')
print('')
print('')
print('')
print("" % (viewbag.first_name, viewbag.last_name))
print('''''')
print("sessionid:"+viewbag.sessionid+"")
print('')
print('')
到這裡,mvc框架就算完成了,簡單吧,其實哪些鼎鼎大名的框架也基本是這種模式,只是細節處理方面要好很多。特別是路由的處置方面。但哪些只是技術細節,架構上,並無本質上的區別。我上面的框架如果把檢視和路由再處理一下,做一般的大小系統,足夠了。
因為初涉python,不妥地方難免,還望賜教。大家也可以交流。
乙個簡單的ExtJS搜尋建議框
封裝的是乙個ext4.2的元件,繼承並相容於ext的combobox.實現原理非常easy,在 combo 中監聽 keyup 事件就可以.搜尋建議的combo.基本上全然相容,使用方式與combo下拉框一樣.須要後台程式依據keyword進行搜尋建議.源 例如以下 搜尋建議框,使用時請適當改動包名...
製作乙個簡單的toast彈框
import toast from toast const obj install 是預設的方法。當外界在 use 這個元件的時候,就會呼叫本身的 install 方法 對外暴露乙個install方法即可 同時傳乙個 vue 這個類的引數。obj.install function vue expor...
乙個簡單的verlig程式 乙個簡單C程式的介紹
我們前面學了c語言的一些理論知識,今天通過乙個簡單的程式先來看一看c語言程式是什麼樣子。然後再對程式中的 進行介紹。這個語句的功能是進行有關的預處理操作。include稱為檔案包含命令,後面尖括號的內容稱為標頭檔案或首檔案。此處指包含stdio.h系統標頭檔案,在下面主函式中使用的printf 函式...