Login

Simple views dispatcher by http methods

Author:
kmerenkov
Posted:
November 16, 2009
Language:
Python
Version:
1.1
Score:
2 (after 2 ratings)

Calls a view by request.method value.

To use this dispatcher write your urls.py like this:

urlpatterns = pattern('',
    url(r'^foo/$', dispatch(head=callable1,
                            get=callable2,
                            delete=callable3)),
)

If request.method is equal to head, callable1 will be called as your usual view function; if it is get, callable2 will be called; et cetera. If the method specified in request.method is not one handled by dispatch(..), HttpResponseNotAllowed is returned.

 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
29
from django.http import HttpResponseNotAllowed


def dispatch(**methods):
    """Calls a view by request.method value.

    To use this dispatcher write your urls.py like this:

    urlpatterns = pattern('',
        url(r'^foo/$', dispatch(head=callable1,
                                get=callable2,
                                delete=callable3)),
    )

    If request.method is equal to head, callable1 will be called as your usual view function;
    if it is "get", callable2 will be called; et cetera.
    If the method specified in request.method is not one handled by dispatch(..),
    HttpResponseNotAllowed is returned.
    """

    lc_methods = dict( (method.lower(), handler) for (method, handler) in methods.iteritems() )

    def __dispatch(request, *args, **kwargs):
        handler = lc_methods.get(request.method.lower())
        if handler:
            return handler(request, *args, **kwargs)
        else:
            return HttpResponseNotAllowed(m.upper() for m in lc_methods.keys())
    return __dispatch

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

schinckel (on November 16, 2009):

I really like this. It always bothered me (with RESTful stuff, anyway) how the one handler does GET and PUT, etc.

#

Please login first before commenting.