目錄目錄
已經(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)目
你的第一個(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的事