Flask-restful API演示

来源:互联网 发布:茄子快传软件 编辑:程序博客网 时间:2024/05/01 13:05

Flask-restful API演示

    偶然一次机会看见了国外大神写的Flask框架关于restful api的介绍,链接在此点击打开链接

不得不说,本人最近也在做服务器框架搭建,一直搞不懂,我需要的服务器不需要界面,也就是不需要html解析,也就没有了flask中的render_tempeter这个东东。后来看见这篇文章,感觉特别好,但学完还是有一个疑问,怎么用restful来传输图片,知道将二进制流通过base64转化,但还是不知怎么弄。正在努力学习中。。。


    现在讲学习restful api的过程记录下来。

在此之前,http各种请求方式我就不说了。

如链接文章所说,请求方式为:

http://[hostname]/todo/api/v1.0/

    1.首先搭建简单的flask服务器叫app.py:

<span style="font-size:14px;">#!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():    return "Hello, World!"if __name__ == '__main__':    app.run(debug=True)</span>
这样我们就可以打开浏览器观察浏览器上的内容了。等等,不是说好的不用界面的吗?别着急,下面正式进入RASTful的介绍。

    2.搭建RASTful API服务器

<span style="font-size:14px;">#!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [    {        'id': 1,        'title': u'Buy groceries',        'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',         'done': False    },    {        'id': 2,        'title': u'Learn Python',        'description': u'Need to find a good Python tutorial on the web',         'done': False    }]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():    return jsonify({'tasks': tasks})if __name__ == '__main__':    app.run(debug=True)</span>

    这时,我们就可以使用curl这个工具来测试

<span style="font-size:14px;">curl -i http://localhost:5000/todo/api/v1.0/tasks</span>

但我们不需要获得整个内容啊,于是我们可以添加参数

<span style="font-size:14px;">from flask import abort@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])def get_task(task_id):    task = [task for task in tasks if task['id'] == task_id]    if len(task) == 0:        abort(404)    return jsonify({'task': task[0]})</span>
这里就可以看出来了,在路由选择的时候,添加参数,但如果是二进制呢,参数怎么弄呢?

我们使用下面的命令测试一下:

curl -i http://localhost:5000/todo/api/v1.0/tasks/2

如果发现404资源没有找到,我们使用下面的代码友好化:

from flask import make_response@app.errorhandler(404)def not_found(error):    return make_response(jsonify({'error': 'Not found'}), 404)

    重点来了,使用post来更新服务器:
from flask import request@app.route('/todo/api/v1.0/tasks', methods=['POST'])def create_task():    if not request.json or not 'title' in request.json:        abort(400)    task = {        'id': tasks[-1]['id'] + 1,        'title': request.json['title'],        'description': request.json.get('description', ""),        'done': False    }    tasks.append(task)    return jsonify({'task': task}), 201

测试一下:
curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks

到此为止,整个代码已经全部弄好。

希望有朋友如果能够解答上面的问题,能够给我留言,谢谢!



0 0
原创粉丝点击