Files
pecan/docs/source/hooks.rst

76 lines
2.2 KiB
ReStructuredText

.. _hooks:
Hooks
=====
Pecan Hooks are a nice way to interact with the framework itself rather than
writing middleware.
There is nothing wrong with WSGI Middleware, and actually, it is really easy to
use middleware with Pecan, but it is rather hard (sometimes impossible) to have
access to Pecan's internals.
Hooks offer four ways of dealing with a request:
* ``on_route``: called before Pecan attempts to route a request
* ``before``: called after routing but before processing the request
* ``after``: called after a request has been processed
* ``on_error``: called when a request generates an error
Implementation
--------------
They are very easy to plug into Pecan. In the below example we will go through
a simple hook that will gather some information about the request and then it
will print it out to ``stdout``.
Your hook needs to import ``PecanHook`` which will be used to inherit from.
This is how your hook file should look like::
from pecan.hooks import PecanHook
class SimpleHook(PecanHook):
def after(self, state):
print "\nmethod: \t %s" % state.request.method
print "response: \t %s" % state.response.status
The ``after`` method will be called after the request has been dealt with.
If you save your file as ``my_hook.py`` you should be able to add it to your
application like this::
from application.root import RootController
from my_hook import SimpleHook
app = make_app(
RootController(),
hooks = [SimpleHook()]
)
We are passing the ``RootController`` of our application (make sure to replace
the bogus values with your own) and our ``SimpleHook`` goes into a list for the
``hooks`` parameter.
We are not displaying how the entire file should look like but showing what is
of interest to get a hook into Pecan.
Running it
----------
Now that our ``SimpleHook`` is passed on, let's see what happens when we run
the app and browse the application::
python start.py config
Serving on http://0.0.0.0:8080
serving on 0.0.0.0:8080 view at http://127.0.0.1:8080
method: GET
response: 200 OK
``config`` is our configuration file that we pass on to ``start.py`` and as
soon as a request is served we see the information from our ``after`` method.