国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

So stellen Sie statische Dateien in Flask bereit
P粉754473468
P粉754473468 2023-08-23 15:50:41
0
2
661
<p>Das ist also peinlich. Ich habe eine App in <code>Flask</code> erstellt und sie stellt derzeit nur eine statische HTML-Seite mit einigen Links zu CSS und JS bereit. Ich kann in der Dokumentation für <code>Flask</code> keine Stelle finden, die die Rückgabe statischer Dateien beschreibt. Ja, ich kann <code>render_template</code> verwenden, aber ich wei?, dass die Daten nicht als Vorlage vorliegen. Ich denke, <code>send_file</code> oder <code>url_for</code> sind korrekt, aber ich kann sie nicht zum Laufen bringen. In der Zwischenzeit ?ffne ich die Datei, lese den Inhalt und stelle die <code>Response</code> mit dem entsprechenden Mimetyp ein: </p> <pre class="brush:php;toolbar:false;">import os.path aus Kolben importieren Kolben, Antwort app = Flask(__name__) app.config.from_object(__name__) def root_dir(): # pragma: no cover return os.path.abspath(os.path.dirname(__file__)) def get_file(filename): # pragma: no cover versuchen: src = os.path.join(root_dir(), Dateiname) # Finden Sie heraus, wie Flask statische Dateien zurückgibt #Versucht: # - render_template # - Datei senden # Das sollte nicht so offensichtlich sein return open(src).read() au?er IOError als exc: Rückgabe str(exc) @app.route('/', methoden=['GET']) def metrics(): # pragma: no cover content = get_file('jenkins_analytics.html') return Response(content, mimetype="text/html") @app.route('/', defaults={'path': ''}) @app.route('/<path:path>') def get_resource(path): # pragma: no cover mimetypes = { ?.css“: ?text/css“, ?.html“: ?text/html“, ?.js“: ?application/javascript“, } Complete_path = os.path.join(root_dir(), path) ext = os.path.splitext(path)[1] mimetype = mimetypes.get(ext, ?text/html“) content = get_file(complete_path) return Response(content, mimetype=mimetype) if __name__ == '__main__': # pragma: no cover app.run(port=80)</pre> <p>M?chte jemand ein Codebeispiel oder eine URL dafür bereitstellen? Ich wusste, dass es sehr einfach sein würde. </p>
P粉754473468
P粉754473468

Antworte allen(2)
P粉155551728

如果您只想移動(dòng)靜態(tài)文件的位置,那么最簡(jiǎn)單的方法是在構(gòu)造函數(shù)中聲明路徑。在下面的示例中,我已將模板和靜態(tài)文件移動(dòng)到名為 web 的子文件夾中。

app = Flask(__name__,
            static_url_path='', 
            static_folder='web/static',
            template_folder='web/templates')
  • static_url_path='' 從 URL 中刪除所有前面的路徑。
  • static_folder='web/static' 提供在文件夾中找到的任何文件 web/static 作為靜態(tài)文件。
  • template_folder='web/templates' 類似地,這會(huì)更改 模板文件夾。

使用此方法,以下 URL 將返回 CSS 文件:

<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">

最后,這是文件夾結(jié)構(gòu)的快照,其中 flask_server.py 是 Fl??ask 實(shí)例:

P粉212971745

在生產(chǎn)中,在應(yīng)用程序前面配置 HTTP 服務(wù)器(Nginx、Apache 等),以處理來自靜態(tài)文件夾的 /static 請(qǐng)求。專用 Web 服務(wù)器非常擅長(zhǎng)高效地提供靜態(tài)文件,盡管在低容量時(shí)您可能不會(huì)注意到與 Flask 相比的差異。

Flask 會(huì)自動(dòng)創(chuàng)建一個(gè) /static/ 路由,該路由將為 Python 旁邊的 static 文件夾下的任何 filename 提供服務(wù)定義 Flask 應(yīng)用程序的模塊。使用url_for鏈接到靜態(tài)文件:url_for('static', filename='js/analytics.js')

您還可以使用 send_from_directory 來提供文件從您自己的路線中的目錄中。這需要一個(gè)基本目錄和一個(gè)路徑,并確保該路徑包含在該目錄中,這樣可以安全地接受用戶提供的路徑。如果您想在提供文件之前檢查某些內(nèi)容,例如登錄用戶是否具有權(quán)限,這可能很有用。

from flask import send_from_directory

@app.route('/reports/<path:path>')
def send_report(path):
    return send_from_directory('reports', path)

請(qǐng)勿send_filesend_static_file 與用戶提供的路徑一起使用。這將使您面臨目錄遍歷攻擊send_from_directory 旨在安全地處理已知目錄下用戶提供的路徑,如果路徑嘗試轉(zhuǎn)義該目錄,則會(huì)引發(fā)錯(cuò)誤。

如果您在內(nèi)存中生成文件而不將其寫入文件系統(tǒng),則可以將 BytesIO 對(duì)象傳遞給 send_file 將其作為文件提供。在這種情況下,您需要將其他參數(shù)傳遞給 send_file,因?yàn)樗鼰o法推斷文件名或內(nèi)容類型等內(nèi)容。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage