[PYTHON] Modifier le répertoire de stockage de fichiers statiques et l'URL dans Flask

1.Tout d'abord

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.

1.1. Environnement de vérification

2. Changez le répertoire de stockage avec 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.

2.1. Code source

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`. ** **

2.2. Contrôle de fonctionnement

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.

3. Modifiez l'URL pour accéder avec 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.

3.1. Code source

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 /. ** **

3.2. Contrôle de fonctionnement

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.

4. Définissez static_folder = None pour désactiver

4.1. Code source

no_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))

4.2. Contrôle de fonctionnement

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. ** **

5. Enfin

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

Modifier le répertoire de stockage de fichiers statiques et l'URL dans Flask
Comment modifier le répertoire statique par défaut dans Flask
Vérifiez et déplacez le répertoire en Python
Meilleures pratiques pour les fichiers de configuration dans Flask
Ecrire le fichier O_SYNC en C et Python
Créez et déployez des applications Flask avec PTVS
Mappez automatiquement les contrôleurs à partir des URL avec Flask
Obtenez le titre et l'URL du site Web de manière récursive avec Scrapy