Before we proceed let's setup a virtualenv environment, activate it and install:
$ pip install wheezy.routing
helloworld.py shows you how to use wheezy.routing
in a pretty simple WSGI application:
../demos/hello/helloworld.py
Let's have a look through each line in this application. First of all we import :py~wheezy.routing.PathRouter
that is actually just an exporting name for :py~wheezy.routing.router.PathRouter
:
../demos/hello/helloworld.py
Next we create a pretty simple WSGI handler to provide a response.
../demos/hello/helloworld.py
In addition let's add a handler for the 'not found' response.
../demos/hello/helloworld.py
The declaration and mapping of patterns to handlers follows. We create an instance of PathRouter
class and pass it a mapping, that in this particular case is a tuple of two values: pattern
and handler
.
../demos/hello/helloworld.py
The first pattern '/'
will match only the root path of the request (it is finishing route in the match chain). The second pattern '/{any}'
is a curly expression, that is translated to regular expression, that ultimately matches any path and is a finishing route as well.
main
function serves as WSGI application entry point. The only thing we do here is to get a value of WSGI environment variable PATH_INFO
(the remainder of the request URL's path) and pass it to the router :py~wheezy.routing.router.PathRouter.match
method. In return we get handler
and kwargs
(parameters discovered from matching rule, that we ignore for now).
../demos/hello/helloworld.py
The rest in the helloworld
application launches a simple wsgi server. Try it by running:
$ python helloworld.py
Visit http://localhost:8080/.
The server time application consists of two screens. The first one has a link to the second that shows the time on the server. The second page will be mapped as a separate application with its own routing. The design used in this sample is modular. Let's start with config
module. The only thing we need here is an instance of PathRouter
.
../demos/time/config.py
The view
module is pretty straight: a welcome
view with a link to server_time
view. The server time page returns the server time. And finally a catch all not_found
handler to display http 404 error, page not found.
../demos/time/views.py
So what is interesting in the welcome
view is a way how we get a url for server_time
view.
../demos/time/views.py
The name now
was used during url mapping as you can see below (module urls
):
../demos/time/urls.py
server_urls
are then included under the parent path server/
, so anything that starts with the path server/
will be directed to the server_urls
url mapping. Lastly we add a curly expression that maps any url match to our not_found
handler.
We combine that all together in app
module.
../demos/time/app.py
Try it by running:
$ python app.py
Visit http://localhost:8080/.