here's my crutch (just for the idea illustrating):
pre-pre-pre-alpha :)

settins.py
MIDDLEWARE_CLASSES = (
    'middleware.handlers.Handler',     # only first. it's posthandler
processor builder
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'middleware.handlers.HandlerProcessor',  # posthandlers processor
)

middleware.handlers:
class HandlerProcessor(object):
    def process_request(self, request, *args, **kwargs):
        pass
    def process_view(self, request, view_func, view_args,
view_kwargs):
        # pops handlers list
        while len(Handler.handlers) > 0:
            name = Handler.handlers.pop()
            if name in dir(Handler) and callable(getattr(Handler,
name)):
                call = 'Handler.'+name+'(request)'
                try:
                    result = eval(call)
                    if not result == None:
                        return result
                except Exception, ex:
                    return HttpResponseRedirect('/500.html')
            else:
                return HttpResponseRedirect('/500.html')

class Handler(object):
    def process_request(self, request, *args, **kwargs):
        self.__class__.handlers = []
    def add_handler(self, handler):
        self.__class__.handlers.append(handler)
    def process_view(self, request, view_func, view_args,
view_kwargs):
        # this method check
        ch = re.compile(r'^hnd_(.*)$')
        for hname in view_kwargs:
            hl = ch.findall(hname)
            if len(hl) > 0:
                # if you need, save view_kwargs[hname] values (it's
params for this handler)
                self.add_handler(hl[0])
                # dont forget del view_kwargs[hname]
    ''' add your handlers here:
    def myHandler(self, request, *args, **kwargs):
        if smth_wrong():
            return HttpResponseRedirect('/a_bad_result_page.html') #
for example
    '''
    def LoginRequired(self, request, *args, **kwargs):
        if user is not logged in:
            return HttpResponseRedirect('/login.html')
    def PermissionRequired(self, request, *args, **kwargs):
        # check permissions for access to '^members/account/' area
        pass

in urls.py
(r'^members/', include('members.urls'), {'hnd_LoginRequired':{}}),

in members/urls.py
    (r'^account/', include('members.account.urls'), {
              'hnd_PermissionRequired':{
                  'handler_arg_name1':'handler_value1',
                  'handler_arg_name2':'handler_value2',
              },
              'view_arg_name1':'view_value1',
              'view_arg_name2':'view_value2',
          }
    ),

something like this.. :)

--

You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-develop...@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.


Reply via email to