django-reroute is a drop-in replacement for django.conf.urls.defaults that supports HTTP verb dispatch and view wrapping.
Download
Github: http://github.com/dnerdy/django-reroute
easy_install:
easy_install django-reroute
Source:
# Download the source and run python setup.py install
Adding django-reroute to your project
django-reroute is a drop-in replacement for django.conf.urls.defaults:
# Replace from django.conf.urls.defaults * # with from reroute import *
Although it’s better to be explicit:
# Replace from django.conf.urls.defaults import handler404, handler500, patterns, url, include # with from reroute import handler404, handler500, patterns, url, include
HTTP verb dispatching
verb_url patterns can match HTTP verbs in addition to regexes:
from reroute.verbs import verb_url
urlpatterns = patterns('myapp.views',
url('^regular$', 'regular_old_view'),
verb_url('GET', '^restful$', 'restful_view')
)
verb_url pattern regexes can be overloaded, enabling routing solely based on HTTP verb:
urlpatterns = patterns('myapp.views',
verb_url('GET', '^restful$', 'restful_view'),
verb_url('PUT', '^restful$', 'another_restful_view')
)
Restful resource example:
paychecks = patterns('myapp.views.employees.paychecks',
verb_url('GET', '^paychecks$', 'index_paychecks'),
verb_url('POST', '^paychecks$', 'add_paycheck'),
)
urlpatterns = patterns('myapp.views.employees',
verb_url('GET', '^employees$', 'index_employees'),
verb_url('POST', '^employees$', 'add_employee'),
verb_url('GET', '^employees/(?P<employee_id>\d+)$', 'show_employee')
verb_url('PUT', '^employees/(?P<employee_id>\d+)$', 'update_employee')
verb_url('DELETE', '^employees/(?P<employee_id>\d+)$', 'delete_employee'),
url('^employees/(?P<employee_id>\d+)/', include(paychecks)),
)
Rerouting through wrappers
You can configure a list of view wrappers for a set of url patterns:
from reroute import reroute_patterns
def params_wrapper(view, request, *args, **kwargs):
# Provide uniform access of GET, POST or PUT parameters
# through request.PARAMS
if request.method == 'POST':
request.PARAMS = dict(request.POST.iteritems())
else:
request.PARAMS = dict(request.GET.iteritems())
return view(request, *args, **kwargs)
urlpatterns = reroute_patterns([params_wrapper], 'myapp.views',
verb_url('GET', '^restful$', 'restful_view'),
verb_url('PUT', '^restful$', 'another_restful_view')
)
A wrapper is any callable that takes the arguments: view, request, *args, **kwargs:
class Wrapper(object):
def __call__(self, view, request, *args, **kwargs):
return view(request, *args, **kwargs)
urlpatterns = reroute_patterns([Wrapper()], 'myapp.views',
verb_url('GET', '^restful$', 'restful_view'),
verb_url('PUT', '^restful$', 'another_restful_view')
)
And you can even get fancy and create your own drop-in replacement for patterns:
from functools import partial
import logging
def wrapper_one(view, request, *args, **kwargs):
logging.debug("wrapper one")
return view(request, *args, **kwargs)
def wrapper_two(view, request, *args, **kwargs):
logging.debug("wrapper two")
return view(request, *args, **kwargs)
patterns = partial(reroute_patterns, [wrapper_one, wrapper_two])
urlpatterns = patterns('myapp.views',
verb_url('GET', '^restful$', 'restful_view'),
verb_url('PUT', '^restful$', 'another_restful_view')
)
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file django-reroute-0.1.1.tar.gz.
File metadata
- Download URL: django-reroute-0.1.1.tar.gz
- Upload date:
- Size: 6.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c957c10a31e64b063e50e038554e1cd62729cbd28659e37dec10948d85e753e9
|
|
| MD5 |
f45b2ccae9e72a716facb3cc5b5f5c92
|
|
| BLAKE2b-256 |
ef42c3b56176854c470d243c9d244e31101df8ab2896836f293dea1fef251b32
|