zoukankan      html  css  js  c++  java
  • 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)








  • 相关阅读:
    android手机上的app输入法遮挡输入框问题
    简单的百度地图使用
    简单的加入购物车动画效果,需引入外部js文件
    vue项目中axios跨域设置
    一次讲清promise
    js中宏任务,微任务,异步,同步,执行的顺序
    vantUI <van-uploader> 上传图片,如何获取图片的尺寸
    Vue双向绑定原理 从vue2的Object.defineProperty到vue3的proxy
    微信浏览器h5页面开发遇到问题
    Web前端优化最佳实践及工具集锦
  • 原文地址:https://www.cnblogs.com/whitemouseV2-0/p/10769888.html
Copyright © 2011-2022 走看看