.. _tutorial_http_home:
Home Page
---------
The router configuration object we created earlier provides a convenient
decorator for defining new routes. Let's make use of that and add our first
route to the end of ``moswblog/http.py``:
.. code-block:: python
@router.route('home', '/')
def home(ctx):
return 'Hello, World!'
This will define a route called *home*, which is available under the root path,
i.e. this route is responsible for your home page. Try visiting
http://localhost:8080 again and you should see your first route's enthusiastic
greeting.
The *ctx* parameter to the route function is a :term:`context object`. It
creates a scope for various other modules, like :mod:`score.sa.db`, which will
know when to commit a transaction.
But since nobody is called "World", we should change the route to be able to
accept a proper name:
.. code-block:: python
@router.route('home', '/{name}')
def home(ctx, name):
if not name:
name = 'World'
return 'Hello, %s!' % name
Visiting http://localhost:8080/SirLancelot will now greet us with our title and
name. We will gracefully ignore the application's lack of sensibility when it
comes to addressing aristocracy properly.
As you can see, the URL template now happily accepts *every* URL and returns a
greeting for the given string. This is achieved through a variable in the URL
template, and we will soon make use of this to access our articles. But let's
first change the route to list the articles in our database instead. The
content of the file ``moswblog/http.py`` should now be the following:
.. code-block:: python
import moswblog.db as db
from score.http import RouterConfiguration
router = RouterConfiguration()
@router.route('home', '/')
def home(ctx):
titles = list(article.title
for article in ctx.orm.query(db.Article))
return '
'.join(titles)
Alright, this is a bit more interesting, but we still can't see the contents of
the aricles. The next step would be to create the :ref:`article route
`.