2017-08-14 6 views
3

最近、ウェブページに動的なプロットを実装するプロジェクトがあります。フラスコのウェブページをリフレッシュするには?

は、ここで私は私のHTMLコードに<meta content='5; url=http://127.0.0.1:5000/plot' http-equiv='refresh'>を追加しますがここでは、それはまだ自動的に更新することができない私のHTMLコード

<!DOCTYPE html> 
<html> 
    <head> 
     <title> Plot</title> 
     <meta content='5; url=http://127.0.0.1:5000/plot' http-equiv='refresh'> 
    </head> 
    <body> 
     <img src="data:image/png;base64, {{ plot_url }}"> 
    </body> 
</html> 

である私のpythonコード

from flask import Flask 
#from flask import render_template 
import matplotlib.pyplot as plt 
import io 
import base64 

app = Flask(__name__) 

@app.route('/plot') 
def build_plot(): 

    img = io.BytesIO() 

    y = [1,2,3,4,5] 
    x = [0,2,1,3,4] 
    plt.plot(x,y) 
    plt.savefig(img, format='png') 
    img.seek(0) 

    plot_url = base64.b64encode(img.getvalue()).decode() 

    return '<img src="data:image/png;base64,{}">'.format(plot_url) 
if __name__ == '__main__': 
    app.run(debug=True, host='0.0.0.0') 

です。

プロットの変更を観察したい場合は、手動で更新する必要があります。

誰でもこの問題の解決に手伝ってもらえますか?ありがとうございます

+0

この回答は https://stackoverflow.com/questions/15721679/update-and-render-a-value-from-flask-periodically –

+0

を参照してください。これはPythonまたはFlaskとは関係ありません。最も単純なアプローチは、ページ内の 'iframe'を使用して定期的に更新するか、AJAXを使用するためにさらに高度な(そして正しいIMHO)ものです。 @LingchaoCaoが提供するリンクを確認してください。 –

答えて

2

URLを含める必要はありません。ただの内容属性のmetaタグだけを使用してください。

<meta http-equiv="refresh" content="5" > 

しかし、あなたのグラフのリアルタイムの変化を見るために、あなたはフラスコにsocketsで見たいと思うかもしれません。これは、サーバーがbroadcastingを使用するすべてのクライアントに変更をプッシュするのに役立ちます。ソケットの使用は、定期的にページを更新するよりも優れたアプローチです。

+2

しかし、WebSocketはしばしば企業のファイアウォールの背後で動作しないことに注意してください。代わりにAJAXを使うことをお勧めします。 –

+0

あなたは確かに、変更が良いアプローチであることを確認するたびにX間隔ごとにリフレッシュしていますか?プーリングする方が良い方法です。また、企業のファイアウォールでは回避策が必要です。 @AndrejsCainikovsの権利? :) – Nabin

+2

リソース単位のWebソケットが効率的で、アクセスワイズのAJAXが最も安全です。私は自分の仕事でwebsocket拒否を経験し、私はかなり頻繁に苦痛を受けます。そして、すべての企業ネットワークが適切に設定されているので、私はこれについて何もできません。いずれにせよ、これはちょうど私の0.02 $です。 –

関連する問題