亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在返回“send_file”的燒瓶函數中,代碼似乎不會在后續請求上運行,但文件仍然會下載。為什么?

在返回“send_file”的燒瓶函數中,代碼似乎不會在后續請求上運行,但文件仍然會下載。為什么?

RISEBY 2023-11-13 10:44:42
我正在使用具有以下路線的 Flask 代碼:@app.route('/download')def download_file():    path = "certificate.docx"    print("certificate printed")    print(os.getcwd())    return send_file(path, as_attachment=True)HTML 代碼:<p><a href="{{ url_for('.download_file') }}">Download</a></p>執行這段代碼是為了下載名為certificate.docx.問題是函數內的打印語句download_file()實際上并未被執行,但它仍然允許我下載文件。
查看完整描述

2 回答

?
繁華開滿天機

TA貢獻1816條經驗 獲得超4個贊

這個問題很可能是由 Flask 內置的緩存引起的。這設置了Cache-Control標頭,并適用于 Flask 提供的靜態文件,也適用于send_filesend_from_directory函數。

這可以解釋文件下載的行為,但打印語句未運行。事實上,該請求甚至不會到達服務器。

您可以在開發工具的網絡選項卡上直觀地看到這一點:

https://img1.sycdn.imooc.com/65518db700017bf006560235.jpg

您可以通過在應用程序上設置以下配置變量來禁用此功能:

app.config['SEND_FILE_MAX_AGE_DEFAULT']?=?-1

-1值禁用緩存。

您可能必須實際清除瀏覽器緩存才能使此設置生效,或者更改端點的 URL?/download,盡管這很不方便。

設置后請注意差異:

https://img1.sycdn.imooc.com/65518dc30001781a06550230.jpg

查看完整回答
反對 回復 2023-11-13
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

我假設您希望打印語句顯示在 HTML 中。如果這不是您想要的,我深表歉意。

首先, print 在您的示例中所做的是在服務器上輸出文本,因此文本永遠不會發送到您的 HTML。

要將消息發送到 HTML,您可以flash從 Flask 導入。該flash函數將向您的 HTML 發送一條消息,您可以在其中接收帶有get_flashed_messages().

例子

下面我們做幾件事。

  1. 相反print,我們使用flash.?傳遞給的第一個參數flash是消息。("certificate printed"os.getcwd()) 第二個參數是消息的類別。(?"download_file")請注意,類別可以是完全任意的,只要模板中使用相同的類別即可。

  2. HTML 中的鏈接下方。我們調用get_flashed_messages它并將其分配給一個變量download_msgs。在這種情況下唯一的論據是category_filter=["download_file"]。這將獲取我們之前發送的所有消息flash,并僅保留具有該"download_file"類別的消息。

  3. 我們使用 來檢查消息{% if download_msgs %},使用 來循環消息{% for message in download_msgs %},并顯示每條消息。

燒瓶:

from flask import Flask, flash, send_file


app = Flask(__name__)


@app.route('/download')

def download_file():

? ? path = "certificate.docx"

? ? flash("certificate printed", "download_file")

? ? flash(os.getcwd(), "download_file")

? ? return send_file(path, as_attachment=True)

HTML:


<p>

? <a href="{{ url_for('.download_file') }}">Download</a>


? {% with download_msgs = get_flashed_messages(category_filter=["download_file"]) %}

? ? {% if download_msgs %}

? ? ? <ul class=flashes>

? ? ? {% for message in download_msgs %}

? ? ? ? <li>{{ message }}</li>

? ? ? {% endfor %}

? ? ? </ul>

? ? {% endif %}

? {% endwith %}

</p>

這個例子很粗糙,但我希望它能回答你的問題

概括

  • 要將消息從 Flask 應用程序發送到 HTML 代碼,您可以使用flashFlask 應用程序中的函數。

  • 要從 Flask 應用程序接收消息到 HTML 代碼,您可以get_flashed_messages在 HTML 代碼中使用該函數。

  • 您可以使用類別來區分閃現的消息。在您的燒瓶應用程序中使用第二個參數flash。在 HTML 代碼中使用Category_filter關鍵字參數。get_flashed_messages


查看完整回答
反對 回復 2023-11-13
  • 2 回答
  • 0 關注
  • 174 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號