Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/studio/static/doc/flask-docs/_sources/patterns/appfactories.txt
diff options
context:
space:
mode:
Diffstat (limited to 'studio/static/doc/flask-docs/_sources/patterns/appfactories.txt')
-rw-r--r--studio/static/doc/flask-docs/_sources/patterns/appfactories.txt75
1 files changed, 0 insertions, 75 deletions
diff --git a/studio/static/doc/flask-docs/_sources/patterns/appfactories.txt b/studio/static/doc/flask-docs/_sources/patterns/appfactories.txt
deleted file mode 100644
index 2a6190e..0000000
--- a/studio/static/doc/flask-docs/_sources/patterns/appfactories.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-.. _app-factories:
-
-Application Factories
-=====================
-
-If you are already using packages and blueprints for your application
-(:ref:`blueprints`) there are a couple of really nice ways to further improve
-the experience. A common pattern is creating the application object when
-the blueprint is imported. But if you move the creation of this object,
-into a function, you can then create multiple instances of this and later.
-
-So why would you want to do this?
-
-1. Testing. You can have instances of the application with different
- settings to test every case.
-2. Multiple instances. Imagine you want to run different versions of the
- same application. Of course you could have multiple instances with
- different configs set up in your webserver, but if you use factories,
- you can have multiple instances of the same application running in the
- same application process which can be handy.
-
-So how would you then actually implement that?
-
-Basic Factories
----------------
-
-The idea is to set up the application in a function. Like this::
-
- def create_app(config_filename):
- app = Flask(__name__)
- app.config.from_pyfile(config_filename)
-
- from yourapplication.views.admin import admin
- from yourapplication.views.frontend import frontend
- app.register_blueprint(admin)
- app.register_blueprint(frontend)
-
- return app
-
-The downside is that you cannot use the application object in the blueprints
-at import time. You can however use it from within a request. How do you
-get access to the application with the config? Use
-:data:`~flask.current_app`::
-
- from flask import current_app, Blueprint, render_template
- admin = Blueprint('admin', __name__, url_prefix='/admin')
-
- @admin.route('/')
- def index():
- return render_template(current_app.config['INDEX_TEMPLATE'])
-
-Here we look up the name of a template in the config.
-
-Using Applications
-------------------
-
-So to use such an application you then have to create the application
-first. Here an example `run.py` file that runs such an application::
-
- from yourapplication import create_app
- app = create_app('/path/to/config.cfg')
- app.run()
-
-Factory Improvements
---------------------
-
-The factory function from above is not very clever so far, you can improve
-it. The following changes are straightforward and possible:
-
-1. make it possible to pass in configuration values for unittests so that
- you don't have to create config files on the filesystem
-2. call a function from a blueprint when the application is setting up so
- that you have a place to modify attributes of the application (like
- hooking in before / after request handlers etc.)
-3. Add in WSGI middlewares when the application is creating if necessary.