上一章中已經介紹瞭如何安裝和使用flask,下面開始搭建一個RESTful架構的services了,RESTful架構在第一章中就已經進行了介紹,簡單的說我們要用HTTP的4個方法來操作我們的伺服器資源,這章的任務就是上flask建立4個HTTP方法的動作,這裡使用學生資訊庫為用例;
學生資訊資源為:
資源名稱 | 資源型別 |
學生號 | int |
姓名 | str |
年齡 | int |
籍貫 | str |
平均分 | float |
第一步先將資料儲存在記憶體中,使用資料庫進行資訊儲存在之後章節再繼續介紹;
1、建立flask伺服器
首先與第二章的用例相同建立一個flask的伺服器:
1 2 3 4 5 6 7 8 9 |
form flask import Flask app = 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,通常用來上傳資訊:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
from flask import jsonify from flask import request students = [] @app.route('/student/', methods=['POST']) def add_student(): if not request.json or not 'id' in request.json or not 'name' in request.json or not 'age' int request.json or not 'birthplace' in request.json or not 'grade' in request.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命令來進行測試:
1 2 3 4 5 6 7 8 9 |
curl -i -H "Content-Type: application/json" -X POST '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命令為:
1 2 3 4 5 6 7 |
curl -i -H "Content-Type: application/json" -X PUT 'http://192.168.1.1:1234/student?id=1312441' \ -d \ ‘{ \ "birthplace":"beijin", \ "age":20, \ "grade":90 }’ |
以uri中引數的數值作為key,查詢需要修改的資訊條目,服務端程式碼為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from flask import jsonify from flask import request from flask import make_response students = [] @app.route('/students', methods = 'PUT') def update_students(): if not request.args or not 'id' in request.args: abort(400) update_id = request.args['id'] update_id = int(update_id) student = filter(lambda t: t['id'] == update_id, students) if len(student) == 0: abort(400) if not request.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']) return jsonify({student:student[0]}) |
如果找不到指定id的學生就會返回400錯誤,如果修改成功則返回修改後的學生資訊;
4、DELETE:刪除指定資訊
使用DELETE來刪除指定的學生資訊,相應的請求資訊為:
1 |
curl -X DELETE 'http://192.168.1.1:1234/student?id=1312441' |
服務端處理程式碼為
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from flask import jsonify from flask import request from flask import make_response students = [] @app.route('/students', methods = 'DELETE') def delete_students(): if not request.args: abort(400) if 'id' in request.args: d_id = request.args['id'] d_id = int(d_id) student = filter(lambda t: t['id'] == d_id, students) if len(student) == 0: abort(400) students.remove(student[0]) return "success" |
5、GET:獲取資訊
使用GET方法獲取學生資訊,相應請求資訊為:
1 |
curl -X GET 'http://192.168.1.1:1234/student?id=1312441' |
服務端處理程式碼為:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from flask import jsonify from flask import request from flask import make_response students = [] @app.route('/students', methods = 'GET') def delete_students(): if not request.args: abort(400) get_id = request.args['id'] get_id = int(get_id) student = filter(lambda t: t['id'] == get_id, students) if len(student) == 0: abort(400) return jsonify({'student':student[0]}) |
實現了4個方法後,一個簡單的web伺服器就成型了。更復雜的功能可以在此基礎上繼續加強,下一章將介紹如何使用flask+資料庫來存取資料;