| Router |
| ====== |
| |
| The router is used to match incoming requests to request handler |
| functions. Typically users don't interact with the router directly, |
| but instead send a list of routes to register when starting the |
| server. However it is also possible to add routes after starting the |
| server by calling the `register` method on the server's `router` |
| property. |
| |
| Routes are represented by a three item tuple:: |
| |
| (methods, path_match, handler) |
| |
| `methods` is either a string or a list of strings indicating the HTTP |
| methods to match. In cases where all methods should match there is a |
| special sentinel value `any_method` provided as a property of the |
| `router` module that can be used. |
| |
| `path_match` is an expression that will be evaluated against the |
| request path to decide if the handler should match. These expressions |
| follow a custom syntax intended to make matching URLs straightforward |
| and, in particular, to be easier to use than raw regexp for URL |
| matching. There are three possible components of a match expression: |
| |
| * Literals. These match any character. The special characters \*, \{ |
| and \} must be escaped by prefixing them with a \\. |
| |
| * Match groups. These match any character other than / and save the |
| result as a named group. They are delimited by curly braces; for |
| example:: |
| |
| {abc} |
| |
| would create a match group with the name `abc`. |
| |
| * Stars. These are denoted with a `*` and match any character |
| including /. There can be at most one star |
| per pattern and it must follow any match groups. |
| |
| Path expressions always match the entire request path and a leading / |
| in the expression is implied even if it is not explicitly |
| provided. This means that `/foo` and `foo` are equivalent. |
| |
| For example, the following pattern matches all requests for resources with the |
| extension `.py`:: |
| |
| *.py |
| |
| The following expression matches anything directly under `/resources` |
| with a `.html` extension, and places the "filename" in the `name` |
| group:: |
| |
| /resources/{name}.html |
| |
| The groups, including anything that matches a `*` are available in the |
| request object through the `route_match` property. This is a |
| dictionary mapping the group names, and any match for `*` to the |
| matching part of the route. For example, given a route:: |
| |
| /api/{sub_api}/* |
| |
| and the request path `/api/test/html/test.html`, `route_match` would |
| be:: |
| |
| {"sub_api": "html", "*": "html/test.html"} |
| |
| `handler` is a function taking a request and a response object that is |
| responsible for constructing the response to the HTTP request. See |
| :doc:`handlers` for more details on handler functions. |
| |
| .. _router.Interface: |
| |
| :mod:`Interface <wptserve>` |
| --------------------------- |
| |
| .. automodule:: wptserve.router |
| :members: |