Cette fois, je vais expliquer le chemin de l'URL pour accéder aux fichiers statiques avec flask et comment changer le répertoire de stockage. En outre, l'API REST ne nécessite généralement pas de fichiers statiques, je voudrais donc expliquer comment les désactiver.
static_folder
Le répertoire qui stocke les fichiers statiques dans flask peut être modifié avec static_folder
.
Le paramètre par défaut est le répertoire static
.
dir_change_app.py
# -*- coding: utf-8 -*-
import os
from flask import Flask
# flask
# app = Flask(__name__)
#Spécifié par chemin relatif
app = Flask(__name__, static_folder='resources')
#Spécifiez avec un chemin absolu (le répertoire est/)
# app = Flask(__name__, static_folder='C:/tmp/www')
#Spécifiez avec un chemin absolu (le répertoire est\\)
# app = Flask(__name__, static_folder='C:\\tmp\\www')
# main
if __name__ == "__main__":
#Afficher les informations de mappage Flask
print app.url_map
app.run(host=os.getenv("APP_ADDRESS", 'localhost'), \
port=os.getenv("APP_PORT", 3000))
Vous pouvez vérifier les informations de mappage actuelles dans ** flask ʻurl_map`. ** **
Laisser par défaut, non spécifié
C:\demo>python dir_change_app.py
Map([<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:17:28] "GET /static/memo.txt HTTP/1.1" 200 -
Par défaut, il démarre sur l'hypothèse que le répertoire courant a un répertoire static
. Ainsi, après avoir créé un répertoire static
et enregistré memo.txt
, si vous accédez à http: // localhost: 3000 / static / memo.txt
avec un navigateur Web, memo.txt
sera affiché. Je vais.
Spécifié par chemin relatif
C:\demo>python dir_change_app.py
Map([<Rule '/resources/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:03:36] "GET /resources/demo.js HTTP/1.1" 200 -
Si vous spécifiez le répertoire resources
avec un chemin relatif, il sera accessible à partir d'un navigateur Web comme http: // localhost: 3000 / resources / demo.js
.
Spécifié par chemin absolu
C:\demo>python dir_change_app.py
Map([<Rule '/www/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:04:57] "GET /www/demo.js HTTP/1.1" 200 -
Vous pouvez également spécifier un chemin absolu. Pour Windows, utilisez «/» ou «\» pour séparer les répertoires.
Dans le cas d'un chemin absolu, le nom du répertoire à la fin du chemin sera le nom du chemin de l'URL. Si la démo static_folder = 'C: / tmp / www'
, ce sera / www
.
Comment changer l'URL sera expliqué plus tard.
static_url_path
L'URL pour accéder aux fichiers statiques avec flask peut être modifiée avec static_url_path
.
Le paramètre par défaut est le même que le nom du répertoire spécifié dans static_folder
.
url_change_app.py
# -*- coding: utf-8 -*-
import os
from flask import Flask
# flask
app = Flask(__name__)
#Spécifiez le chemin de l'URL
app = Flask(__name__, static_url_path='/js')
#Utilisez plusieurs délimiteurs pour les chemins d'URL
# app = Flask(__name__, static_url_path='/h/o/g/e')
#Si vous ne souhaitez rien spécifier dans le chemin de l'URL, spécifiez un caractère vide
# app = Flask(__name__, static_url_path='')
# main
if __name__ == "__main__":
#Afficher les informations de mappage Flask
print app.url_map
app.run(host=os.getenv("APP_ADDRESS", 'localhost'), \
port=os.getenv("APP_PORT", 3000))
Puisque le répertoire de stockage n'est pas spécifié ici dans static_folder
, le fichier statique est stocké dans le répertoire static
du répertoire courant par défaut.
** Veuillez noter que la valeur spécifiée par static_url_path
doit toujours commencer par /
. ** **
Spécifiez normalement le chemin de l'URL
C:\demo>python url_change_app.py
Map([<Rule '/js/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:57:08] "GET /js/demo.js HTTP/1.1" 200 -
Le répertoire de stockage est static
, mais vous pouvez y accéder avec / js / demo.js
.
Spécifiez plusieurs délimiteurs dans le chemin de l'URL
C:\demo>python url_change_app.py
Map([<Rule '/h/o/g/e/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:57:51] "GET /h/o/g/e/demo.js HTTP/1.1" 200 -
Puisque c'est le chemin utilisé lors de l'accès par URL, vous pouvez accéder à demo.js
sans aucun problème même si vous spécifiez plusieurs délimiteurs.
Si vous ne spécifiez rien dans le chemin
C:\demo>python url_change_app.py
Map([<Rule '/<filename>' (HEAD, OPTIONS, GET) -> static>])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
127.0.0.1 - - [19/Aug/2017 14:58:39] "GET /demo.js HTTP/1.1" 200 -
Vous pouvez y accéder en spécifiant simplement le nom du fichier dans le répertoire de stockage, sans spécifier de chemin inutile comme / demo.js
.
static_folder = None
pour désactiverno_static_app.py
# -*- coding: utf-8 -*-
import os
from flask import Flask
# flask
#Fonction de fichier statique désactivée
app = Flask(__name__, static_folder=None)
# main
if __name__ == "__main__":
#Afficher les informations de mappage Flask
print app.url_map
app.run(host=os.getenv("APP_ADDRESS", 'localhost'), \
port=os.getenv("APP_PORT", 3000))
Fonction de fichier statique désactivée
C:\demo>python no_static_app.py
Map([])
* Running on http://localhost:3000/ (Press CTRL+C to quit)
** Si vous regardez les informations de mappage, vous pouvez voir que rien n'est défini et que la fonction de fichier statique est désactivée. ** **
Cette fois, j'ai expliqué comment changer le répertoire de stockage des fichiers statiques dans flask et l'URL pour accéder aux fichiers statiques.
Comme indiqué dans Micro Service with Python (Overview), le but est de créer un micro service (API REST), donc la fonction des fichiers statiques est à l'origine Ce n'est pas nécessaire, mais j'ai vu les informations de cartographie et j'ai trouvé que cette fonctionnalité était automatiquement activée.
Je pensais que certaines personnes pourraient ne pas en être conscientes comme moi, alors je l'ai résumé sous forme d'article cette fois.
Comme pour les bibliothèques autres que flask, du point de vue de la sécurité, je voudrais étudier en profondeur les fonctions activées par défaut et comprendre le contenu avant de les utiliser.
Recommended Posts