使用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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM