Also feels slightly odd that it gets called in the same style as if it was a regular method.  I can see it works just fine, but feels wrong.

Would probably change the current:

    response = self.handle_exception(exc)

To this:

    handler = self.exception_handler
    response = handler(self, exc)

Maybe that's unnecessary tho, not sure?