mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2025-07-14 18:12:21 +03:00
Refactor flask tutorial
This commit is contained in:
parent
04e70df955
commit
61186a7007
|
@ -50,18 +50,18 @@ Prepare the environment
|
||||||
|
|
||||||
Let's create the environment for the project.
|
Let's create the environment for the project.
|
||||||
|
|
||||||
First we need to create a project folder and the virtual environment:
|
First we need to create a project folder:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
mkdir ghnav-flask-tutorial
|
mkdir ghnav-flask-tutorial
|
||||||
cd ghnav-flask-tutorial
|
cd ghnav-flask-tutorial
|
||||||
python3 -m venv venv
|
|
||||||
|
|
||||||
Now let's activate the virtual environment:
|
Now let's create and activate virtual environment:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
python3 -m venv venv
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
|
|
||||||
Project layout
|
Project layout
|
||||||
|
@ -110,7 +110,7 @@ You should see something like:
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
(venv) $ python -c "import dependency_injector; print(dependency_injector.__version__)"
|
(venv) $ python -c "import dependency_injector; print(dependency_injector.__version__)"
|
||||||
3.22.0
|
4.0.0
|
||||||
(venv) $ python -c "import flask; print(flask.__version__)"
|
(venv) $ python -c "import flask; print(flask.__version__)"
|
||||||
1.1.2
|
1.1.2
|
||||||
|
|
||||||
|
@ -133,34 +133,25 @@ Put next into the ``views.py``:
|
||||||
|
|
||||||
Ok, we have the view.
|
Ok, we have the view.
|
||||||
|
|
||||||
Now let's create the main part of our application - the container. Container will keep all of the
|
Now let's create a container. Container will keep all of the application components and their dependencies.
|
||||||
application components and their dependencies. First two providers we need to add are
|
|
||||||
the ``Flask`` application provider and the view provider.
|
|
||||||
|
|
||||||
Put next into the ``containers.py``:
|
Edit ``containers.py``:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
"""Application containers module."""
|
"""Containers module."""
|
||||||
|
|
||||||
from dependency_injector import containers
|
from dependency_injector import containers
|
||||||
from dependency_injector.ext import flask
|
|
||||||
from flask import Flask
|
|
||||||
|
|
||||||
from . import views
|
|
||||||
|
|
||||||
|
|
||||||
class ApplicationContainer(containers.DeclarativeContainer):
|
class Container(containers.DeclarativeContainer):
|
||||||
"""Application container."""
|
...
|
||||||
|
|
||||||
app = flask.Application(Flask, __name__)
|
Container is empty for now. We will add the providers in the following sections.
|
||||||
|
|
||||||
index_view = flask.View(views.index)
|
Finally we need to create Flask application factory. It will create and configure container
|
||||||
|
and Flask application. It is traditionally called ``create_app()``.
|
||||||
Finally we need to create the Flask application factory. It is traditionally called
|
We will assign ``index`` view to handle user requests to the root ``/`` of our web application.
|
||||||
``create_app()``. It will create the container. Then it will use the container to create
|
|
||||||
the Flask application. Last step is to configure the routing - we will assign ``index_view`` from
|
|
||||||
the container to handle user requests to the root ``/`` of our web application.
|
|
||||||
|
|
||||||
Put next into the ``application.py``:
|
Put next into the ``application.py``:
|
||||||
|
|
||||||
|
@ -168,26 +159,21 @@ Put next into the ``application.py``:
|
||||||
|
|
||||||
"""Application module."""
|
"""Application module."""
|
||||||
|
|
||||||
from .containers import ApplicationContainer
|
from flask import Flask
|
||||||
|
|
||||||
|
from .containers import Container
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app() -> Flask:
|
||||||
"""Create and return Flask application."""
|
container = Container()
|
||||||
container = ApplicationContainer()
|
|
||||||
|
|
||||||
app = container.app()
|
app = Flask(__name__)
|
||||||
app.container = container
|
app.container = container
|
||||||
|
app.add_url_rule('/', 'index', views.index)
|
||||||
app.add_url_rule('/', view_func=container.index_view.as_view())
|
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
Container is the first object in the application.
|
|
||||||
|
|
||||||
The container is used to create all other objects.
|
|
||||||
|
|
||||||
Ok. Now we're ready to say "Hello, World!".
|
Ok. Now we're ready to say "Hello, World!".
|
||||||
|
|
||||||
Do next in the terminal:
|
Do next in the terminal:
|
||||||
|
@ -237,58 +223,34 @@ and run in the terminal:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
pip install --upgrade -r requirements.txt
|
pip install -r requirements.txt
|
||||||
|
|
||||||
Now we need to add ``bootstrap-flask`` extension to the container.
|
|
||||||
|
|
||||||
Edit ``containers.py``:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
:emphasize-lines: 6,16
|
|
||||||
|
|
||||||
"""Application containers module."""
|
|
||||||
|
|
||||||
from dependency_injector import containers
|
|
||||||
from dependency_injector.ext import flask
|
|
||||||
from flask import Flask
|
|
||||||
from flask_bootstrap import Bootstrap
|
|
||||||
|
|
||||||
from . import views
|
|
||||||
|
|
||||||
|
|
||||||
class ApplicationContainer(containers.DeclarativeContainer):
|
|
||||||
"""Application container."""
|
|
||||||
|
|
||||||
app = flask.Application(Flask, __name__)
|
|
||||||
|
|
||||||
bootstrap = flask.Extension(Bootstrap)
|
|
||||||
|
|
||||||
index_view = flask.View(views.index)
|
|
||||||
|
|
||||||
Let's initialize ``bootstrap-flask`` extension. We will need to modify ``create_app()``.
|
Let's initialize ``bootstrap-flask`` extension. We will need to modify ``create_app()``.
|
||||||
|
|
||||||
Edit ``application.py``:
|
Edit ``application.py``:
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
:emphasize-lines: 13-14
|
:emphasize-lines: 4,17-18
|
||||||
|
|
||||||
"""Application module."""
|
"""Application module."""
|
||||||
|
|
||||||
from .containers import ApplicationContainer
|
from flask import Flask
|
||||||
|
from flask_bootstrap import Bootstrap
|
||||||
|
|
||||||
|
from .containers import Container
|
||||||
|
from . import views
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app() -> Flask:
|
||||||
"""Create and return Flask application."""
|
container = Container()
|
||||||
container = ApplicationContainer()
|
|
||||||
|
|
||||||
app = container.app()
|
app = Flask(__name__)
|
||||||
app.container = container
|
app.container = container
|
||||||
|
app.add_url_rule('/', 'index', views.index)
|
||||||
|
|
||||||
bootstrap = container.bootstrap()
|
bootstrap = Bootstrap()
|
||||||
bootstrap.init_app(app)
|
bootstrap.init_app(app)
|
||||||
|
|
||||||
app.add_url_rule('/', view_func=container.index_view.as_view())
|
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|
||||||
Now we need to add the templates. For doing this we will need to add the folder ``templates/`` to
|
Now we need to add the templates. For doing this we will need to add the folder ``templates/`` to
|
||||||
|
|
Loading…
Reference in New Issue
Block a user