32 lines
1.1 KiB
ReStructuredText
32 lines
1.1 KiB
ReStructuredText
|
|
Architecture
|
|
============
|
|
|
|
Handlers are similar to a "plugin" concept in that multiple handlers
|
|
may be installed e.g. by different packages. But whereas one might
|
|
"enable" multiple plugins, only *one* handler may be used, for a given
|
|
purpose.
|
|
|
|
There can be many "types" of handlers; each is responsible for a
|
|
certain aspect of the overall app. So it can be thought of as,
|
|
"*Which* plugin should *handle* this aspect of the app?"
|
|
|
|
|
|
What a Handler Does
|
|
-------------------
|
|
|
|
Each type of handler does something different. For instance there
|
|
might be an "auth handler" responsible for authenticating user
|
|
credentials.
|
|
|
|
The app itself will define the need for a handler. For instance if a
|
|
user login mechanism is needed, then the app might define the "auth
|
|
handler" (e.g. ``AuthHandler``) base class, and add a way to locate
|
|
and use it at runtime.
|
|
|
|
Other packages might then also define "auth handlers" derived from the
|
|
base class, and perhaps a way for the app to locate them as well.
|
|
|
|
The app should probably have a way for the "choice" of auth handler to
|
|
be configurable, and possibly expose this choice via admin UI.
|