使用请求将JSON从python发送到Flask而没有结果

时间:2016-07-28 16:17:01

标签: python json flask

我尝试在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]>

1 个答案:

答案 0 :(得分:0)

我在Flask应用程序中发现了一个愚蠢的错误,在路由过程中你可以看到这一行:

-useBasicParsing

这是一个导致响应301并立即生成GET的错误。右边应该是:

Invoke-WebRequest

一个/需要删除所有。