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)
查看返回结果的方法,有以下四种:
①这里推荐使用 postman 软件直接使用get方法访问本地服务器,进行参数输入,测试,检查结果。
②通过将 http://127.0.0.1:5000/ 粘贴到浏览器 进行。
③在 pycharm 控制台 输入:
from requests import put, get
get('http://localhost:5000').json()
# Out[3]: {'hello': 'world'}
④windows (cmd)控制台 输入第一行:
curl http://localhost:5000
#{
# "hello": "world"
#}
在了解了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 搭建服务器接收参数主要用到了 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,之后可以对该对象进行格式转换和运算
解析输入参数的字符串就是将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),解析成其他格式的参数类似。
通过将返回值保存在字典中,返回给客户端。
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#返回大字典
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)
postman软件直接输入参数。
windows控制台输入:curl 是一个windows输入命令的工具,必须加,-d 指定参数,-X 指定请求方法名称
curl -d 'rate=foo' http://127.0.0.1:5000/todos -X POST
注意:客户端请求方法必须与服务端的方法相同,要不然会报错405;