[PYTHON] Best Practices für Konfigurationsdateien in Flask

Überblick

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.

Konfiguration in Flasche

Ich werde die Teile zusammenfassen, die in der Kolbeneinstellungsdatei enthalten sein sollten.

Grundeinstellungen

Sie können im Wörterbuchformat in die Variable config der Instanz Flask schreiben.

Grundeinstellungen


app.config['DEBUG'] = True

Einstellungen aus Datei

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

Einstellungen aus dem Objekt

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

Instanzordner

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

beste Übung

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)

Zusammenfassung

Ich denke, es wäre schwierig, die obigen Einstellungen auf alle anzuwenden

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

Best Practices für Konfigurationsdateien in Flask
Dateioperationen in Python
Dateimanipulation mit Python
Lesen Sie die Protokollierungseinstellungen mit Flask aus einer externen Datei
Ändern Sie das statische Dateispeicherverzeichnis und die URL in Flask
Bild-Uploader mit Flasche
Best Practices für die dynamische Verarbeitung von LINE Flex-Nachrichten in Django
Tox Einstellungsdatei Spickzettel
Lernen Sie Best Practices von Cookiecutter-Django
HTTP-Umgebungsvariablen in Flask
__version__ Fallen und Best Practices
Japanische JSON-Datei anzeigen
Hochladen mehrerer Dateien mit Flask
Überprüfen Sie, ob die Einstellungsdatei leicht verständlich gelesen wird