Beim Erstellen einer Konfigurationsdatei in der Flask-Anwendung Ich habe gelernt, wie man jede Umgebung unterteilt und den Inhalt verbirgt.
Lesen Sie Offizielle Dokumente und Artikel aus Übersee. Ich werde das zusammenfassen. Der größte Teil dieser Seite besteht aus den beiden oben genannten japanischen Übersetzungen.
Ich werde die Teile zusammenfassen, die in der Kolbeneinstellungsdatei enthalten sein sollten.
Sie können im Wörterbuchformat in die Variable config
der Instanz Flask
schreiben.
Grundeinstellungen
app.config['DEBUG'] = True
Sie können die Liste der Einstellungen aus der angegebenen Datei lesen.
Einstellungen aus Datei
#Muster, das den Dateipfad direkt angibt
app.config.from_pyfile('config_file.cfg')
#Ein Muster, das eine Umgebungsvariable (absoluter Pfad) angibt, die den Speicherort der Datei angibt
app.config.from_envvar('FLASK_CONFIG_FILE')
In der Datei können Sie die Einstellungen im folgenden INI-Dateiformat beschreiben.
config_file.cfg
TESTING=False
DEBUG=True
Sie können die Einstellungen als Python-Objekt laden.
Einstellungen aus dem Objekt
app.config.from_object('config.BaseConfig')
Ich hatte das Gefühl, dass ich "from_json" im Quellcode sehen könnte, aber ich werde es ignorieren. Innerhalb der Datei können Sie die Einstellungen wie folgt als Python-Skripte strukturieren:
config.py
class BaseConfig(object):
DEBUG = False
TESTING = False
class DevelopmentConfig(BaseConfig):
DEBUG = True
TESTING = True
class TestingConfig(BaseConfig):
DEBUG = False
TESTING = True
Die Quellversionskontrolle ist bei der Entwicklung von Anwendungen unerlässlich Die Konfigurationsdatei enthält Kennwörter, API-Zugriffsschlüssel usw. Es gibt Informationen, die Sie nicht in die Versionsverwaltung einbeziehen möchten.
In Flask ist "Instanzordner" Dies ist eine Funktion zum Ausschließen einer bestimmten Einstellungsdatei von der Versionsverwaltung.
Sie können den Instanzordner mit einem absoluten Pfad angeben, wenn Sie "Flask" initialisieren.
Angeben des Pfads des Instanzordners
app = Flask(__name__, instance_path='/path/to/instance/folder')
Wenn dies nicht angegeben ist, lautet das Standardverzeichnis "Instanz" Es wird als Instanzordner erkannt.
Wenn Sie wie folgt schreiben, verwenden Sie einen relativen Pfad aus dem Instanzordner Sie können die Einstellungsdatei lesen.
Relativer Dateiaufruf
app = Flask(__name__, instance_relative_config=True)
app.config.from_pyfile('application.cfg', silent=True)
Hier beziehen wir uns auf instance / application.cfg
.
quiet = True
unterdrückt den Fehler, wenn die Datei nicht gefunden wird.
Dies allein bedeutet jedoch nicht, dass es von der Versionsverwaltung ausgeschlossen werden kann.
** Vergessen Sie nicht, den Pfad des Instanzordners in ** .gitignore
** einzutragen. ** ** **
Auf der offiziellen Seite gibt es einen Abschnitt zu Best Practices. Der Inhalt ist kurz und nicht sehr spezifisch. (Aufgrund des Problems der Englischkenntnisse kann ich nur lesen "Es ist besser, einfach zu testen" ...)
Andererseits heißt es im Artikel hier wie folgt.
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:
Der letzte Punkt ist der Wechsel zwischen "Entwicklung" und "Produktion". Das Schreiben als Objekt sollte das Testen erleichtern.
Als spezifisches Beispiel wird es wie folgt beschrieben.
Best Practice (inoffiziell)
#Die Grundeinstellung ist die Konfiguration unter Versionskontrolle.Beschrieben als Objekt in py
config = {
"development": "bookshelf.config.DevelopmentConfig",
"testing": "bookshelf.config.TestingConfig",
"default": "bookshelf.config.DevelopmentConfig"
}
def configure_app(app):
#Bestimmen Sie die zu lesende Einstellungsdatei mithilfe von Umgebungsvariablen
config_name = os.getenv('FLASK_CONFIGURATION', 'default')
#Einstellungen als Objekte lesen
app.config.from_object(config[config_name])
#Überschreiben Sie vertrauliche Einstellungen mit den Einstellungen im Instanzordner
app.config.from_pyfile('config.cfg', silent=True)
Ich denke, es wäre schwierig, die obigen Einstellungen auf alle anzuwenden
app.config
mit solider Schrift an.Ich hatte die Erkenntnis, dass.
Ich habe es schon lange geschrieben, aber am Ende geht es darum, ob ich dem zustimmen kann. Selbst wenn die Konfiguration verschmutzt ist, gibt es vorerst kein Problem, solange die geheime Datei nicht durchgesickert ist.
Ich hoffe, eine bessere Form zu finden, wenn die Anwendung wächst.
Recommended Posts