• python:搭建 flask_restful 服务



    Flask-RESTful 技术文档:https://flask-restful.readthedocs.io/en/latest/index.html
    C++访问服务(https://blog.csdn.net/qq_35591253/article/details/127633739?spm=1001.2014.3001.5502

    入门小例子

    from flask import Flask
    from flask_restful import Resource, Api
    
    app = Flask(__name__)
    api = Api(app)
    
    class HelloWorld(Resource):
        def get(self):
            return {'hello': 'world'}
    
    api.add_resource(HelloWorld, '/')
    
    if __name__ == '__main__':
        app.run(debug=True)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    查看返回结果的方法,有以下四种:
    ①这里推荐使用 postman 软件直接使用get方法访问本地服务器,进行参数输入,测试,检查结果。
    ②通过将 http://127.0.0.1:5000/ 粘贴到浏览器 进行。
    ③在 pycharm 控制台 输入:

    from requests import put, get
    get('http://localhost:5000').json()
    # Out[3]: {'hello': 'world'}
    
    • 1
    • 2
    • 3

    windows (cmd)控制台 输入第一行:

    curl http://localhost:5000
    #{
    #    "hello": "world"
    #}
    
    • 1
    • 2
    • 3
    • 4

    http请求服务方法

    在了解了Flask_Restful的作用以后,我们要了解请求服务的方法,如下表所示:

    方法特点说明作用
    GET安全、幂从服务器端获取数据,请求body在地址栏上获取资源
    POST非安全、非幂向服务器端提交数据,请求数据在报文body里;发送一个修改数据的请求,需求数据要重新新创建用于创建子资源(创建、更新、删除、查询资源均可使用)
    PUT非安全、幂向服务器端提交数据,请求数据在报文body里;发送一个修改数据的请求,需求数据更新(全部更新)创建、更新资源
    DELETE非安全、幂从服务器端获取数据 ,,请求数据在报文body里;发送一个删除数据的请求删除资源
    HEAD安全、幂与get方法类似,但不返回message body内容,仅仅是获得获取资源的部分信息(content-type、content-length)restful框架中较少使用
    OPTIONS安全、幂用于url验证,验证接口服务是否正常
    TRACE安全、幂回显服务器收到的请求,这样客户端可以看到(如果有)哪一些改变或者添加已经被中间服务器实现restful框架中较少使用
    PATCH非安全、幂向服务器端提交数据,请求数据在报文body里;与PUT类似,发送一个修改数据的请求,区别在于PATCH代表部分更新;后来提出的接口方法,使用时可能去要验证客户端和服务端是否支持创建、更新资源(局部更新)
    备注幂等性:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。

    python 服务端接收参数

    python 搭建服务器接收参数主要用到了 reqparse 模块,reqparse是flask框架下的一个拓展flask_restful提供的请求参数解析模块。官方文档:https://flask-restful.readthedocs.io/en/latest/api.html

    from flask_restful import reqparse
    parser = reqparse.RequestParser()
    parser.add_argument('x', required=True, action='append', help="x cannot be blank!")
    parser.add_argument('y', required=True, action='append', help="y cannot be blank!")
    args = parser.parse_args()#将输入参数复制给args对象(字典)
    x_str = args['x'][0]#将x参数赋值给x_str,之后可以对该对象进行格式转换和运算
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    解析输入参数的字符串就是将str格式转换成list等格式,比如输入的是字符串“x=1.2,1.2,2.3”,可以通过list_x = list(float(temp_x) for temp_x in args['xi'][0].split(','))解析成list。进一步可以解析成numpy的arrayarray_x = np.array(list_x),解析成其他格式的参数类似。

    python 服务端返回值

    通过将返回值保存在字典中,返回给客户端。

    from flask import Flask
    from flask_restful import reqparse, abort, Api, Resource
    
    TODOS = {}#定义空字典,用来保存结果
    class Todo(Resource):
        def post(self):
        args = parser.parse_args()#输入参数
        #*****************处理程序开始
    
        #*****************运行结束,返回model
        model = {'model': model}#将model转成字典格式
        TODOS.update(model)#将model字典添加到TODOS大字典中
        return TODOS, 200#返回大字典
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    案例

    from flask import Flask
    from flask_restful import reqparse, abort, Api, Resource
    import numpy as np
    
    app = Flask(__name__)
    api = Api(app)
    TODOS = {}
    
    parser = reqparse.RequestParser()
    parser.add_argument('x', required=True, action='append', help="x-coordinates of N marker points cannot be blank!")
    
    class Todo(Resource):
        #def get(self):
            #return TODOS
    
        #def delete(self):
            #del TODOS
            #return '', 204
    
        def post(self):
            args = parser.parse_args()
    
            array_x = np.array(list(float(temp_x) for temp_x in args['x'][0].split(',')))#解析结果
            
            sum_x = np.sum(array_x)#处理结果,可以调用其他py文件中的函数
            
            sum_x = {'sum_x': sum_x}#保存结果
            TODOS.update(sum_x)
            
            return TODOS, 200
    
    api.add_resource(Todo, '/todos')
    
    if __name__ == '__main__':
        app.run(host='127.1.1.500', port=5000, debug=True)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    客户端携带参数访问服务

    postman软件直接输入参数。

    windows控制台输入:curl 是一个windows输入命令的工具,必须加,-d 指定参数,-X 指定请求方法名称

    curl -d 'rate=foo' http://127.0.0.1:5000/todos -X POST
    
    • 1

    注意

    注意:客户端请求方法必须与服务端的方法相同,要不然会报错405;

  • 相关阅读:
    安装WordPress(个人建站)
    重学c#系列——委托和匿名函数[二十五]
    mysql之搭建MMM架构实现高可用
    大数据信用报告如何查询?有哪些需要注意的?
    java中Date类之GMT、UTC
    在线教育线上课堂知识付费源码 网络课堂在线课堂系统源码 含完整代码包和搭建教程
    webgl 系列 —— 初识 WebGL
    立可得_第9章_统计分析
    y107.第六章 微服务、服务网格及Envoy实战 -- 可观测应用之指标和日志(十八)
    阿里资深专家分享程序员三门课:技术精进架构修炼、管理探秘文档
  • 原文地址:https://blog.csdn.net/qq_35591253/article/details/127627413