使用flask实现mock server

18530阅读 0评论2020-09-01 大镇
分类:Python/Ruby

转载自:


flask

flask是python实现的简单的web框架,与django互补。

flask教程

如何理解flask

最简单的例子

  1. from flask import Flask
  2. app = Flask(__name__)

  3. @app.route("/") # 路由
  4. def hello(): # handler
  5.     return "Hello World!"

实现mocked smile task api

获取所有的任务

GET /api/tasks # get all tasks 

查看一个任务的详情

GET /api/tastks/:task_id # get a task with task_id 

完成一个任务

PUT /api/tastks/:task_id # complete a task 

代码


  1. from flask import Flask, jsonify, g
  2. import copy
  3. app = Flask(__name__)

  4. @app.before_request
  5. def set_up_data():
  6.     g.data = [
  7.         {'id': 1, 'title': 'task 1', 'desc': 'this is task 1'},
  8.         {'id': 2, 'title': 'task 2', 'desc': 'this is task 2'},
  9.         {'id': 3, 'title': 'task 3', 'desc': 'this is task 3'},
  10.         {'id': 4, 'title': 'task 4', 'desc': 'this is task 4'},
  11.         {'id': 5, 'title': 'task 5', 'desc': 'this is task 5'}
  12.     ]

  13.     g.task_does_not_exist = {"msg": "task does not exist"}

  14. @app.route('/api/tasks')
  15. def get_all_tasks():
  16.     return jsonify(g.data)

  17. @app.route('/api/tasks/')
  18. def get_task(task_id):
  19.     if task_id > 0 and task_id <= len(g.data):
  20.         return jsonify(g.data[task_id])
  21.     else:
  22.         return jsonify(g.task_does_not_exist)

  23. @app.route('/api/tasks/', methods=['PUT'])
  24. def complete_task(task_id):
  25.     if task_id > 0 and task_id <= len(g.data):
  26.         tmp = copy.deepcopy(g.data[task_id])
  27.         tmp['done'] = True
  28.         return jsonify(tmp)
  29.     else:
  30.         return jsonify(g.task_does_not_exist)

运行

  1. set FLASK_APP=smile_task_mock_server.py

  2. flask run
  3. * Serving Flask app "smile_task_mock_server"
  4. * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

浏览器打开localhost:5000就好了

知识补充:
flask之g对象
1.在flask中,有一个专门用来存储用户信息的g对象,g的全称的为global。
2.g对象在一次请求中的所有的代码的地方,都是可以使用的。

Flask 的 jsonify
Flask 框架里,可以用 jsonify 返回 json 数据

上一篇:django使用ajax和后台交互
下一篇:docker的ubuntu容器安装vim