web開發(fā)之Flask框架的“強行”入門

上期說要學(xué)數(shù)據(jù)庫之后,遲遲沒有更新。主要是因為接觸新的版塊,很多理論知識需要學(xué)習(xí),毫無頭緒,導(dǎo)致從MySql學(xué)到HTML5又轉(zhuǎn)到web開發(fā)。作為新手,本期不太能算得上心得,只能算得上強行入門吧~

01

Flask入門


Flask框架:是一種適合在微小項目上的web框架,目前就暫且把當(dāng)成一個能和瀏覽器交互的一個python包吧。使用pip安裝flask。

# -*- coding:utf-8 -*-
from flask import Flask
app=Flask(__name__)
@app.route("/")
def helloworld():
    return 'hello world!'
@app.route("/today")
def hellofriends():
    return "April Fool's Day"
if __name__=='__main__':
    app.run()

運行這個文件:會在終端出現(xiàn)下面內(nèi)容

image

然后我們就可以登陸上面顯示的網(wǎng)址,效果如下(注意下圖網(wǎng)址和內(nèi)容的對應(yīng)關(guān)系):

image
image

好了,前面就是一個小例子,會發(fā)現(xiàn)很簡單就實現(xiàn)了python和瀏覽器的連接,當(dāng)然這都是flask的功勞,看到這,感覺有點像之前的scrapy。

接來下解釋一下上面幾行代碼的意思(如果你想知道為什么這幾行代碼就可以實現(xiàn)與瀏覽器的連接,這個就涉及到flask的內(nèi)部架構(gòu)了,意思就是我還不會)

「 app=Flask(__ name__ ) 」

首先引入了Flask類,app是它的一個實例,__ name__ 在之前介紹過,直接運行,__ name__ =='__ main__ ',使用import調(diào)用時,不等于‘__ main__ ’,變成模塊名(就是python文件名,沒有.py后綴~),這樣Flask在運行時才能進行定位到引用的模塊。

「 route()裝飾器 」

裝飾器的作用是實現(xiàn)路由函數(shù),路由是指URL和函數(shù)之間的映射,意思是說你輸入一個特定的網(wǎng)址,就會返回給你特定的頁面(由對應(yīng)的python函數(shù)實現(xiàn))。本例中,用修飾器將helloworld和hellofriends函數(shù)修飾為路由函數(shù)。

「 裝飾器 」

裝飾器(decorator)算的上是本期一個重點,我們將裝飾器理解為一個接受函數(shù)作為參數(shù)的函數(shù)。首先學(xué)習(xí)一下如何把函數(shù)作為參數(shù)傳遞給一個函數(shù)。

image

通過上圖看出,我們定義了兩個函數(shù),其中deco的參數(shù)是函數(shù)func,我還專門打印了f的類型,是函數(shù)可不是字符串,字符串是要加引號的。注釋部分也解釋了函數(shù)加不加括號的影響。

然后聽說裝飾器也是接受函數(shù)作為參數(shù)的,所以把上面的代碼鼓搗成裝飾器的樣子(其實實現(xiàn)的功能一樣,但寫法和上圖不一樣)。

image

首先也是定義了deco函數(shù),參數(shù)是函數(shù)func,里面又定義了一個wrapper函數(shù),把它當(dāng)固定格式。然后發(fā)現(xiàn)定義函數(shù)func的時候上面加了一行@deco,這就是裝飾器的用法了。在輸出結(jié)果時發(fā)現(xiàn)直接func()就出結(jié)果了,反而deco(func)沒結(jié)果??梢岳斫鉃閒unc函數(shù)被deco修飾之后加上了deco的功能~

還要理解的就是deco中func只是形參,只是剛好后面定義函數(shù)時用了一樣的命名,所以把@后面一行的函數(shù)名更換也是一樣的。

image

由此也就看出裝飾器的好處了,使用修飾器,盡管只是運行了下面的love函數(shù),但不再是定義的初始函數(shù),而是被修飾過的函數(shù)了。注意,修飾器只修飾和它緊挨的函數(shù)。這就是修飾器的入門,之后再理解傳參數(shù)就很容易了。

關(guān)于Flask中的修飾器應(yīng)該可以能理解一點了,對于例子中,目前只需要知道修飾器傳入的url規(guī)則和下面的函數(shù)相對應(yīng)就好了。

「 http://127.0.0.1:5000 」

這個網(wǎng)址是程序默認(rèn)掛載的網(wǎng)址以及端口,也就是根地址,其實就是本機地址。所以@app.route('/')以及下面的函數(shù)就代表根地址和它的顯示內(nèi)容。同樣的@app.route('/today')對應(yīng)的網(wǎng)址是http://127.0.0.1:5000/today。

[彩蛋]

在學(xué)習(xí)的過程中,發(fā)現(xiàn)在app實例后面加上一行'app.config['DEBUG']=True'后,只要你的代碼發(fā)生了改變,就會自動重啟flask(修改代碼后過幾秒終端就輸出以下內(nèi)容),然后直接刷新頁面就可以,這就是傳說中的DEBUG模式。

image

02

遇到的小問題


01 Q:關(guān)于每次ctrl+c關(guān)閉服務(wù)器仍會占用端口
A:剛開始不知道有DEBUG模式,所以一修改代碼就要重新運行,但會返回錯誤說端口已占用。必須使用kill命令殺死stop進程,才能繼續(xù)運行。當(dāng)然有了DEBUG誰還搞這個~

「結(jié)束語」:學(xué)習(xí)新知識總是有趣且枯燥,但道阻且長,行則將至。之后可能就數(shù)據(jù)庫前端以及web框架同步學(xué)習(xí),下期見啦(最后感謝陌生朋友們的關(guān)注)~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容