本教程使用的是python3 因为python2官方已经不维护了,当然在编写过程中没什么区别,安装就比较简单了只要电脑有pip执行pip3 install flask即可
一般的接口包括增删改查以及查看列表五个接口
接下来就模拟这五个简单的接口:
- 使用POST/GET请求新建一个资源
from flask import Flask, jsonify, request, abort, make_response app = Flask(__name__) @app.route('/api/tasks/', methods=['GET', 'POST']) def create_task(): if request.method == "GET": return make_response(jsonify(data), 200) name = request.json['name'] if name in names: return make_response(task_exist, 400) else: names.append(name) data.append(request.json) return make_response(request.json, 201) if __name__ == '__main__': app.run(host='127.0.0.1', port=8080, debug=True)
如上述代码,在main函数里可以通过app.run指定部分参数,host和port不做赘述,debug模式如果开启则在修改后可以自动重启服务。非常好用
知识点:
1. jsonify:将我们传入的json形式数据序列化成为json字符串,作为响应的body,并且设置响应的Content-Type为application/json,构造出响应返回至客户端
2. request可以通过request.json取到接受到数据
3. abort用于返回通用的错误比如:404,400,500
4.make_response自定义返回的object,因为一般接口都会返回一个数据和状态码,所以结构为make_response(request.json, 201)
5.路由匹配的规则
1.<id> :默认接受的类型是str
2.<string:id> :指定id的类型为str
3.<int:id> :指定的id类型是整性
4.<float:id> : 指定id的类型为浮点数(四舍五入,且不能接收整数类型)
5.<path:path1> : 指定接收的path为url中的路径
2.<string:id> :指定id的类型为str
3.<int:id> :指定的id类型是整性
4.<float:id> : 指定id的类型为浮点数(四舍五入,且不能接收整数类型)
5.<path:path1> : 指定接收的path为url中的路径
2. 使用GET请求获取列表
from flask import Flask, jsonify, request, abort, make_response app = Flask(__name__) data = [ {"name": "test1", "desc": "test1", "id": 1}, {"name": "test2", "desc": "test2", "id": 2}, {"name": "test3", "desc": "test3", "id": 3}, ] task_does_not_exist = {"msg": "task does not exist"} names = ['test1', 'test2', "test3"] task_exist = {"msg": "name is exist"} @app.route('/api/tasks/<string:name>') def get_task(name): if len(name) > 0 and name in names: for content in data: if name == content['name']: return make_response(jsonify(content), 200) else: return make_response(jsonify(task_does_not_exist), 404) if __name__ == '__main__': app.run(host='127.0.0.1', port=80, debug=True)
3. 使用PUT方法更新资源
@app.route('/api/tasks/<string:name>', methods=['PUT']) def update_task(name):if len(name) > 0 and name in names: for content in data: if name == content['name']: id = content["id"] data[id - 1] = request.json return make_response(jsonify(data[id - 1]), 204) else: abort(404)
4. 使用DELETE删除资源
@app.route('/api/tasks/<string:name>', methods=['DELETE']) def delete_task(name): if len(name) > 0 and name in names: return make_response(jsonify(data), 204) else: abort(404)