ホームページ >ウェブフロントエンド >jsチュートリアル >Flask ビューから HTML テンプレートにリアルタイム データを効率的にストリーミングするにはどうすればよいですか?

Flask ビューから HTML テンプレートにリアルタイム データを効率的にストリーミングするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-26 12:55:14989ブラウズ

How to Efficiently Stream Real-time Data from a Flask View into an HTML Template?

HTML テンプレートへのデータのストリーミング

Flask ビューからストリーミングされたリアルタイム データを操作する場合、それを動的 HTML テンプレートに表示したいと思うのは自然なことです。ただし、テンプレートがサーバー側で一度レンダリングされ、その全体がクライアントに送信されるため、従来のテンプレート レンダリング技術では不十分です。

動的表示に JavaScript を使用する

この問題に対する 1 つの解決策クライアント側の更新に JavaScript を利用することです。ストリーミング エンドポイントに対して XMLHttpRequest リクエストを行うことで、データを段階的に読み取り、ページに直接出力できます。このアプローチにより、リアルタイムの更新と表示形式の完全な制御が可能になります。

JavaScript を使用した例を次に示します:

Python (サーバー側):

from flask import Flask, Response

app = Flask(__name__)

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

@app.route('/stream')
def stream():
    def generate():
        for i in range(10):
            yield str(i) + '\n'
    return Response(generate(), mimetype='text/plain')

HTML (クライアント側):

<p>This is the latest output: <span>

HTML に Iframe を使用するストリーミング

別のアプローチには、iframe を使用してストリーミングされた HTML 出力を表示することが含まれます。この手法では動的なレンダリングが可能ですが、次のような欠点があります。

  • ドキュメント コンテキストが分離されるため複雑さが増す
  • スタイル オプションが制限される
  • 長い出力でレンダリングに問題が生じる可能性がある

このメソッドでは、index.html ファイルはcontains:

<p>This is all the output:</p>
<iframe src="{{ url_for('stream') }}"></iframe>

Python のストリーム ビューは次のようになります:

from flask import stream_with_context

@app.route('/stream')
def stream():
    @stream_with_context
    def generate():
        yield '<link rel=stylesheet href="{{ url_for('static', filename='stream.css') }}">'
        for i in range(10):
            yield render_template_string('<p>{{ i }}: {{ s }}</p>\n', i=i, s=sqrt(i))

この例では、最初に CSS が render_template_string を使用して iframe にロードされ、HTML コンテンツが段階的にストリーミングされます。 .

以上がFlask ビューから HTML テンプレートにリアルタイム データを効率的にストリーミングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。