Flask是非常流行的 Python Web框架,它能如此流行,原因主要有如下幾點(diǎn):
。有非常齊全的官方文檔,上手非常方便。
。有非常好的擴(kuò)展機(jī)制和第三方擴(kuò)展環(huán)境,.工作中常見的軟件都會(huì)有對(duì)應(yīng)的擴(kuò)展。自己動(dòng)手實(shí)現(xiàn)擴(kuò)展也很容易。
。社區(qū)活躍度非常高。
。微框架的形式給開發(fā)者更大的選擇空間。
.Pocoo團(tuán)隊(duì)出品,F(xiàn)lask和相關(guān)依賴(Jinja2、Werkzeug )的設(shè)計(jì)很優(yōu)秀。比如使用裝飾器配置路由、用Blueprint實(shí)現(xiàn)模塊化、請(qǐng)求/應(yīng)用上下文等。
我們可以從Flask框架入手,之后再學(xué)習(xí)Django框架
1、開啟一個(gè)簡單的應(yīng)用
1、安裝Flask
pip install Flask
2、開始一個(gè)簡單的應(yīng)用,創(chuàng)建一個(gè)文件web.py
#--coding:utf-8
from flask import Flask
app = Flask(__name__)
@app.route('/show/index')
def func():
return "我愛我的祖國"
if __name__ == '__main__':
app.run()
運(yùn)行web.py
在瀏覽器打開,輸入http://127.0.0.1:5000/show/index 看到如下效果:
下面我們來解釋下上面幾行代碼
第1行 ,#–coding:utf-8 :是聲明Python源文件編碼的語法。該編碼信息后續(xù)會(huì)被Python解析器用于解析源文件。如果沒有特殊的原因,應(yīng)該統(tǒng)一地使用utf-8,而不要使用gb18030,gb2312等類型。
第2行,引入Flask類,Flask類實(shí)現(xiàn)了一個(gè)wSGI應(yīng)用。
第4行,app是 Flask的實(shí)例,它接收包或者模塊的名字作為參數(shù),但-般都是傳遞__name__。讓flask.helpers.get_root_path函數(shù)通過傳入這個(gè)名字確定程序的根目錄,以便獲得靜態(tài)文件和模板文件的目錄。
第6~8行,使用app.route裝飾器會(huì)將URL和執(zhí)行的視圖函數(shù)的關(guān)系保存到app.url_map屬性上。處理URL和視圖函數(shù)的關(guān)系的程序就是路由,這里的視圖函數(shù)就是func。裝飾器里面的url就是我們?cè)L問的路徑。
第11行,執(zhí)行app.run就可以啟動(dòng)服務(wù)了。默認(rèn)Flask只監(jiān)聽虛擬機(jī)的本地127.0.0.1這個(gè)地址,端口為5000。如果要修改端口就需要加參數(shù) app.run(host=‘0.0.0.0’,port=8080)。0.0.0.0表示監(jiān)聽所有地址,這樣就可以在本機(jī)訪問了。指定了8080端口后,瀏覽器要訪問 http://127.0.0.1:8080/show/index
注意,默認(rèn)的app.run的啟動(dòng)方式只適合調(diào)試,不要在生產(chǎn)環(huán)境中使用,生產(chǎn)環(huán)境應(yīng)該使用Gunicorn或者uwSGI
2、配置管理
項(xiàng)目中的一些全局的配置我們應(yīng)該存放到一個(gè)文件中,app.config支持多種更新配置的方式。假如現(xiàn)在有個(gè)config.py的配置文件,其中的內(nèi)容如下:
A=1
方式一:
app.config.from_object('config') #通過字符串的模塊名字
#或者引用之后直接傳入模塊對(duì)象
import comfig
app.config.from_object(config)
方式二:
通過文件名字加載。直接傳入文件名字,但是不限于只使用.py后綴的文件名。
app.config.from_pyfile('config.py', silent=True) #默認(rèn)當(dāng)配置文件不存在時(shí)會(huì)拋出異常,使用silent=True的時(shí)候只是返回False,但不會(huì)拋出異常
動(dòng)態(tài)url 規(guī)則
URL 規(guī)則可以添加變量部分,也就是將符合同種規(guī)則的URL抽象成一個(gè)URL模式,如/item/1/ 、/litem/2/、/item/3.…我們就得這樣寫:
#--coding:utf-8
from flask import Flask
app = Flask(__name__)
@app.route('/item/<id>/')
def item(id):
return 'Item:{}'.format(id)
if __name__ == '__main__':
app.run()
運(yùn)行后:
尖括號(hào)中的內(nèi)容是動(dòng)態(tài)的,凡是匹配到/item/前綴的URL都會(huì)被映射到這個(gè)路由上,在內(nèi)部把id作為參數(shù)而獲得。
它使用了特殊的字段標(biāo)記<variable_name>,默認(rèn)類型是字符串。如果需要指定參數(shù)類型需要標(biāo)記成converter:variable_name這樣的格式,converter有下面幾種:
- string:接受任何沒有斜杠“/”的文本(默認(rèn))。
- int:接受整數(shù)。
- float:同 int,但是接受浮點(diǎn)數(shù)。
- path:和默認(rèn)的相似,但也接受斜杠。
- uuid:只接受uuid字符串。
- any:可以指定多種路徑,但是需要傳入?yún)?shù)。
調(diào)試模式
雖然app.run這樣的方式適用于啟動(dòng)本地的開發(fā)服務(wù)器,但是每次修改代碼后都要手動(dòng)重啟的話,比較麻煩。如果啟用了調(diào)試模式,服務(wù)器會(huì)在代碼修改后自動(dòng)重新載入,并在發(fā)生錯(cuò)誤時(shí)提供一個(gè)能獲得錯(cuò)誤上下文及可執(zhí)行代碼的調(diào)試頁面
有兩種途徑來啟動(dòng)調(diào)試模式:
1、直接在應(yīng)用對(duì)象上設(shè)置:
app.debug = True
app.run()
2、作為run的參數(shù)傳入
app.run(debug=True)
啟動(dòng)后文章來源:http://www.zghlxwxcb.cn/news/detail-559014.html
F:\myfile\python\code\webproject\venv\Scripts\python.exe F:/myfile/python/code/webproject/web.py
* Serving Flask app 'web'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 343-485-244
當(dāng)程序有異常而進(jìn)入錯(cuò)誤堆棧模式,第一次點(diǎn)擊某個(gè)堆棧想查看對(duì)應(yīng)變量的值的時(shí)候,瀏覽器會(huì)彈出一個(gè)要求你輸入這個(gè)PIN值的輸入框。這個(gè)時(shí)候需要在輸人框中輸入343-485-244,然后確認(rèn),Werkzeug會(huì)把這個(gè)PIN作為cookie的一部分存起來(失效時(shí)間默認(rèn)是8小時(shí)),失效之前不需要重復(fù)輸入。而這個(gè)PIN碼攻擊者是無法知道的。文章來源地址http://www.zghlxwxcb.cn/news/detail-559014.html
到了這里,關(guān)于使用flask開啟一個(gè)簡單的應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!