Flask了解和基礎(chǔ)配置及使用

資源:
Flakl-SQLAlchemy快速入門
Flask中文文檔網(wǎng)頁
Tornado中文文檔網(wǎng)頁


1. Flask介紹

2. 安裝flask

3. 基于flask的最小的應(yīng)用

4. 管理啟動項(xiàng)目 Manager

5. Blueprint(藍(lán)圖)

6. 請求與響應(yīng)

7. 異常捕獲

8. 路徑(route)規(guī)則


1. Flask介紹

  1. Flask是一個基于Python實(shí)現(xiàn)的web開發(fā)的'微'框架

  2. Flask和Django一樣,也是一個基于MVC設(shè)計(jì)模式的Web框架

  3. flask流行的主要原因:
    a. 有非常齊全的官方文檔慎冤,上手非常方便
    b. 有非常好的拓展機(jī)制和第三方的拓展環(huán)境砌创,工作中常見的軟件都有對應(yīng)的拓展虏缸,自己動手實(shí)現(xiàn)拓展也很容易
    c. 微型框架的形式給了開發(fā)者更大的選擇空間

2. 安裝flask

2.1. 虛擬環(huán)境搭建

virtualenv --no-site-packages flaskenv
激活windows下虛擬環(huán)境
cd Scripts
activate

2.2. 安裝

pip install flask

2.3.使用

用PyCharm 項(xiàng)目文件夾,選擇配置的虛擬環(huán)境

3. 基于flask的最小的應(yīng)用

創(chuàng)建hello.py文件

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World'
?
if __name__ == '__main__':
    app.run()

運(yùn)行:python hello.py

3.1. 初始化

app = Flask(__name__)

Flask類構(gòu)造函數(shù)唯一需要的參數(shù)就是應(yīng)用程序的主模塊或包。對于大多數(shù)應(yīng)用程序嫩实,Python的__name__變量就是那個正確的刽辙、你需要傳遞的值。Flask使用這個參數(shù)來確定應(yīng)用程序的根目錄甲献,這樣以后可以相對這個路徑來找到資源文件宰缤。

3.2. 路由

@app.route('/')

客戶端例如web瀏覽器發(fā)送 請求 給web服務(wù),進(jìn)而將它們發(fā)送給Flask應(yīng)用程序?qū)嵗?yīng)用程序?qū)嵗枰缹τ诟鱾€URL請求需要運(yùn)行哪些代碼慨灭,所以它給Python函數(shù)建立了一個URLs映射朦乏。這些在URL和函數(shù)之間建立聯(lián)系的操作被稱之為 路由 。

在Flask應(yīng)程序中定義路由的最便捷的方式是通過顯示定義在應(yīng)用程序?qū)嵗系腶pp.route裝飾器氧骤,注冊被裝飾的函數(shù)來作為一個路由

3.3 視圖函數(shù)

在上一個示例給應(yīng)用程序的根URL注冊hello_world()函數(shù)作為事件的處理程序呻疹。如果這個應(yīng)用程序被部署在服務(wù)器上并綁定了 www.example.com 域名,然后在你的瀏覽器地址欄中輸入 http://www.example.com 將觸發(fā)gello_world()來運(yùn)行服務(wù)筹陵」舸福客戶端接收到的這個函數(shù)的返回值被稱為 響應(yīng) 。如果客戶端是web瀏覽器惶翻,響應(yīng)則是顯示給用戶的文檔姑蓝。

類似于hello_world()的函數(shù)被稱作: 視圖函數(shù) 。

3.4. 動態(tài)名稱組件路由

你的Facebook個人信息頁的URL是 http://www.facebook.com/<username> 吕粗,所以你的用戶名是它的一部分。Flask在路由裝飾器中使用特殊的語法支持這些類型的URLs旭愧。下面的示例定義了一個擁有動態(tài)名稱組件的路由:

@app.route('/hello/<name>')
def gello_world(name):
    return 'Hello World %s' % name

用尖括號括起來的部分是動態(tài)的部分颅筋,所以任何URLs匹配到靜態(tài)部分都將映射到這個路由。當(dāng)視圖函數(shù)被調(diào)用输枯,F(xiàn)lask發(fā)送動態(tài)組件作為一個參數(shù)议泵。在前面的示例的視圖函數(shù)中,這個參數(shù)是用于生成一個個性的問候作為響應(yīng)桃熄。
在路由中動態(tài)組件默認(rèn)為字符串先口,但是可以定義為其他類型。例如瞳收,路由/user/<int:id>只匹配有一個整數(shù)在id動態(tài)段的URLs碉京。Flask路由支持int、float

3.5. 服務(wù)啟動

if __name__ == '__main__':
    app.run()

