2016-07-28 4 views
1

私はFlaskで予測Webアプリケーションを構築しようとしています。アプリケーションは、ユーザーの入力を受け取り、pythonで訓練されたモデルを介して処理し、入力フォームの横にグラフとして結果を表示する必要があります。フォーム入力に基づいて既存のPython Flask Webページを更新するには?

は私のコードは次のようになります。

HTMLフォーム:

<form class = "prediction-options" method = "post" action = "/prediction/results"> 
    <!--the input fields--> 
</form> 

フラスコapp.py

@app.route("/") 
def main(): 
    return render_template('index.html')  

@app.route("/prediction/results", methods = ['POST']) 
def predict(): 
    input_aqi = float(request.form['aqi'])/272 
    input_pm2_5 = float(request.form['pm2_5'])/224 
    input_pm10 = float(request.form['pm10'])/283 
    input_so2 = float(request.form['so2'])/36 
    input_no2 = float(request.form['no2'])/110 
    input_co = float(request.form['co'])/1.83 
    input_o3 = float(request.form['o3'])/124 
    input_list = [[input_aqi,input_pm2_5,input_pm10,input_so2,input_no2,input_co,input_o3]] 


    output_acute_bronchitis = model_acute_bronchitis.predict(input_list) 
    output_asthma = model_asthma.predict(input_list) 
    output_asthmatic_bronchitis = model_asthmatic_bronchitis.predict(input_list) 
    output_aurti = model_aurti.predict(input_list) 
    output_bronchitis = model_bronchitis.predict(input_list) 
    output_pneumonia = model_pneumonia.predict(input_list) 

    d = collections.OrderedDict() 
    d['acute_bronchitis'] = output_acute_bronchitis[0] 
    d['asthma'] = output_asthma[0] 
    d['asthmatic_bronchitis'] = output_asthmatic_bronchitis[0] 
    d['aurti'] = output_aurti[0] 
    d['bronchitis'] = output_bronchitis[0] 
    d['pneumonia'] = output_pneumonia[0] 

    prediction = jsonify(d) 
    return prediction 

は今、私が管理しているユーザーに取ります予測結果を「/予測/結果」ページに入力してレンダリングします。どのように結果を '/'ページに表示させることができますか?私はこれを行うことを試みた:

@app.route("/", methods = ['POST','GET']) 
def main(): 
    if request.method == 'POST': 
     def predict(): 
      #predict function that returns prediction 
    return render_template('index.html') 

をしかし、私は常にsocket.error: [Errno 32] Broken pipeエラーメッセージが表示されます。私は何をすべきか?

答えて

1

あなたは、あなたのpredictルートの最後の行の前に、このためsessionを使用

session['prediction'] = prediction 

と予測を格納し、あなたのアプリケーション内の他のルートにアクセスすることができ、例えば、あなたが持っていることができthis for /

@app.route("/", methods = ['POST','GET']) 
def main(): 
    if request.method == 'POST': 
     pass 

    prediction = session['prediction'] 

    return render_template('index.html', prediction=prediction) 
関連する問題