被同事推薦了一個(gè)web框架牌捷,大概看了下凌摄,看上去很簡(jiǎn)單尿孔,這里記錄下學(xué)習(xí)滞项。
web.py is a web framework for Python that is as simple as it is powerful
什么是Web框架
Web應(yīng)用框架(Web application framework)是一種開(kāi)發(fā)框架狈惫,用來(lái)支持動(dòng)態(tài)網(wǎng)站睛蛛、網(wǎng)絡(luò)應(yīng)用程序及網(wǎng)絡(luò)服務(wù)的開(kāi)發(fā)。其類型有基于請(qǐng)求的和基于組件的兩種框架
百度百科是這么說(shuō)的胧谈,就是這么個(gè)意思
為什么想到看這個(gè)呢忆肾?
主要是下午提到說(shuō)要是有個(gè)XX接口就好了,同事說(shuō)用webpy寫(xiě)一個(gè)很簡(jiǎn)單的菱肖,于是就來(lái)看看看客冈。
webpy
官網(wǎng):https://webpy.org/
還有中文版教程,直接上手:https://webpy.org/docs/0.3/tutorial.zh-cn
直接pip安裝就行
pip install web.py
使用conda的話稳强,得這樣:
conda install -c conda-forge web.py
好了场仲,來(lái)一個(gè)小栗子
就寫(xiě)一個(gè)hello world好了
需求:
我們?cè)L問(wèn)一個(gè)地址,然后返回hello world
遇到一個(gè)問(wèn)題:No module named 'cheroot'
裝一下先
conda install cheroot
實(shí)例:
class hello:
def GET(self):
return 'hello world!'
import web
urls = (
'/','hello'
)
if __name__ == '__main__':
app = web.application(urls , globals())
app.run()
這幾行代碼退疫,就實(shí)現(xiàn)了我們上面的需求
訪問(wèn)本地的8080端口渠缕,就看到了hello world !
注意下褒繁,這里要在命令行里去調(diào)用亦鳞,Spyder里貌似會(huì)直接結(jié)束程序
這里需要我們做的就是寫(xiě)一個(gè)class,實(shí)現(xiàn)以下GET方法,GET就是接收GET請(qǐng)求蚜迅,還有POST請(qǐng)求,我們后面再說(shuō)俊抵;
另一個(gè)就是定義監(jiān)聽(tīng)的URL了谁不,其他都是標(biāo)準(zhǔn)代碼,直接用就好
相比Java來(lái)說(shuō)徽诲,簡(jiǎn)單多了
接收一個(gè)參數(shù)
現(xiàn)在我們想不同的人訪問(wèn)刹帕,可以顯示不同人的名字出來(lái),也就是傳一個(gè)參數(shù)過(guò)去
我們直接使用web.input
就可以獲取到
class hello:
def GET(self):
i = web.input()
print(i)
return 'hello world!'
import web
urls = (
'/','hello'
)
if __name__ == '__main__':
app = web.application(urls , globals())
app.run()
這里我們?cè)L問(wèn):http://localhost:8080/?name=lufei&age=20&gender=male
我們加了幾個(gè)參數(shù)谎替,我們看看后臺(tái)的輸出:
function input(*requireds, **defaults)
Returns a storage object with the GET and POST arguments.
A Storage object is like a dictionary except obj.foo can be used in addition to obj['foo'].
知道了接收參數(shù)偷溺,我們?cè)俑囊幌麓a:
class hello:
def GET(self):
i = web.input()
return 'hello {0} , I know you age={1} and gender={2}'.format(i['name'] , i['age'] , i['gender'])
訪問(wèn)地址:http://localhost:8080/?name=lufei&age=20&gender=male
好玩兒了吧,哈哈哈钱贯,簡(jiǎn)單又好用挫掏,不錯(cuò)
模板
說(shuō)到Web框架了,肯定會(huì)想到HTML秩命,為了更好的可視化效果尉共,HTML是不可缺少的,在webpy中使用HTML也很簡(jiǎn)單
這里要用戶模板的渲染
import web
render = web.template.render('templates/')
urls = (
'/','hello'
)
class hello:
def GET(self):
return render.hello()
if __name__ == '__main__':
app = web.application(urls , globals())
app.run()
我們?cè)诋?dāng)前目錄弃锐,新增一個(gè)templates
目錄袄友,新增了一個(gè)hello.html
文件
內(nèi)容如下:
<h1>哈哈哈哈</h1>
<h3>今天、明天霹菊、昨天</h3>
<em>Hello</em>, world!
然后我們?cè)僭L問(wèn)一下:http://localhost:8080
不錯(cuò)剧蚣,主要兩行代碼:
指定了我們的模板目錄
render = web.template.render('templates/')
然后,調(diào)用模板:
這個(gè)hello
就是模板的名字
return render.hello()
模板也是可以接收參數(shù)的
模板報(bào)錯(cuò)問(wèn)題:
剛才改了好幾次代碼旋廷,一直報(bào)這個(gè)錯(cuò)誤鸠按,不知道為啥,后來(lái)才發(fā)現(xiàn)柳洋,是
$def with (name)
必須寫(xiě)在第一行待诅,一定要寫(xiě)在第一行!P芰汀卑雁!
我們回來(lái)看看代碼:
import web
render = web.template.render('templates/')
urls = (
'/','hello'
)
class hello:
def GET(self):
i = web.input()
return render.hello(i['name'])
if __name__ == '__main__':
app = web.application(urls , globals())
app.run()
主要是HTML文件,注意哦
HTML中可以寫(xiě)python代碼绪囱,注意格式
$def with (name)
<h1>哈哈哈哈</h1>
<h3>今天测蹲、明天、昨天</h3>
<em>Hello</em>, world!
<hr/>
<hr/>
Hello , ${name}
http://localhost:8080/?name=lufei
好了鬼吵,先到這里扣甲,又掌握一個(gè)小知識(shí),明天再繼續(xù)學(xué)習(xí)。