注意: __name__ == '__main__'在此處使用是用于確保web服務(wù)已經(jīng)啟動當(dāng)腳本被立即執(zhí)行螟深。當(dāng)腳本被另一個腳本導(dǎo)入谐宙,它被看做父腳本將啟動不同的服務(wù),所以app.run()調(diào)用會被跳過界弧。

一旦服務(wù)啟動凡蜻,它將進(jìn)入循環(huán)等待請求并為之服務(wù)。這個循環(huán)持續(xù)到應(yīng)用程序停止垢箕,例如通過按下Ctrl-C划栓。
有幾個選項(xiàng)參數(shù)可以給app.run()配置web服務(wù)的操作模式。在開發(fā)期間条获,可以很方便的開啟debug模式忠荞,將激活 debugger 和 reloader 。這樣做是通過傳遞debug為True來實(shí)現(xiàn)的。
run()中參數(shù)有如下:
debug 是否開啟調(diào)試模式钻洒,開啟后修改python的代碼會自動重啟
port 啟動指定服務(wù)器的端口號
host主機(jī)奋姿,默認(rèn)是127.0.0.1
a. 運(yùn)行默認(rèn)IP == 127.0.0.1:5000
b. app.run(port=8080, host= '0.0.0.0', debug=True)

4. 管理啟動項(xiàng)目 Manager

4.1. 安裝插件

pip install flask-script
調(diào)整代碼

from flask_script import Manager
manager = Manager(app=‘自定義的flask對象’)


if __name__ == '__main__':
    manager.run()

4.2. 啟動命令

python hellow.py runserver -h 地址 -p 端口 -d -r
其中:-h表示地址。-p表示端口素标。-d表示debug模式称诗。-r表示自動重啟

5. Blueprint(藍(lán)圖)

5.1. 什么是藍(lán)圖

在Flask項(xiàng)目中可以用Blueprint(藍(lán)圖)實(shí)現(xiàn)模塊化的應(yīng)用蛾坯,使用藍(lán)圖可以讓應(yīng)用層次更清晰痊末,開發(fā)者更容易去維護(hù)和開發(fā)項(xiàng)目责蝠。藍(lán)圖將作用于相同的URL前綴的請求地址秒梳,將具有相同前綴的請求都放在一個模塊中咱士,這樣查找問題蚁飒,一看路由就很快的可以找到對應(yīng)的視圖榛鼎,并解決問題了乞封。

5.2. 使用藍(lán)圖

a. 安裝
`pip install flask_blueprint`
b 實(shí)例化藍(lán)圖應(yīng)用
from flask import Blueprint

blue = Blueprint(‘first’,__name__)

注意:Blueprint中傳入了兩個參數(shù)鲫惶,第一個是藍(lán)圖的名稱蜈首,第二個是藍(lán)圖所在的包或模塊,name代表當(dāng)前模塊名或者包名

c 注冊
app = Flask(__name__)
app.register_blueprint(blue, url_prefix='/user')

注意:第一個參數(shù)即我們定義初始化定義的藍(lán)圖對象欠母,第二個參數(shù)url_prefix表示該藍(lán)圖下欢策,所有的url請求必須以/user開始。這樣對一個模塊的url可以很好的進(jìn)行統(tǒng)一管理

5.3 使用藍(lán)圖

修改視圖上的裝飾器赏淌,修改為@blue.router(‘/’)

@blue.route('hello/', methods=['GET', 'POST'])
    def hello():
        # 視圖函數(shù)
        return 'Hello World'

url為127.0.0.1:5000/user/hello/

5.4 跳轉(zhuǎn)路徑

from flask import render_template, redirect, url_for

a. 跳轉(zhuǎn)到template中html文件

return render_template('xxx.html', name1=value1, name2=value2)

b. 目標(biāo)路徑 path

return redirect('/app/hello_world/')

c. 反向解析

url_for('藍(lán)圖的第一個參數(shù).跳轉(zhuǎn)到某個函數(shù)的函數(shù)名')
return redirect(url_for('first.hello'))


6. 請求與響應(yīng)

常用的請求類型有如下幾種

類型 說明
GET 獲取
POST 創(chuàng)建
PUT 修改(全部屬性都修改)
DELETE 刪除
PATCH 修改(修改部分屬性)

6.1. 請求: 客戶端傳到服務(wù)端

request
如果是GET請求: 獲取get請求中的參數(shù),使用request.args.get('key')
如果是POST / PUT / PATCH / DELETE 請求: 獲取請求中的參數(shù),使用request.form.get('key');
getlist('key') - 獲取key重復(fù)的value值,結(jié)果是列表

@blueprint.route('request/', methods=['GET', 'POST', 'PUT', 'PATCH', 'DELETE'])
def get_request():
    request
    return 'i am request'

6.2. 響應(yīng): 是服務(wù)端返回給客戶端的

比如設(shè)置cookie值
from flask import make_response
make_response

