hello Flask

目錄目錄
已經(jīng)介紹過(guò)了Flask和API,讓我們快速進(jìn)入正題吧

安裝flask

前言:推薦window系統(tǒng)使用Powershell硬耍。并安裝好python3.5即以上版本窗慎,你可以用一下語(yǔ)句確認(rèn)環(huán)境的正確性(原視頻源是mac系統(tǒng)个束,魚搬運(yùn)將會(huì)用windows或linux作示例):

PS C:\Users\avs16894\Desktop\resttest> python -V
Python 3.7.3
PS C:\Users\avs16894\Desktop\resttest> pip3 -V
pip 19.1.1 from c:\users\avs16894\appdata\local\programs\python\python37\lib\site-packages\pip (python 3.7)

如果報(bào)錯(cuò)找不到指令恍涂,請(qǐng)問(wèn)問(wèn)周圍有識(shí)之士或者谷歌,這里不贅述。
安裝Flask

PS C:\Users\avs16894\Desktop\learn_flask> pip3 install flask
(ll_env) PS C:\Users\avs16894\Desktop\learn_flask> pip3 freeze
Click==7.0
Flask==1.0.3
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.4
#可以看出來(lái)flask連帶安裝了很多包

參考項(xiàng)目

示例項(xiàng)目

你的第一個(gè)Flask應(yīng)用

from flask import Flask

#創(chuàng)建flask對(duì)象
app = Flask(__name__)

#創(chuàng)建路由'/'
@app.route('/')#http://www.google.com/
def home():
    return "Hello,World!"
#當(dāng)用戶請(qǐng)求'/'資源時(shí)粱腻,回傳"Hello,World!"

#啟動(dòng)flask庇配,并設(shè)定端口為5000
app.run(port = 5000)

運(yùn)行此程式

(ll_env) PS C:\Users\avs16894\Desktop\learn_flask> python .\test.py
 * Serving Flask app "test" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

可以看到此flask運(yùn)行在本機(jī)127.0.0.1的5000端口上
下面我們就可以請(qǐng)求這個(gè)掛載在http://127.0.0.1:5000/的REST API,并獲得"Hello,World!"的回覆了绍些。

HTTP服務(wù)

什么是web server捞慌?

一個(gè)軟件用來(lái)設(shè)計(jì)成回覆接受到的網(wǎng)絡(luò)請(qǐng)求

我們發(fā)送請(qǐng)求是發(fā)送了什么?

#一個(gè)最簡(jiǎn)單的請(qǐng)求
GET / HTTP/1.1
Host: www.google.com

一共分為四個(gè)部分柬批,我們分別來(lái)看
GET ->HTTP的動(dòng)作
/ ->請(qǐng)求的資源地址
HTTP/1.1 ->HTTP版本
Host: www.google.com ->請(qǐng)求的地址

想知道更多的HTTP動(dòng)作(Verbs)可以自行谷歌

創(chuàng)建一些路由處理請(qǐng)求

#..................
# POST /store date: {name:}
@app.route('/store',methods = ['POST'])
def create_store():
    pass
# GET /store/<string:name>
@app.route('/store/<string:name>',methods = ['GET'])#such as http://127.0.0.1:5000/store/ocango
def get_store(name):
    pass
# GET /store
# POST /store/<string:name>/item {name:,price:}
# GET /store/<string:name>/item

以上主要是兩種示例啸澡。
一種是如何設(shè)定當(dāng)前路由接受的請(qǐng)求,

#設(shè)定只處理POST請(qǐng)求
methods = ['POST']

還有一種是講路由中的資源目錄當(dāng)做參數(shù)處理氮帐。

#只處理GET請(qǐng)求嗅虏,且路由是store目錄下的變量name,name可以在方法中作變量處理上沐。
@app.route('/store/<string:name>',methods = ['GET'])

還有三種就不贅述了

#以上五個(gè)示例可以參考以下的數(shù)據(jù)結(jié)構(gòu)
store = [
    {
        'name':'My first store',
        'items':[
            {
                'name': 'My Item',
                'price':57.99
            }
        ]
    }
]

Response by list 用列表作回覆

什么是JSON

