性夜影院午夜看片,无码精品久久一区二区三区,婷婷成人丁香五月综合激情,校园春色 qvod,性调教室高h学校

Python實(shí)戰(zhàn)【第二節(jié)】在網(wǎng)頁(yè)上顯示信息

歡迎大家來(lái)到Python自學(xué)教程實(shí)戰(zhàn)篇,上一講我們跟大家聊了聊我們本次實(shí)戰(zhàn)的主題和目的,并且給大家了一串代碼讓大家試驗(yàn)一下,不知道大家都有沒(méi)有做呢?這節(jié)課我們就先來(lái)解釋下昨天文章中的那串代碼:

import web

導(dǎo)入 web.py 模塊。

urls = (

'/', 'index'

)

這是指定網(wǎng)站 url 的匹配規(guī)則,左邊是正則表達(dá)式,右邊是對(duì)應(yīng)處理函數(shù)的名稱(chēng)。

class index:

def GET(self):

return "Hello, world!"

這便是處理請(qǐng)求的函數(shù) index。GET 和 POST 是 HTTP 的兩種請(qǐng)求方式,一般來(lái)說(shuō),GET 用于請(qǐng)求網(wǎng)頁(yè),而 POST 多用于提交表單。舉個(gè)不嚴(yán)謹(jǐn)?shù)睦踝樱寒?dāng)你在瀏覽器地址欄中輸入一個(gè)地址并按下回車(chē),就是發(fā)送了一個(gè) GET 請(qǐng)求;而當(dāng)你在打開(kāi)的頁(yè)面中輸入用戶(hù)名和密碼,點(diǎn)擊登錄按鈕,則是發(fā)送了一個(gè) POST 請(qǐng)求。這里的 GET 函數(shù)描述了對(duì)于一個(gè) GET 請(qǐng)求的處理方式:直接返回一個(gè)字符串。

if __name__ == "__main__":

app = web.application(urls, globals())

app.run()

最后,當(dāng)這個(gè)代碼文件被執(zhí)行時(shí),我們將創(chuàng)建一個(gè) application,它會(huì)按照我們定義的 url 規(guī)則進(jìn)行對(duì)應(yīng)的處理,并在后臺(tái)一直運(yùn)行,獨(dú)自等待請(qǐng)求的到來(lái)。

插一句:由于這個(gè)系列的文章側(cè)重于“實(shí)戰(zhàn)”,所以我只會(huì)搬開(kāi)擋在道路正前方的石頭,對(duì)于涉及的諸多細(xì)節(jié)無(wú)法面面俱到。即使這段簡(jiǎn)單的 hello world 代碼中,關(guān)于 url 的正則匹配、GET / POST 的區(qū)別等,都可說(shuō)上很多。但現(xiàn)在我只能略過(guò)。如有疑問(wèn),歡迎在QQ群和論壇上討論。

僅僅在頁(yè)面上顯示 hello world 顯然不能滿(mǎn)足我的需求。我是想要一個(gè)關(guān)于電影的網(wǎng)站,那最起碼得在頁(yè)面上顯示一些電影的信息吧。

一種顯而易見(jiàn)的方法是,把要顯示的信息拼成字符串,然后返回。

在代碼里定義一組數(shù)據(jù),一個(gè)由 dict 組成的 list:

movies = [

{

'title': 'Forrest Gump',

'year': 1994,

},

{

'title': 'Titanic',

'year': 1997,

},

]

然后把 GET 方法改為:

def GET(self):

page = ''

for m in movies:

page += '%s (%d)\n' % (m['title'], m['year'])

return page

movies 是一個(gè)包含了影片標(biāo)題和年代信息的 list。在 GET 方法中,把 movies 里每一條內(nèi)容取出來(lái),拼接成一整個(gè)字符串,作為結(jié)果返回。

如果你之前已經(jīng)運(yùn)行了 code.py,刷新頁(yè)面將會(huì)看到新的內(nèi)容:

Forrest Gump (1994)

Titanic (1997)

是不是有點(diǎn)類(lèi)似在命令行輸出結(jié)果或者在文本文件中存儲(chǔ)內(nèi)容?但作為一個(gè)網(wǎng)頁(yè),如果以后要添加更多的顯示效果和交互功能,這樣寫(xiě)肯定是要跪。好在 web.py 給我們提供了一種更方便的頁(yè)面展示方式 -- 模板。

剛才我們用的方法類(lèi)似于在 Python 里寫(xiě) HTML,這是比較痛苦的。而 web.py 的模板是讓你能在 HTML 里寫(xiě) Python。

首先我們需要在代碼里指定模板:

render = web.template.render('templates/')

在 GET 方法里調(diào)用模板:

def GET(self):

return render.index()

模板的返回值就是一個(gè)處理好的頁(yè)面,所以直接 return 就可以了。

然后在項(xiàng)目文件夾,也就是 code.py 所在的目錄下新建一個(gè)叫做 templates 的目錄,里面新建一個(gè) index.html 文件作為模板。注意這里的 templates、index 命名都需要與你代碼里的設(shè)定一致。如果你是吧一個(gè) muban 文件夾下的 shouye.html 作為模板,那相應(yīng)代碼就應(yīng)改為:

render = web.template.render('muban/')

render.shouye()

在模板 index.html 里寫(xiě)下:

<h1>Crossin's Movie Site</h1>

h1 是 HTML 中表示標(biāo)題的標(biāo)簽。保存 code.py 和 index.html 后刷新頁(yè)面,你將會(huì)看到一行很大的標(biāo)題:

Crossin's Movie Site

這表示模板已經(jīng)生效了。但 movies 的信息仍然沒(méi)有顯示。如果需要在模板中顯示信息,需要將信息傳遞給模板:

def GET(self):

return render.index(movies)

然后在模板里,接收并使用傳遞進(jìn)來(lái)的參數(shù):

$def with (movies)

<h1>Crossin's Movie Site</h1>

$movies

web.py 模板中的 $def with 表示這個(gè)模板中將要使用的變量。注意務(wù)必把它放在模板的第一行。如果有多個(gè)參數(shù),需要全部依次列在括號(hào)中。

$movies 則表示獲取 movies 變量的值。

保存刷新,頁(yè)面上已經(jīng)可以看到我們?cè)诖a中定義的 movies 信息了,但還是 list 直接轉(zhuǎn)換字符串的效果。

更近一步地,我們可以在模板中對(duì)數(shù)據(jù)進(jìn)行操作,讓它們看起來(lái)更順眼一點(diǎn):

$for movie in movies:

<li>

$movie['title'], $movie['year']

</li>

模板中的語(yǔ)法和 Python 類(lèi)似,只是前面需要增加 $ 符號(hào)。縮進(jìn)依然需要按照 Python 中的規(guī)范。li 是 HTML 中列表的標(biāo)簽。

這時(shí)候,頁(yè)面上已經(jīng)就能以列表的形式顯示電影信息了。盡管依然簡(jiǎn)陋,但一切才剛剛開(kāi)始,我們的征途是星辰大海。

恭喜您在Python自學(xué)的道路上又堅(jiān)持了一天,我們目前學(xué)習(xí)的知識(shí)比之前的要復(fù)雜一些,但是也比之前的有趣多了,所以希望大家跟上我們的步伐,繼續(xù)加油!

好啦,今天的分享到這里就結(jié)束了,希望大家持續(xù)關(guān)注馬哥教育官網(wǎng),每天都會(huì)有大量?jī)?yōu)質(zhì)內(nèi)容與大家分享!

聲明:文章來(lái)源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!