我尝试在Arduino上运行小型会议站,事实上它已经可以监控温度和湿度。所以我决定将数据存储在数据库中,并使用Flask可视化ob web服务器。我在python上创建了一个小脚本,它从串口获取数据并将其发送到服务器。
def send_JSON_to_server(meteodata):
print(meteodata)
url = 'http://127.0.0.1:8080/api/meteo'
headers = {'Content-Type': 'application/json'}
resp = requests.post(url , data = json.dumps(meteodata), headers=headers)
print(resp)
ser = serial.Serial('/dev/cu.usbmodem1411', 9600)
while True:
json_string = ser.readline().decode("utf-8")
send_JSON_to_server(json_string)
它从串口获取数据穿孔字符串并尝试发送它Flask应用程序。在服务器端,我有一个代码:
@app.route('/api/meteo/', methods=['GET','POST'])
def save_meteo_data():
if request.method == 'POST':
if request.json:
json_dict = request.get_json()
save_meteo_data_to_db(json_dict)
return 200
else:
return render_template('test.html'), 999
在这里我遇到了一个问题,在我看来,请求作为GET进入服务器,至少如果我只在方法中留下POST,我立即得到405响应并且在apache日志中没有错误。如果我离开它就像这个请求发送到服务器并返回999,这意味着它不被接受为POST。我知道405通常连接到配置或安全问题,因此您可以看到我的虚拟主机配置。我在不同的项目中使用相同的东西,它正在运作。
WSGIScriptAlias / /var/www/meteo/meteo.wsgi
DocumentRoot /var/www/meteo
<Directory /var/www/meteo>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>
我还想提供我从Arduino获得的JSON示例以及在requests.post之后的响应,如下所示。
{"humidity":57.10,"temperature":28.10,"tempbyfeeling":29.27}
<Response [405]>
答案 0 :(得分:0)
我在Flask应用程序中发现了一个愚蠢的错误,在路由过程中你可以看到这一行:
-useBasicParsing
这是一个导致响应301并立即生成GET的错误。右边应该是:
Invoke-WebRequest
一个/需要删除所有。