JSON的表現(xiàn)形式是字符串皮服,但卻是個(gè)對(duì)象。一般我們對(duì)于對(duì)象的序列化参咙,就是轉(zhuǎn)化為JSON或者XML龄广。JSON源自JS,用{}表示字典蕴侧,用[]表示列表择同。

flask中序列化

from flask import jsonity
# 可以用jsonity來(lái)json序列化關(guān)鍵詞參數(shù)或者位置參數(shù)
return jsonity(1,2,3,4)
return jsonity(name = name,age = age)

處理請(qǐng)求內(nèi)容

導(dǎo)入request包

from flask import request
# POST /store date: {name:}
@app.route('/store',methods = ['POST'])
def create_store():
    if request.is_json:#確認(rèn)請(qǐng)求body是json
        request_date = request.get_json()#獲得json內(nèi)容
        new_store = {
            'name' : request_date['name'],
            'item' : []
        }
        store.append(new_store)
        print(store)
    return jsonify(status = 'OK')#返回成功

另外處理常見(jiàn)的GET請(qǐng)求url上的參數(shù)也可以使用

request.args.get("key") #獲取get請(qǐng)求參數(shù)

詳細(xì)可以參考下文
Flask request獲取參數(shù)問(wèn)題 by 碼農(nóng)的happy_life

POSTMAN

推薦使用POSTMAN測(cè)試API,當(dāng)然JS水平夠净宵,用JS寫也可以敲才,或者linux的curl測(cè)試

返回HTML頁(yè)面

#創(chuàng)建JS文件如下,放在根目錄./templates/文件夾下
<html>
<head>
<script type="text/javascript">
// 向theurl發(fā)出GET請(qǐng)求择葡,異步哦
    function httpGetAsync(theUrl, callback) {
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.onreadystatechange = function() {
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200)
                callback(xmlHttp.responseText);
        }
        xmlHttp.open("GET", theUrl, true); // true for asynchronous
        xmlHttp.send(null);
    }
    httpGetAsync("http://127.0.0.1:5000/store",function(response){
        alert(response);
    })
//同時(shí)用js發(fā)請(qǐng)求給http://127.0.0.1:5000/store
</script>
</head>
<body>

<div id="myElement">
    Hello, world!
</div>

</body>
</html>

flask中路由如下寫法

@app.route('/')#http://www.google.com/
def home():
    return render_template('index.html')
#flask會(huì)自行尋找templates目錄下index.html

以上即入門簡(jiǎn)介紧武,我們學(xué)習(xí)到了:
如何安裝flask
如何用flask書寫一個(gè)API接口
如何處理request,并response
如何用POSTMAN和JS發(fā)出request
下一章
更多的有關(guān)FLASK API的事

回到目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刁岸,一起剝皮案震驚了整個(gè)濱河市脏里,隨后出現(xiàn)的幾起案子她我,更是在濱河造成了極大的恐慌虹曙,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件番舆,死亡現(xiàn)場(chǎng)離奇詭異酝碳,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)恨狈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門疏哗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人禾怠,你說(shuō)我怎么就攤上這事返奉”锤椋” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵芽偏,是天一觀的道長(zhǎng)雷逆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)污尉,這世上最難降的妖魔是什么膀哲? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮被碗,結(jié)果婚禮上某宪,老公的妹妹穿的比我還像新娘。我一直安慰自己锐朴,他們只是感情好兴喂,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著包颁,像睡著了一般瞻想。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上娩嚼,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天蘑险,我揣著相機(jī)與錄音,去河邊找鬼岳悟。 笑死佃迄,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贵少。 我是一名探鬼主播呵俏,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼滔灶!你這毒婦竟也來(lái)了普碎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤录平,失蹤者是張志新(化名)和其女友劉穎麻车,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體斗这,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡动猬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了表箭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赁咙。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出彼水,到底是詐尸還是另有隱情崔拥,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布凤覆,位于F島的核電站握童,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叛赚。R本人自食惡果不足惜澡绩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望俺附。 院中可真熱鬧肥卡,春花似錦、人聲如沸事镣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)璃哟。三九已至氛琢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間随闪,已是汗流浹背阳似。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铐伴,地道東北人撮奏。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像当宴,于是被迫代替她去往敵國(guó)和親畜吊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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