


Comment mettre à jour et afficher dynamiquement les données diffusées à partir d'une vue Flask ?
Affichage des données diffusées à partir d'une vue Flask lors de leur mise à jour
Introduction
Dans les applications Flask, il est souvent souhaitable d'afficher données générées ou mises à jour en temps réel. Bien que Flask prenne en charge de manière intégrée les réponses en continu, l'intégration de ces données dans un modèle HTML peut s'avérer difficile. Cet article explique comment mettre à jour, formater et afficher dynamiquement les données au fur et à mesure de leur diffusion sur la page.
Diffusion de données dans Flask
Pour diffuser des données dans Flask, vous peut utiliser un générateur comme réponse à un itinéraire. Chaque fois que la réponse est itérée, le générateur fournit un bloc de données au client. Par exemple :
@app.route('/') def index(): def inner(): for i in range(500): # simulate a long process to watch j = math.sqrt(i) time.sleep(1) # this value should be inserted into an HTML template yield str(i) + '<br/>\n' return flask.Response(inner(), mimetype='text/html')
Ce code simule un processus de longue durée qui génère des valeurs chaque seconde. Ces valeurs sont ensuite transmises à la réponse sous forme de fragments HTML.
Gestion des données diffusées en continu en JavaScript
Bien que Flask prenne en charge les réponses en continu, les modèles HTML sont rendus une fois côté serveur. et ne peut pas être mis à jour dynamiquement. Pour gérer les données diffusées en continu dans le navigateur, vous pouvez utiliser JavaScript pour adresser une requête au point de terminaison et traiter les données diffusées dès leur arrivée.
Une approche consiste à utiliser l'objet XMLHttpRequest (XHR) pour créer une requête pour le point de terminaison de streaming. Vous pouvez ensuite lire périodiquement les données de la réponse jusqu'à ce qu'elle soit complète. Voici un exemple :
var xhr = new XMLHttpRequest(); xhr.open('GET', '{{ url_for('stream') }}'); xhr.send(); var position = 0; function handleNewData() { // the response text includes the entire response so far // split the messages, then take the messages that haven't been handled yet // position tracks how many messages have been handled // messages end with a newline, so split will always show one extra empty message at the end var messages = xhr.responseText.split('\n'); messages.slice(position, -1).forEach(function(value) { // Update the displayed data using JavaScript latest.textContent = value; // update the latest value in place // Append the current value to a list to log all output var item = document.createElement('li'); item.textContent = value; output.appendChild(item); }); position = messages.length - 1; } // Check for new data periodically var timer; timer = setInterval(function() { // check the response for new data handleNewData(); // stop checking once the response has ended if (xhr.readyState == XMLHttpRequest.DONE) { clearInterval(timer); latest.textContent = 'Done'; } }, 1000);
Ce code JavaScript utilise l'objet XMLHttpRequest pour créer une requête adressée au point de terminaison de streaming. Il configure ensuite un minuteur pour vérifier périodiquement les nouvelles données et mettre à jour la page en conséquence.
Utiliser une iframe pour la sortie HTML diffusée
Une autre approche pour afficher les données diffusées depuis une vue Flask consiste à utiliser une iframe. Une iframe est un document distinct qui peut être utilisé pour afficher une sortie HTML en streaming. Voici un exemple :
@app.route('/stream') def stream(): @stream_with_context def generate(): # Serve initial CSS to style the iframe yield render_template_string('<link rel=stylesheet href="{{ url_for("static", filename="stream.css") }}">') # Continuously stream HTML content within the iframe for i in range(500): yield render_template_string('<p>{{ i }}: {{ s }}</p>\n', i=i, s=sqrt(i)) sleep(1) return app.response_class(generate())
<p>This is all the output:</p> <iframe src="{{ url_for('stream') }}"></iframe>
Ce code utilise le décorateur stream_with_context pour améliorer le générateur afin de prendre en charge des fonctionnalités supplémentaires. Il sert le CSS initial pour styliser l'iframe et diffuse en continu le contenu HTML dans l'iframe. Le modèle HTML dans l'iframe peut être plus complexe et inclure différents formats selon les besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Comment enseigner les bases de la programmation novice en informatique dans les 10 heures? Si vous n'avez que 10 heures pour enseigner à l'informatique novice des connaissances en programmation, que choisissez-vous d'enseigner ...

Lorsque vous utilisez la bibliothèque Pandas de Python, comment copier des colonnes entières entre deux frames de données avec différentes structures est un problème courant. Supposons que nous ayons deux dats ...

Comment éviter d'être détecté lors de l'utilisation de FiddlereVerywhere pour les lectures d'homme dans le milieu lorsque vous utilisez FiddlereVerywhere ...

Les expressions régulières sont des outils puissants pour la correspondance des motifs et la manipulation du texte dans la programmation, améliorant l'efficacité du traitement de texte sur diverses applications.

Comment Uvicorn écoute-t-il en permanence les demandes HTTP? Uvicorn est un serveur Web léger basé sur ASGI. L'une de ses fonctions principales est d'écouter les demandes HTTP et de procéder ...

L'article traite des bibliothèques Python populaires comme Numpy, Pandas, Matplotlib, Scikit-Learn, Tensorflow, Django, Flask et Demandes, détaillant leurs utilisations dans le calcul scientifique, l'analyse des données, la visualisation, l'apprentissage automatique, le développement Web et H et H

Dans Python, comment créer dynamiquement un objet via une chaîne et appeler ses méthodes? Il s'agit d'une exigence de programmation courante, surtout si elle doit être configurée ou exécutée ...