@blueprint.route('response/', methods=['GET'])
def get_response():
    res = make_response('<h2>i am response</h2>', 200)
    return res

7. 異常捕獲

7.1. abort() - 拋出異常

from flask import abort

@blueprint.route('error/', methods=['get'])
def error():
    a = 9
    b = 0
    try:
        c = a / b
    except:
        abort(500)
    return '%s/%s=%s'(a, b, c)

7.2. errohandler() - 捕獲異常

@blueprint.errorhandler(500)
def handler_500(exception):
    return '捕捉異常信息: %s' % exception

8. 路徑(route)規(guī)則

8.1. 規(guī)則

寫法:<converter:variable_name>
轉(zhuǎn)換(converter)類型

類型 說明
string 字符串
int 整形
float 浮點(diǎn)型
path 接受路徑踩寇,接收的時候是str,/也當(dāng)做字符串的一個字符
uuid 只接受uuid字符串
any 可以同時指定多種路徑六水,進(jìn)行限定

例子:

# route匹配規(guī)則
# 1. <string:xxx> 獲取到xxx的參數(shù)的值為字符串類型
# 2. <xxx> 默認(rèn)獲取到xxx的參數(shù)的值為字符串類型
# 3. <int:xxx> 獲取到的xxx的參數(shù)的值為整型類型
# 4. <float:xxx> 獲取到的xxx的參數(shù)的值為浮點(diǎn)型
# 5. <path:xxx> 獲取到的xxx的參數(shù)的值為路徑后面的全部url地址
# 6. <uuid:xxx> 獲取到的xxx的參數(shù)的值為uuid格式: 06c2a195-13ce-44a0-2453-cc6b0e7e08c4
@blueprint.route('name/<string:s_name>/')
def get_name(s_name):
    return '姓名:%s' % s_name


@blueprint.route('age/<age>/')
def get_age(age):
    return 'age:%s' % age


@blueprint.route('int_age/<int:age>')
def get_int_age(age):
    return '年齡:%s' % age


@blueprint.route('float/<float:number>')
def get_float_number(number):
    return '浮點(diǎn)型:%.2f' % number


# 獲取path后面的所有路徑: /s3r/324/sff/..
@blueprint.route('path/<path:s_path>')
def get_path(s_path):
    return '路徑: %s' % s_path


@blueprint.route('get_uuid/')
def get_uuid():
    a = uuid.uuid4()
    return 'uuid: %s' % str(a)


@blueprint.route('uuid/<uuid:s_uuid>')
def get_by_uuid(s_uuid):
    return '獲取uuid: %s' % s_uuid
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末俺孙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子掷贾,更是在濱河造成了極大的恐慌睛榄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胯盯,死亡現(xiàn)場離奇詭異懈费,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)博脑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門憎乙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人叉趣,你說我怎么就攤上這事泞边。” “怎么了疗杉?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵阵谚,是天一觀的道長蚕礼。 經(jīng)常有香客問我,道長梢什,這世上最難降的妖魔是什么奠蹬? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嗡午,結(jié)果婚禮上囤躁,老公的妹妹穿的比我還像新娘。我一直安慰自己荔睹,他們只是感情好狸演,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著僻他,像睡著了一般宵距。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吨拗,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天满哪,我揣著相機(jī)與錄音,去河邊找鬼劝篷。 笑死翩瓜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的携龟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼勘高,長吁一口氣:“原來是場噩夢啊……” “哼峡蟋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起华望,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤蕊蝗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赖舟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓬戚,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年宾抓,在試婚紗的時候發(fā)現(xiàn)自己被綠了子漩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡石洗,死狀恐怖幢泼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讲衫,我是刑警寧澤缕棵,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響招驴,放射性物質(zhì)發(fā)生泄漏篙程。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一别厘、第九天 我趴在偏房一處隱蔽的房頂上張望虱饿。 院中可真熱鬧,春花似錦丹允、人聲如沸郭厌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽折柠。三九已至批狐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嚣艇,已是汗流浹背承冰。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工困乒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贰谣。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像吱抚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秘豹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 22年12月更新:個人網(wǎng)站關(guān)停携御,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,165評論 22 257
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)既绕,斷路器啄刹,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 快速開始 在安裝Sanic之前,讓我們一起來看看Python在支持異步的過程中岸更,都經(jīng)歷了哪些比較重大的更新鸵膏。 首先...
    hugoren閱讀 19,506評論 0 23
  • typora-copy-images-to: ipic [TOC] 快速開始 在安裝Sanic之前,讓我們一起來看...
    君惜丶閱讀 14,088評論 3 18
  • 《變態(tài)》 /南倚閑坐 什么是你本身 為什么 總要變態(tài) 神化 魔化 獸化 認(rèn)認(rèn)真真的 做一個人 很難受嗎怎炊?
    南倚閑坐閱讀 273評論 0 0