<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ### 導航 - [索引](# "總目錄") - [下一頁](# "延遲請求回調") | - [上一頁](# "添加 Favicon") | - [Flask 0.10.1 文檔](#) ? - [Flask 代碼模式](#) ? # 數據流 有時,您希望發送非常巨量的數據到客戶端,遠遠超過您可以保存在內存中的量。在您實時地產生這些數據時,如何才能直接把他發送給客戶端,而不需要在文件系統中中轉呢? 答案是生成器和 Direct Response。 ### 基本使用 下面是一個簡單的視圖函數,這一視圖函數實時生成大量的 CSV 數據,這一技巧使用了一個內部函數,這一函數使用生成器來生成數據,并且稍后激發這個生成器函數時,把返回值傳遞給一個 response 對象: ~~~ from flask import Response @app.route('/large.csv') def generate_large_csv(): def generate(): for row in iter_all_rows(): yield ','.join(row) + '\n' return Response(generate(), mimetype='text/csv') ~~~ 每一個 yield 表達式直接被發送給瀏覽器。現在,仍然有一些 WSGI 中間件可能打斷數據流,所以在這里請注意那些在帶緩存快照的調試環境,以及其他一些您可能激活了的東西。 ### 在模板中生成流 Jinja2 模板引擎同樣支持分塊逐個渲染模板。Flask 沒有直接暴露這一功能到模板中,因為它很少被用到,但是您可以很輕易的自己實現: ~~~ from flask import Response def stream_template(template_name, **context): app.update_template_context(context) t = app.jinja_env.get_template(template_name) rv = t.stream(context) rv.enable_buffering(5) return rv @app.route('/my-large-page.html') def render_large_template(): rows = iter_all_rows() return Response(stream_template('the_template.html', rows=rows)) ~~~ 這一技巧是從應用程序上的 Jinja2 的環境中得到那個模板對象,然后調用stream() 函數而不是 render()函數。前者返回的是一個流對象,而不是后者的字符串。因為我們繞過了 Flask的模板渲染函數,而是直接使用了模板對象,所以我們手動必須調用[update_template_context()](# "flask.Flask.update_template_context") 函數來確保更新了模板的渲染上下文。這一模板隨后以流的方式迭代直到結束。因為每一次您使用使用一個 yield 。服務器都會將所有的已經產生的內容塞給給客戶端,因可能希望在模板中緩沖一部分元素之后再發送,而不是每次都直接發送。您可以使用 rv.enable_buffering(size)來實現,size 的較為合理的默認值是 5 。 ? 版權所有 2013, Armin Ronacher.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看