.. _flask-example: Flask example ============= .. meta:: :keywords: Python,Dependency Injection,Flask,Example :description: This example demonstrates a usage of the Flask and Dependency Injector. This example shows how to use ``Dependency Injector`` with `Flask `_. The example application helps to search for repositories on the Github. .. image:: images/flask.png :width: 100% :align: center The source code is available on the `Github `_. :ref:`flask-tutorial` demonstrates how to build this application step-by-step. Application structure --------------------- Application has next structure: .. code-block:: bash ./ ├── githubnavigator/ │ ├── templates │ │ ├── base.html │ │ └── index.py │ ├── __init__.py │ ├── application.py │ ├── containers.py │ ├── services.py │ ├── tests.py │ └── views.py ├── config.yml └── requirements.txt Container --------- Declarative container is defined in ``githubnavigator/containers.py``: .. literalinclude:: ../../examples/miniapps/flask/githubnavigator/containers.py :language: python Views ----- View has dependencies on search service and some config options. The dependencies are injected using :ref:`wiring` feature. Listing of ``githubnavigator/views.py``: .. literalinclude:: ../../examples/miniapps/flask/githubnavigator/views.py :language: python Application factory ------------------- Application factory creates container, wires it with the ``views`` module, creates ``Flask`` app and setup routes. Listing of ``githubnavigator/application.py``: .. literalinclude:: ../../examples/miniapps/flask/githubnavigator/application.py :language: python Tests ----- Tests use :ref:`provider-overriding` feature to replace github client with a mock ``githubnavigator/tests.py``: .. literalinclude:: ../../examples/miniapps/flask/githubnavigator/tests.py :language: python :emphasize-lines: 44,67 Sources ------- Explore the sources on the `Github `_. .. include:: ../sponsor.rst .. disqus::