A drop-in replacement for django.conf.urls.defaults which supports HTTP verb dispatch and view wrapping.
Project description
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') )
Project details
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
|