上一章中已经介绍了如何安装和使用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 |