Url filter middleware

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Author: limodou@gmail.com
# version: 0.1
# Url filter middleware
# Update:
#   0.1

from django.conf import settings
from utils.common import get_func
import re

class FilterMiddleware(object):
    def process_request(self, request):
        filter_items = getattr(settings, 'FILTERS', ())
        for v in filter_items:
            r, func = v
            if not isinstance(r, (list, tuple)):
                r = [r]
            for p in r:
                if isinstance(p, (str, unicode)):
                    p = re.compile(p)
                m = p.match(request.path[1:])
                if m:
                    kwargs = m.groupdict()
                    if kwargs:
                        args = ()
                    else:
                        args = m.groups()
                    return get_func(func)(request, *args, **kwargs)

Comments

wiz (on March 4, 2007):

I guess re.compile(p) stuff should be in __init__ method. Is there is a special need to recompile filters for each request? (;

#

limodou (on March 4, 2007):

Because I don't know if the instance of Middleware will be created per request, if it doesnot, put re.compile(p) in init will have problem. And the url in FILTERS can be not the same as urls.py(of cause they can be the same), and you can pass string or instance of re.compile() to it, if the object is string, this middleware will compile it first.

#

RonnyPfannschmidt (on March 31, 2007):

you could just use a new urlconf for that stuff

#

(Forgotten your password?)

You may use Markdown syntax here, but raw HTML will be removed.