Python NameD=request.form(';Name';)TypeError:';不可变多指令集';对象不可调用
我想将这些值传递给我的烧瓶并接收响应。 以下是我如何构建我的表单体,以及恢复其响应的请求和方法:Python NameD=request.form(';Name';)TypeError:';不可变多指令集';对象不可调用,python,android,flask,okhttp,Python,Android,Flask,Okhttp,我想将这些值传递给我的烧瓶并接收响应。 以下是我如何构建我的表单体,以及恢复其响应的请求和方法: OkHttpClient okHttpClient; RequestBody formBody; Request request; okHttpClient= new OkHttpClient(); formBody=new FormBody.Builder().add("Name",Date_Time).add("Humidity_value",hum).
OkHttpClient okHttpClient;
RequestBody formBody;
Request request;
okHttpClient= new OkHttpClient();
formBody=new FormBody.Builder().add("Name",Date_Time).add("Humidity_value",hum).build();
request=new Request.Builder().url("http://10.0.2.2:5000/api").post(formBody).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(@NotNull Call call, @NotNull IOException e) {
Log.d("message","Network not found");
}
@Override
public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
Log.d("message",response.body().string());
}
});
我放置了依赖项并导入了所需的库,但在Android Studio中我得到了错误提示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
这是我的代码:
@app.route('/api', methods=['POST'])
def predict():
NameD = request.form('Name') **#the console said the error is here**
NameD = pd.to_datetime(NameD).value
NameD = float(NameD)
Humidity_value = request.form('Humidity_value')
inputs = np.array([[NameD,Humidity_value]])
prediction = model.predict(inputs)
output = prediction[0]
return (str(output))
if __name__ == "__main__":
app.run(host="0.0.0.0")
如何解决类型错误:'ImmutableMultiDict'对象不可调用错误?
请求。form
是一个类似于python字典的ImmutableMultiDict
,不能使用圆括号()
从表单检索数据。而是使用方括号[]。将request.form('key')
的所有实例更改为request.form['key']
。或者您可以使用request.form.get('key')
这里使用圆括号()与尝试调用函数类似。由于我们无法调用不可变的multidict
,因此会发生错误。android studio内部的错误很可能是由于flask脚本中的错误而发生的
你的预测函数应该是
@app.route('/api', methods=['POST'])
def predict():
NameD = request.form['Name']
NameD = pd.to_datetime(NameD).value
NameD = float(NameD)
Humidity_value = request.form['Humidity_value']
Light_Sensor_Reading = request.form['Light_Sensor_Reading']
Smoke_Detection = request.form['Smoke_Detection']
Temperature_value = request.form['Temperature_value']
Door_status = request.form['Door_status']
inputs = np.array([[NameD,Humidity_value,Light_Sensor_Reading,Smoke_Detection,Temperature_value,Door_status]])
prediction = model.predict(inputs)
output = prediction[0]
return (str(output))
只是一个小提示,您也可以使用
request.form.get('Name')
,如果指定的密钥不存在,这将返回None
。谢谢@vremes的建议。我已经将其包含在解决方案中。
@app.route('/api', methods=['POST'])
def predict():
NameD = request.form['Name']
NameD = pd.to_datetime(NameD).value
NameD = float(NameD)
Humidity_value = request.form['Humidity_value']
Light_Sensor_Reading = request.form['Light_Sensor_Reading']
Smoke_Detection = request.form['Smoke_Detection']
Temperature_value = request.form['Temperature_value']
Door_status = request.form['Door_status']
inputs = np.array([[NameD,Humidity_value,Light_Sensor_Reading,Smoke_Detection,Temperature_value,Door_status]])
prediction = model.predict(inputs)
output = prediction[0]
return (str(output))