使用flask開發RESTful架構的api伺服器端(3)–簡單的RESTful services
阿新 • • 發佈:2018-12-23
學生資訊資源為:
資源名稱 | 資源型別 |
學生號 | int |
姓名 | str |
年齡 | int |
籍貫 | str |
平均分 | float |
第一步先將資料儲存在記憶體中,使用資料庫進行資訊儲存在之後章節再繼續介紹;
1、建立flask伺服器
首先與第二章的用例相同建立一個flask的伺服器:
123456789 | form flask import Flaskapp=Flask(__name__)@app.route('/')def welcome():return"Welcome to studement management system!"app.run(host="192.168.1.1",post=1234,debug=True) |
這樣就在192.168.1.1的1234埠上開啟了監聽伺服器了,此時服務端只對’/’請求有響應,其它路徑的響應都會返回404錯誤碼;
2、POST:上傳資訊
HTTP4個方法的第一個是POST,通常用來上傳資訊:
123456789101112131415161718 | from flask import jsonifyfrom flask import requeststudents=[]@app.route('/student/',methods=['POST'])def add_student():ifnotrequest.json ornot'id'inrequest.json ornot'name'inrequest.json ornot'age'intrequest.json ornot'birthplace'inrequest.json ornot'grade'inrequest.json:abort(400)student={'id':request.json['id'],'name':request.json['name'],'age':request.json.get('age',""),'birthplace':request.json.get('birthplace',""),'grade':request.json['grade']}students.append(student)return"success" |
使用flask的request方法可以很方便的得到請求資料,使用json來進行資料傳輸也是非常好用的方法,使用curl命令來進行測試:
Python123456789 | curl-i-H"Content-Type: application/json"-XPOST'http://192.168.1.1:1234/student'\-d\‘{\“id”:1312441,\"name":"lucy",\"birthplace":"beijin",\"age":20,\"grade":90}’ |
注意需要將Content-Type設定為json flask的request模組才會對請求資料部分做json格式得解析;
如果返回200狀態碼並回復success,則資料新增成功;
3、PUT:更新資訊
PUT方法通常用來進行資料的更新,相應的curl命令為:
Python1234567 | curl-i-H"Content-Type: application/json"-XPUT'http://192.168.1.1:1234/student?id=1312441'\-d\‘{\"birthplace":"beijin",\"age":20,\"grade":90}’ |
以uri中引數的數值作為key,查詢需要修改的資訊條目,服務端程式碼為:
123456789101112131415161718192021222324 | from flask import jsonifyfrom flask import requestfrom flask import make_responsestudents=[]@app.route('/students',methods='PUT')def update_students():ifnotrequest.args ornot'id'inrequest.args:abort(400)update_id=request.args['id']update_id=int(update_id)student=filter(lambdat:t['id']==update_id,students)iflen(student)==0:abort(400)ifnotrequest.json:abort(403)student[0]['name']=request.json.get('name',student[0]['name'])student[0]['age']=request.json.get('age',student[0]['age'])student[0]['grade']=request.json.get('grade',student[0]['grade'])student[0]['birthplace']=request.json.get('birthplace',student[0]['birthplace'])returnjsonify({student:student[0]}) |
如果找不到指定id的學生就會返回400錯誤,如果修改成功則返回修改後的學生資訊;
4、DELETE:刪除指定資訊
使用DELETE來刪除指定的學生資訊,相應的請求資訊為:
1 | curl-XDELETE'http://192.168.1.1:1234/student?id=1312441' |
服務端處理程式碼為
12345678910111213141516171819 | from flask import jsonifyfrom flask import requestfrom flask import make_responsestudents=[]@app.route('/students',methods='DELETE')def delete_students():ifnotrequest.args:abort(400)if'id'inrequest.args:d_id=request.args['id']d_id=int(d_id)student=filter(lambdat:t['id']==d_id,students)iflen(student)==0:abort(400)students.remove(student[0])return"success" |
5、GET:獲取資訊
使用GET方法獲取學生資訊,相應請求資訊為:
1 | curl-XGET'http://192.168.1.1:1234/student?id=1312441' |
服務端處理程式碼為:
12345678910111213141516 | from flask import jsonifyfrom flask import requestfrom flask import make_responsestudents=[]@app.route('/students',methods='GET')def delete_students():ifnotrequest.args:abort(400)get_id=request.args['id']get_id=int(get_id)student=filter(lambdat:t['id']==get_id,students)iflen(student)==0:abort(400)returnjsonify({'student':student[0]}) |
實現了4個方法後,一個簡單的web伺服器就成型了。更復雜的功能可以在此基礎上繼續加強,下一章將介紹如何使用flask+資料庫來存取資料;