Lors de la création d'un fichier de configuration dans l'application Flask J'étudiais comment diviser chaque environnement et cacher le contenu.
Lire Documents officiels et Articles d'outre-mer Je vais résumer cela. La majeure partie de cette page est réalisée à partir des deux traductions japonaises ci-dessus.
Je vais résumer les parties qui devraient être conservées dans le fichier de configuration Flask.
Vous pouvez écrire dans la variable config
de l'instance Flask
au format dictionnaire.
Paramètres de base
app.config['DEBUG'] = True
Vous pouvez lire la liste des paramètres à partir du fichier spécifié.
Paramètres du fichier
#Modèle qui spécifie directement le chemin du fichier
app.config.from_pyfile('config_file.cfg')
#Un modèle qui spécifie une variable d'environnement (chemin absolu) qui indique l'emplacement du fichier
app.config.from_envvar('FLASK_CONFIG_FILE')
Dans le fichier, vous pouvez décrire les paramètres dans le format de fichier INI suivant.
config_file.cfg
TESTING=False
DEBUG=True
Vous pouvez charger les paramètres en tant qu'objet Python.
Paramètres de l'objet
app.config.from_object('config.BaseConfig')
J'ai senti que je pouvais voir from_json
dans le code source, mais je vais l'ignorer.
Dans le fichier, vous pouvez structurer les paramètres sous forme de scripts Python comme suit:
config.py
class BaseConfig(object):
DEBUG = False
TESTING = False
class DevelopmentConfig(BaseConfig):
DEBUG = True
TESTING = True
class TestingConfig(BaseConfig):
DEBUG = False
TESTING = True
Le contrôle de la version source est essentiel lors du développement d'applications Le fichier de configuration comprend les mots de passe, les clés d'accès API, etc. Il y a des informations que vous ne souhaitez pas inclure dans la gestion des versions.
Dans Flask, le "dossier d'instance" est Il s'agit d'une fonction pour exclure un fichier de paramètres spécifique de la gestion des versions.
Vous pouvez spécifier le dossier d'instance avec un chemin absolu lors de l'initialisation de Flask
.
Spécification du chemin du dossier d'instance
app = Flask(__name__, instance_path='/path/to/instance/folder')
Si ce n'est pas spécifié, le répertoire par défaut «instance» sera Il sera reconnu comme un dossier d'instance.
Si vous écrivez comme suit, utilisez un chemin relatif à partir du dossier d'instance Vous pouvez lire le fichier de paramètres.
Appel de fichier relatif
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('application.cfg', silent=True)
Ici, nous faisons référence à ʻinstance / application.cfg.
silent = True` supprime l'erreur lorsque le fichier n'est pas trouvé.
Cependant, cela seul ne signifie pas qu'il peut être exclu de la gestion des versions.
** N'oubliez pas de mettre le chemin du dossier d'instance dans ** .gitignore
**. ** **
Il y a une section sur les Meilleures pratiques sur la page officielle. Le contenu est court et pas très précis. (En raison de problèmes de maîtrise de l'anglais, je ne peux lire que "Il vaut mieux être facile à tester" ...)
D'autre part, l'article ici déclare ce qui suit.
Good practice is to have a default configuration, which is under source control and to override it with sensitive and specific information kept in instance folders. For the default configuration you could use object-based configuration hierarchy(described in Object-based configuration section) and to manage which configuration object to load via environment variables:
Le dernier élément consiste à basculer entre «développement» et «production». L'écrire comme un objet devrait faciliter le test.
À titre d'exemple spécifique, il est décrit comme suit.
Meilleures pratiques (non officielles)
#Le paramètre de base est config sous contrôle de version.Décrit comme un objet dans py
config = {
"development": "bookshelf.config.DevelopmentConfig",
"testing": "bookshelf.config.TestingConfig",
"default": "bookshelf.config.DevelopmentConfig"
}
def configure_app(app):
#Déterminez le fichier de paramètres à lire à l'aide des variables d'environnement
config_name = os.getenv('FLASK_CONFIGURATION', 'default')
#Lire les paramètres sous forme d'objets
app.config.from_object(config[config_name])
#Remplacer les paramètres sensibles par les paramètres du dossier d'instance
app.config.from_pyfile('config.cfg', silent=True)
Je pense qu'il serait difficile d'appliquer les paramètres ci-dessus à tous
config
pour les petites applications que vous créez vous-mêmeJ'avais la reconnaissance que.
Je l'ai écrit depuis longtemps, mais en fin de compte, il s'agit de savoir si je peux être d'accord avec lui. Même si la configuration est sale, il n'y a pas de problème pour le moment tant que le fichier secret n'est pas divulgué.
J'espère trouver une meilleure forme à mesure que l'application se développe.
Recommended Posts