Usage in views ============== Since *version 0.3.0* the extension does not impose a specific view or template to use. Instead, you can implement your own views and work with the :py:meth:`~flask_waffleconf.core._WaffleState` instance in the application. Initialization -------------- To initialize the extension, two different things are required: a model implementing the :py:class:`~flask_waffleconf.models.WaffleMixin` interface, for instance using SQLAlchemy or peewee; and a configured :py:class:`~flask_waffleconf.store.WaffleStore`. As of *version 0.3.0*, there are two stores available (although it is very easy to create a new one using the ``WaffleStore`` class as a base): - :py:class:`~flask_waffleconf.store.AlchemyWaffleStore`: uses ``SQLAlchemy`` for the database backend - :py:class:`~flask_waffleconf.store.PeeweeWaffleStore`: uses ``peewee`` for the database backend *Changed in 0.3.1*: stored configurations are not updated when the extension is initialized and require manually calling the update method. .. note:: Model and store should use the same ORM/library as backend. Obtaining stored values ----------------------- The following simple views are an example of how you can use the extension to parse stored values of configuration variables: .. code-block:: python from flask import current_app @app.route('/all') def get_all(): """Returns the whole list of stored configuration variables.""" state = current_app.extensions['waffleconf'] # Get all the variables parsed = state.parse_conf() # Returns a dict return parsed @app.route('/') def get_key(key): """Return the value of a single key.""" state = current_app.extensions['waffleconf'] # Get variable parsed = state.parse_conf([key,]) # Returns a dict return parsed As the :py:meth:`~flask_waffleconf.core.WaffleState.parse_conf` method returns a Python ``dict``, creating a form for showing or updating the values is very easy. Updating stored values ---------------------- Similarly, it is also possible to update values at runtime using a custom view: .. code-block:: python from flask import current_app, form @app.route('/update', methods=['POST']) def update_vars(): """Update the vars with the values of a hypothetical form.""" # Suppose WTForms with fields `SITENAME` and `DESCRIPTION` form = Form(request.form) if form.validate(): vals = { 'SITENAME': form.sitename.data, 'DESCRIPTION': form.desc.data } state = current_app.extensions['waffleconf'] state.update_db(vals)