Heim >Web-Frontend >js-Tutorial >Wie streame ich Echtzeitdaten effizient aus einer Flask-Ansicht in eine HTML-Vorlage?

Wie streame ich Echtzeitdaten effizient aus einer Flask-Ansicht in eine HTML-Vorlage?

Susan Sarandon
Susan SarandonOriginal
2024-12-26 12:55:14987Durchsuche

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

Daten in eine HTML-Vorlage streamen

Wenn Sie mit Echtzeitdaten arbeiten, die aus einer Flask-Ansicht gestreamt werden, ist es selbstverständlich, dass Sie diese in einer dynamischen HTML-Vorlage anzeigen möchten. Herkömmliche Techniken zum Rendern von Vorlagen sind jedoch unzureichend, da die Vorlage einmal auf der Serverseite gerendert und vollständig an den Client gesendet wird.

Verwendung von JavaScript für die dynamische Anzeige

Eine Lösung für dieses Problem besteht darin, JavaScript für clientseitige Updates zu verwenden. Indem Sie eine XMLHttpRequest-Anfrage an den Streaming-Endpunkt stellen, können Sie die Daten inkrementell lesen und direkt auf der Seite ausgeben. Dieser Ansatz ermöglicht Aktualisierungen in Echtzeit und vollständige Kontrolle über das Anzeigeformat.

Hier ist ein Beispiel mit JavaScript:

Python (serverseitig):

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 (clientseitig):

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

Verwendung eines Iframes für HTML-Streaming

An Ein alternativer Ansatz besteht darin, einen Iframe zum Anzeigen der gestreamten HTML-Ausgabe zu verwenden. Während diese Technik ein dynamisches Rendering ermöglicht, bringt sie Nachteile mit sich:

  • Erhöht die Komplexität aufgrund des separaten Dokumentkontexts
  • Eingeschränkte Stiloptionen
  • Potenzielle Rendering-Probleme bei langer Ausgabe

Bei dieser Methode würde die Datei index.html enthalten:

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

Und die Stream-Ansicht in Python wäre:

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))

In diesem Beispiel wird CSS zuerst mit render_template_string in den Iframe geladen und der HTML-Inhalt wird inkrementell gestreamt .

Das obige ist der detaillierte Inhalt vonWie streame ich Echtzeitdaten effizient aus einer Flask-Ansicht in eine HTML-Vorlage?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn