从客户端向服务器发送数据

时间:2019-01-30 13:56:21

标签: python api flask raspberry-pi python-requests

我必须在大学里完成一个编程项目,并且我决定了一个需要多个客户端(树莓pis)才能与中央服务器进行交互的项目。

本质上,服务器将存储一个人的数据库,每个人都有一个唯一的向量。然后,树莓派将向服务器发送一个向量,然后服务器将从存储在该数据库中的向量中确定最接近的向量,然后相应地更新状态数据库。

一个Web应用程序将在状态数据库中显示某些变量的实时状态,人们应该能够登录该Web应用程序(但是现在不需要实现此操作,从而使本地网络上的任何人都可以访问暂时可以)。

我只是不太确定如何进行设置。我已经在Flask中制作了Web应用程序,目前正在本地运行,但是我认为可以通过将主机更改为0.0.0.0使其在整个网络上都可以访问。

我还编写了将多个向量作为输入,然后全部检查它们并相应地更新数据库的代码。但是,我还不确定如何将矢量从Pi发送到服务器。

由于目前仍处于开发阶段,因此我的PC将作为服务器,并且我将使用单个Rasperry Pi 3B作为客户端。

我当时想我可能需要从Pi发送POST请求到服务器,并且我可以这样做,因为我对python请求很有经验,尽管我不知道如何配置它以将其发送到服务器并然后让服务器读取它并执行代码以分析向量。

因此,我实质上只是想知道是否有人可以帮助我将所有这些联系在一起,如果您对我应该更改或添加的内容有任何建议,那将非常有帮助。如果有任何不清楚的地方,请告诉我,我会尽力澄清。

谢谢。

编辑:似乎我的服务器上可能需要一个API,然后我向http://MY_PC_IP/ {api}发送POST请求,然后以某种方式将数据获取到Python中以便可以运行它的代码?

1 个答案:

答案 0 :(得分:1)

您可以在flask应用程序中创建一条路由,该路由以从树莓派发送的矢量为输入,然后相应地处理此数据。您发送的帖子数据可能是JSON样式格式。

也可以,使用“ host = 0.0.0.0”运行您的应用。现在,您可以从另一台计算机(例如树莓派)使用服务器的ip地址连接到服务器。

下面的示例应该起作用。

from flask import request,jsonify

@app.route('/post_vector',methods=['POST'])
def post_vector():
    if not request.is_json:
        return jsonify({"Message":"Missing JSON in request"})
    vector = request.json.get("vector", None)
    #now do something with vector. like DB comparison or whatever.
    return jsonify({"Message": vector})

然后在树莓派中创建一个脚本,将其向量发布到flask应用。

import requests
import json

uri = <ip-address-of-server> + '/post_vector'
data = {
  "vector" : "somevector"
}
data = json.dumps(data)
response = requests.post(uri, data=data)
reply = json.loads(response.text)
print(reply)