flask微服務框架的初步接觸


  測試2個關聯的系統接口時,經常會遇到被測試系統或被測app的處理內部處理流程會依賴另一個系統的接口返回結果,這時,
常用的做法就是寫一個模擬測試樁,用作返回請求時的結果。java可以用servicelet來實現,而python可以使用flask這個框架來實現,
並且,實現起來也比java相對簡單一些。

編程語言的永遠第一個示例,hello world

from flask import Flask, request    #安裝 flask和flask_restful 包
from flask_restful import Api, Resource

app=Flask(__name__) #實例化,__name__為系統變量
api=Api(app) #restful API的固定寫法
class HiWorld(Resource): #創建一個類,並繼承flask_restful.Resource;定義為一個資源
def get(self):
return {'Hello':'World'}

api.add_resource(HiWorld,'/Hello_World/a') #將HiWorld類作為數據資源加入到api,‘/Hello_World’為請求資源地址
if __name__=="__main__":
app.run(host='0.0.0.0',port='8585',debug=True) #host='0.0.0.0'表示開放其他機器訪問權限,debug=True表示打印調試日志,port為訪問端口號
                                #請求默認地址http://127.0.0.1:5000

示例二:多個請求資源
from flask import Flask
from flask_restful import Api,Resource,reqparse,abort

app=Flask(__name__)
api=Api(app)

todos={
'todo1':{'task':'welcome'},
'todo2':{'task':'to'},
'todo3':{'task':'school'}
}

def abort_if_todo_unexist(todo_id): #請求的資源不在todos變量中,返回404
if todo_id not in todos:
abort(http_status_code=404,message="todo{}doesn't exsit".format(todo_id)) #abort提前退出請求,並返回http狀態碼404

parser=reqparse.RequestParser() #解析url中參數
parser.add_argument('task',type=str)

#todo
class Todo(Resource):
def get(self,todo_id): #請求時get的方法,根據url中參數獲取資源
abort_if_todo_unexist(todo_id)
return todos[todo_id]
def delete(self,todo_id): #請求時delete的方法,根據url中參數刪除資源
abort_if_todo_unexist(todo_id)
del todos[todo_id]
return '',204
def put(self,todo_id): #請求時put的方法,根據url中參數修改資源
args=parser.parse_args()
task={'task':args['task']}
todos[todo_id]=task
return task,201

#todolist
class Todolist(Resource):
def get(self): #請求時get的方法,url沒有帶參數時,返回所有變量todos的值
return todos
def post(self): #請求時post的方法,url沒有帶參數時,新增todos[todo_id]的值
args=parser.parse_args()
todo_id=int(max(todos.keys()).lstrip('todo'))+1
todo_id='todo%i'%todo_id
todos[todo_id]={'task':args['task']}
return todos[todo_id],201

api.add_resource(Todolist,'/todos/')
api.add_resource(Todo,'/todos/<todo_id>') #<todo_id>為傳入的參數

if __name__=='__main__':
app.run(host='0.0.0.0',port='8585',debug=True)









免責聲明!

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



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