Rumah > Soal Jawab > teks badan
P粉1555517282023-08-24 12:55:28
Jika anda hanya mahu mengalihkan lokasi fail statik anda, cara paling mudah ialah mengisytiharkan laluan dalam pembina. Dalam contoh di bawah, saya telah mengalihkan templat dan fail statik ke dalam subfolder bernama web
.
app = Flask(__name__, static_url_path='', static_folder='web/static', template_folder='web/templates')
static_url_path=''
Alih keluar semua laluan sebelumnya daripada URL. static_folder='web/static'
Menyajikan mana-mana fail yang terdapat dalam folder
web/static
Sebagai fail statik. template_folder='web/templates'
Begitu juga, ini berubah
Folder templat. Menggunakan kaedah ini, URL berikut akan mengembalikan fail CSS:
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
Akhir sekali, berikut ialah petikan struktur folder, dengan flask_server.py
ialah contoh Flask:
P粉2129717452023-08-24 09:31:38
Dalam pengeluaran, konfigurasikan pelayan HTTP (Nginx, Apache, dll.) di hadapan aplikasi untuk mengendalikan /static
permintaan daripada folder statik. Pelayan web yang berdedikasi sangat baik dalam menyediakan fail statik dengan cekap, walaupun pada volum yang rendah anda mungkin tidak dapat melihat perbezaannya berbanding dengan Flask.
Flask secara automatik akan mencipta satu /static/
路由,该路由将为 Python 旁边的 static
文件夹下的任何 filename
提供服务定义 Flask 应用程序的模块。使用url_for
链接到静态文件:url_for('static', filename='js/analytics.js')
Anda juga boleh menggunakan send_from_directory
untuk menyampaikan fail daripada direktori dalam laluan anda sendiri. Ini mengambil direktori asas dan laluan, dan memastikan laluan itu terkandung dalam direktori itu supaya laluan yang dibekalkan pengguna boleh diterima dengan selamat. Ini boleh berguna jika anda ingin menyemak sesuatu sebelum menyampaikan fail, seperti sama ada pengguna log masuk mempunyai kebenaran.
from flask import send_from_directory @app.route('/reports/<path:path>') def send_report(path): return send_from_directory('reports', path)
Jangangunakan send_file
atau send_static_file
dengan laluan yang dibekalkan pengguna. Ini akan mendedahkan anda kepada serangan traversal direktori send_file
或 send_static_file
与用户提供的路径一起使用。这将使您面临目录遍历攻击。 send_from_directory
.
BytesIO
对象传递给 send_file
将其作为文件提供。在这种情况下,您需要将其他参数传递给 send_file
Jika anda menjana fail dalam ingatan tanpa menulisnya ke sistem fail, anda boleh menghantar objek BytesIO
ke send_file
send_file
kerana ia tidak boleh membuat kesimpulan perkara seperti nama fail atau jenis kandungan. 🎜