When we configure a Flask application, we're able to do so as per the need. So, in this recipe, we will try to understand the different ways in which Flask can be configured, including how to load a configuration from environment variables, Python files, or even a config object.
Handling basic configurations
Getting ready
In Flask, a configuration is done on an attribute named config of the Flask object. The config attribute is a subclass of a dictionary, and we can modify it just like any dictionary.
How to do it...
To run our application in the debug mode, for instance, we can write the following:
app = Flask(__name__) app.config['DEBUG'] = True
app.debug = True
Alternatively, we can pass debug as a named argument to app.run, as follows:
app.run(debug=True)
In new versions of Flask, the debug mode can also set on an environment variable, FLASK_DEBUG=1, and then run the app using flask run or Python's -m switch:
$ export FLASK_DEBUG=1
Enabling the debug mode will make the server reload itself in the event of any code changes, and it also provides the very helpful Werkzeug debugger when something goes wrong.
There are a bunch of configuration values provided by Flask. We will come across them in relevant recipes throughout this chapter.
As an application grows larger, there is a need to manage the application's configuration in a separate file, as shown in the following example. Mostly specific to machine-based setups, it is unlikely that this will be a part of the version-control system. For this, Flask provides us with multiple ways to fetch configurations. The most frequently used methods are as follows:
- From a Python configuration file (*.cfg), the configuration can be fetched using the following command:
app.config.from_pyfile('myconfig.cfg')
- From an object, the configuration can be fetched using the following command:
app.config.from_object('myapplication.default_settings')
- Alternatively, to load from the same file from which this command is run, we can also use the following command:
app.config.from_object(__name__)
- From the environment variable, the configuration can be fetched using the following command:
app.config.from_envvar('PATH_TO_CONFIG_FILE')
How it works...
Flask is intelligent enough to pick up only configuration variables that are written in uppercase. This allows us to define any local variables in our configuration files and objects and leave the rest to Flask.
The best practice when using configurations is to have a bunch of default settings in app.py, or via any object in the application itself, and to then override the same by loading it from the configuration file. So, the code will look as follows:
app = Flask(__name__) DEBUG = True TESTING = True app.config.from_object(__name__) app.config.from_pyfile('/path/to/config/file')