Maison > Questions et réponses > le corps du texte
P粉1555517282023-08-24 12:55:28
Si vous souhaitez simplement déplacer l'emplacement de vos fichiers statiques, le plus simple est de déclarer le chemin dans le constructeur. Dans l'exemple ci-dessous, j'ai déplacé les modèles et les fichiers statiques dans un sous-dossier nommé web
.
app = Flask(__name__, static_url_path='', static_folder='web/static', template_folder='web/templates')
static_url_path=''
Supprimez tous les chemins précédents de l'URL. static_folder='web/static'
Sert tout fichier trouvé dans un dossier
web/static
Sous forme de fichier statique. template_folder='web/templates'
De même, cela change
Dossier de modèles. En utilisant cette méthode, l'URL suivante renverra un fichier CSS :
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
Enfin, voici un instantané de la structure des dossiers, où flask_server.py
est l'instance Flask :
P粉2129717452023-08-24 09:31:38
En production, configurez un serveur HTTP (Nginx, Apache, etc.) devant l'application pour gérer /static
les requêtes des dossiers statiques. Les serveurs Web dédiés sont très efficaces pour servir efficacement les fichiers statiques, même si à faible volume, vous ne remarquerez peut-être pas la différence par rapport à Flask.
Flask en créera automatiquement un /static/
路由,该路由将为 Python 旁边的 static
文件夹下的任何 filename
提供服务定义 Flask 应用程序的模块。使用url_for
链接到静态文件:url_for('static', filename='js/analytics.js')
Vous pouvez également utiliser send_from_directory
pour servir des fichiers à partir d'un répertoire au sein de votre propre itinéraire. Cela prend un répertoire de base et un chemin, et garantit que le chemin est contenu dans ce répertoire afin que les chemins fournis par l'utilisateur puissent être acceptés en toute sécurité. Cela peut être utile si vous souhaitez vérifier quelque chose avant de servir le fichier, par exemple si l'utilisateur connecté dispose d'autorisations.
from flask import send_from_directory @app.route('/reports/<path:path>') def send_report(path): return send_from_directory('reports', path)
N'utilisez passend_file
ou send_static_file
avec les chemins fournis par l'utilisateur. Cela vous exposera à une attaque par traversée de répertoire send_file
或 send_static_file
与用户提供的路径一起使用。这将使您面临目录遍历攻击。 send_from_directory
.
BytesIO
对象传递给 send_file
将其作为文件提供。在这种情况下,您需要将其他参数传递给 send_file
Si vous générez le fichier en mémoire sans l'écrire dans le système de fichiers, vous pouvez transmettre un objet BytesIO
à send_file
send_file
car il ne peut pas déduire des éléments tels que le nom de fichier ou le type de contenu. 🎜