zoukankan      html  css  js  c++  java
  • 使用python的Flask实现一个接口mock数据(傻瓜教程)

    本教程使用的是python3 因为python2官方已经不维护了,当然在编写过程中没什么区别,安装就比较简单了只要电脑有pip执行pip3 install flask即可

    一般的接口包括增删改查以及查看列表五个接口

    接下来就模拟这五个简单的接口:

    1. 使用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. 使用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)

    demo 见:https://github.com/hanhouchao/mock-server

  • 相关阅读:
    2款JS脚本判断手机浏览器跳转WAP手机网站
    js实现域名判断后跳转到指定网址
    js实现网页多少秒后自动跳转到指定网址
    利用JS判断当前来路域名并跳转到指定页面
    网站建设中用JS判断时间并显示不同内容
    python 基础_列表的其他操作 4
    Codeforces Round #519 by Botan Investments
    HDU5794
    牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph
    2018年牛客多校算法寒假训练营练习比赛(第一场)C. 六子冲
  • 原文地址:https://www.cnblogs.com/hchan/p/10998368.html
Copyright © 2011-2022 走看看