Skip to content

Latest commit

 

History

History
121 lines (81 loc) · 3.74 KB

examples.rst

File metadata and controls

121 lines (81 loc) · 3.74 KB

Examples

Before we proceed let's setup a virtualenv environment, activate it and install:

$ pip install wheezy.routing

Hello World

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/.

Server Time

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/.