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)








  • 相关阅读:
    MySQL修改root密码的多种方法
    (转)云存储:阿里云OSS 、又拍云和 七牛 的比较
    微博feed系统的推(push)模式和拉(pull)模式和时间分区拉模式架构探讨
    Feed系统架构资料收集
    百万用户时尚分享网站feed系统扩展实践
    (转)浅谈MD5加密算法中的加盐值(SALT)
    json转换成list map集合
    android在假设绘制自己定义的bitmap,然后返回给ImageView
    APPCAN学习笔记003---原生开发与HTML5技术
    【问题解决】syntax error: unexpected end of file或-bash: ./full_build.sh: /bin/bash^M: bad interpreter: No
  • 原文地址:https://www.cnblogs.com/whitemouseV2-0/p/10769888.html
Copyright © 2011-2022 走看看