上一章中已经介绍了如何安装和使用flask,下面开始搭建一个RESTful架构的services了,RESTful架构在第一章中就已经进行了介绍,简单的说我们要用HTTP的4个方法来操作我们的服务器资源,这章的任务就是上flask创建4个HTTP方法的动作,这里使用学生信息库为用例;
学生信息资源为:
资源名称 | 资源类型 |
学生号 | int |
姓名 | str |
年龄 | int |
籍贯 | str |
平均分 | float |
第一步先将数据保存在内存中,使用数据库进行信息存储在之后章节再继续介绍;
1、创建flask服务器
首先与第二章的用例相同创建一个flask的服务器:
123456789 | 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,通常用来上传信息:
123456789101112131415161718 | from flask import jsonifyfrom 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命令来进行测试:
123456789 | 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命令为:
1234567 | 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,查找需要修改的信息条目,服务端代码为:
123456789101112131415161718192021222324 | from flask import jsonifyfrom flask import requestfrom 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\’ |
服务端处理代码为
12345678910111213141516171819 | from flask import jsonifyfrom flask import requestfrom 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\’ |
服务端处理代码为:
12345678910111213141516 |