Flask 보기에서 스트리밍된 데이터를 동적으로 업데이트하고 표시하는 방법은 무엇입니까?
업데이트 시 Flask 뷰에서 스트리밍된 데이터 표시
소개
Flask 애플리케이션에서는 표시하는 것이 종종 바람직합니다. 실시간으로 생성되거나 업데이트되는 데이터입니다. Flask에는 스트리밍 응답에 대한 지원이 내장되어 있지만 이 데이터를 HTML 템플릿에 통합하는 것은 어려울 수 있습니다. 이 문서에서는 페이지에 스트리밍되는 데이터를 동적으로 업데이트하고 형식을 지정하고 표시하는 방법을 살펴봅니다.
Flask에서 데이터 스트리밍
Flask에서 데이터를 스트리밍하려면 경로에 대한 응답으로 생성기를 사용할 수 있습니다. 응답이 반복될 때마다 생성기는 클라이언트에 데이터 덩어리를 생성합니다. 예:
@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')
이 코드는 매초 값을 생성하는 장기 실행 프로세스를 시뮬레이션합니다. 그런 다음 이러한 값은 HTML 조각으로 응답에 스트리밍됩니다.
JavaScript에서 스트리밍 데이터 처리
Flask는 스트리밍 응답을 지원하지만 HTML 템플릿은 서버 측에서 한 번 렌더링됩니다. 동적으로 업데이트할 수 없습니다. 브라우저에서 스트리밍 데이터를 처리하려면 JavaScript를 사용하여 엔드포인트에 요청하고 스트리밍 데이터가 도착하면 처리할 수 있습니다.
한 가지 접근 방식은 XMLHttpRequest(XHR) 개체를 사용하여 엔드포인트에 대한 요청을 생성하는 것입니다. 스트리밍 엔드포인트. 그런 다음 응답이 완료될 때까지 응답에서 데이터를 읽을 수 있습니다. 예는 다음과 같습니다.
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);
이 JavaScript 코드는 XMLHttpRequest 개체를 사용하여 스트리밍 엔드포인트에 대한 요청을 생성합니다. 그런 다음 타이머를 설정하여 정기적으로 새 데이터를 확인하고 이에 따라 페이지를 업데이트합니다.
스트리밍된 HTML 출력에 iframe 사용
스트리밍된 데이터를 표시하는 또 다른 접근 방식 Flask 보기는 iframe을 사용하는 것입니다. iframe은 스트리밍된 HTML 출력을 표시하는 데 사용할 수 있는 별도의 문서입니다. 예는 다음과 같습니다.
@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>
이 코드는 stream_with_context 데코레이터를 사용하여 생성기가 추가 기능을 지원하도록 향상합니다. iframe의 스타일을 지정하는 초기 CSS를 제공하고 iframe 내에서 HTML 콘텐츠를 지속적으로 스트리밍합니다. iframe의 HTML 템플릿은 더 복잡할 수 있으며 필요에 따라 다른 형식을 포함할 수 있습니다.
위 내용은 Flask 보기에서 스트리밍된 데이터를 동적으로 업데이트하고 표시하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Fiddlerevery Where를 사용할 때 Man-in-the-Middle Reading에 Fiddlereverywhere를 사용할 때 감지되는 방법 ...

Linux 터미널에서 Python 사용 ...

10 시간 이내에 컴퓨터 초보자 프로그래밍 기본 사항을 가르치는 방법은 무엇입니까? 컴퓨터 초보자에게 프로그래밍 지식을 가르치는 데 10 시간 밖에 걸리지 않는다면 무엇을 가르치기로 선택 하시겠습니까?

Pythonasyncio에 대해 ...

Investing.com의 크롤링 전략 이해 많은 사람들이 종종 Investing.com (https://cn.investing.com/news/latest-news)에서 뉴스 데이터를 크롤링하려고합니다.

Python 3.6에 피클 파일 로딩 3.6 환경 오류 : ModulenotFounderRor : nomodulename ...

SCAPY 크롤러를 사용할 때 파이프 라인 파일을 작성할 수없는 이유에 대한 논의 지속적인 데이터 저장을 위해 SCAPY 크롤러를 사용할 때 파이프 라인 파일이 발생할 수 있습니다 ...
