diff --git a/docs/tutorials/flask.rst b/docs/tutorials/flask.rst
index a51e8f89..dacb045c 100644
--- a/docs/tutorials/flask.rst
+++ b/docs/tutorials/flask.rst
@@ -333,26 +333,59 @@ Put next into the ``index.html``:
Github Navigator
-
-
-
-
+
{% if repositories|length == 0 %}
-
No search results
+
No search results
{% endif %}
+
+ Results found: {{ repositories|length }}
+
+
+
+
{% endblock %}
Ok, almost there. The last step is to make ``index`` view to render the ``index.html`` template.
@@ -360,20 +393,25 @@ Ok, almost there. The last step is to make ``index`` view to render the ``index.
Edit ``views.py``:
.. code-block:: python
- :emphasize-lines: 3,7
"""Views module."""
- from flask import render_template
+ from flask import request, render_template
def index():
- return render_template('index.html')
+ search_term = request.args.get('search_term', 'Dependency Injector')
+ repositories = []
+ return render_template(
+ 'index.html',
+ search_term=search_term,
+ repositories=repositories,
+ )
That's it.
-Make sure the app is running and open ``http://127.0.0.1:7000/``.
+Make sure the app is running and open ``http://127.0.0.1:5000/``.
You should see:
@@ -667,6 +705,86 @@ Edit ``containers.py``:
index_view = flask.View(views.index)
+Make the search
+---------------
+
+Now we are ready to make the search work.
+
+Edit ``views.py``:
+
+.. code-block:: python
+ :emphasize-lines: 5,8,11,16
+
+ """Views module."""
+
+ from flask import request, render_template
+
+ from .services import SearchService
+
+
+ def index(search_service: SearchService):
+ search_term = request.args.get('search_term')
+
+ repositories = search_service.search_repositories(search_term)
+
+ return render_template(
+ 'index.html',
+ search_term=search_term,
+ repositories=repositories,
+ )
+
+Edit ``containers.py``:
+
+.. code-block:: python
+ :emphasize-lines: 32-38
+
+ """Application containers module."""
+
+ from dependency_injector import containers, providers
+ from dependency_injector.ext import flask
+ from flask import Flask
+ from flask_bootstrap import Bootstrap
+ from github import Github
+
+ from . import services, views
+
+
+ class ApplicationContainer(containers.DeclarativeContainer):
+ """Application container."""
+
+ app = flask.Application(Flask, __name__)
+
+ bootstrap = flask.Extension(Bootstrap)
+
+ config = providers.Configuration()
+
+ github_client = providers.Factory(
+ Github,
+ login_or_token=config.github.auth_token,
+ timeout=config.github.request_timeout,
+ )
+
+ search_service = providers.Factory(
+ services.SearchService,
+ github_client=github_client,
+ )
+
+ index_view = flask.View(
+ views.index,
+ search_service=search_service,
+ )
+
+Edit ``config.yml``:
+
+.. code-block::
+ :emphasize-lines: 3-5
+
+ github:
+ request_timeout: 10
+ search:
+ default_term: "Dependency Injector"
+ default_limit: 5
+
Tests
-----
diff --git a/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html b/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html
index f412724e..f9cc345f 100644
--- a/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html
+++ b/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html
@@ -32,22 +32,29 @@
# |
Repository |
Repository owner |
-
Last commit |
- {% for repository in repositories %} {{n}}
+ {% for repository in repositories %} {{n}}
{{ loop.index }} |
- {{ repository.name }} |
-
- {{ repository.owner.login }}
+ |
+ {{ repository.name }}
+ |
+
+
+
+ {{ repository.owner.login }}
+ |
+
+ {{ repository.latest_commit.sha }}
+ {{ repository.latest_commit.message }}
+ {{ repository.latest_commit.author_name }}
|
- {{ repository.latest_commit.sha }} {{ repository.latest_commit['message'] }} {{ repository.latest_commit.author_name }} |
- {% endfor %}
-
+ {% endfor %}
diff --git a/examples/miniapps/ghnav-flask/githubnavigator/views.py b/examples/miniapps/ghnav-flask/githubnavigator/views.py
index f444c559..6979e382 100644
--- a/examples/miniapps/ghnav-flask/githubnavigator/views.py
+++ b/examples/miniapps/ghnav-flask/githubnavigator/views.py
@@ -5,15 +5,12 @@ from flask import request, render_template
from .services import SearchService
-def index(search_service: SearchService, default_search_term, default_search_limit):
+def index(search_service: SearchService, default_search_term: str, default_search_limit: int):
search_term = request.args.get('search_term', default_search_term)
- limit = request.args.get('limit', default_search_limit, int)
-
- repositories = search_service.search_repositories(search_term, limit)
+ repositories = search_service.search_repositories(search_term, default_search_limit)
return render_template(
'index.html',
search_term=search_term,
- limit=limit,
repositories=repositories,
)