Below are some common patterns that have proven productive in using Antfarm.
It's easy to write "Middleware" style views, which do some work before or after other views.
class middleware(object):
def __init__(self, view):
self.view
def __call__(self, request, *args, **kwargs):
# Work before
try:
return self.view(request, *args, **kwargs)
except ...:
# Catch errors
finally:
# Work after _always_
application = App(root_view = middleware(normalview))
An idea which resurfaces frequently in the Django community is one of applying middleware to a sub-set of the URL tree. The only existing solution is to apply a decorator to all the views [tedious and error prone] or to complicate the middleware with ways to denote what it is to apply to.
In Antfarm, this problem is trivially solved, since middleware are just views which wrap views.
A simple example is making some URLs password protected, but not others.
private_urls = url_dispatcher(
(r'^$', views.user_list),
(r'^(?P<user_id>\d+)/$', views.user_detail),
)
root_urls = url_dispatcher(
(r'^/$', views.index),
(r'^/login/$', views.login),
(r'^/users/', login_required(private_urls)),
)