2013-11-19 13 views
8

Come utilizzare app.config.from_envvar()?Come utilizzare app.config.from_envvar? (Flask)

Ho dato un'occhiata a Flask doc e cerco questo argomento, cosa che tutti sanno è farlo.

DATABASE = 'flaskr.db' 
DEBUG = True 
SECRET_KEY = 'development key' 

app = Flask(__name__) 
app.config.from_envvar(’FLASKR_SETTINGS’, silent=True) 

Questo caricherà la configurazione da FLASKR_SETTINGS? e come può il programma sapere cos'è FLASKR_SETTINGS? dovrei anche impostare qualcosa di simile (il percorso del file di configurazione) ?:

FLASKR_SETTINGS = desktop/my_flask_project/FlaskConfig 

e spostare le prime 3 righe in quel file e quando ho eseguito il file, esso verrà caricato in?

e ho scelto solo di utilizzare di questi diritto? tra l'app.config.from_envvar (questo per caricare la configurazione da file esterno) o l'app.config.from_object (nome) (questo caricherà la configurazione all'interno del file)? Ho capito bene?

risposta

5

envvar è l'abbreviazione di Environment Variable. Se si utilizza un sistema operativo basato su Linux (Ubuntu, Mac, ecc.), Quando si esegue una shell normale probabilmente si sta utilizzando bash. Per impostare una variabile d'ambiente in bash è sufficiente fare:

$ SOME_NAME=some_value 

Quindi, nel caso di domanda Flask che si configurato dalla variabile FLASKR_SETTINGS ambiente, si farebbe:

$ FLASKR_SETTINGS=/path/to/settings/file.ext 
$ python your_script.py 

Che cosa significa pallone viene semplicemente importa quel file come se fosse un normale file Python e tira fuori ogni nome UPPERCASE_ONLY nel file (Qualsiasi altro casoCombinazione verrà ignorata).

Lo stesso vale per from_object - infatti, from_object può anche prendere una stringa importabile:

app.config.from_object("importable.configuration") 

Infine, ricordiamo che non si deve avere solo uno chiamata config - più chiamate può essere utilizzato:

app.config.from_object("your.package.default.config") 
app.config.from_envvar("YOUR_APPS_ENVVAR", silent=True) 
+0

Quindi, nel mio caso, se io uso solo la configurazione dall'esterno ho solo bisogno app.config.from_envvar() e non c'è bisogno di usare app.config.from_object() giusto? mi dici solo che più chiamate sono facoltative? il file che contiene il codice di configurazione deve essere .py? o .ext? Vedo nel Doc che dice .cfg o_O !!! – Team

+0

@Team - corretto, puoi usare qualsiasi combinazione di 'from_object' e' from_envvar' che desideri. Per quanto riguarda l'estensione, può essere qualsiasi cosa tu voglia ('.py',' .cfg', '.i-just-made-this-up-right-now' ... funzioneranno tutti). –

+0

Ho digitato. venv/bin/activate quindi esporta FLASKR_CONFIG = Utenti/Squadra/desktop/flask \ project/flaskr/config.py e poi python flaskr.py quindi ha errore SyntaxError: Carattere non ASCII '\ xe2' nel file flaskr.py on riga 8, ma nessuna codifica dichiarata; vedi http: //www.python.org/peps/pep-0263.html per i dettagli (venv) Tammarats-MacBook-Air: flaskr Team $ << ---- la riga 8 è questo codice app.config.from_envvar ('FLASKR_CONFIG', silent = True) Ho fatto qualcosa di sbagliato ? cosa dice l'errore? – Team