Skip to main content

Django utility to dispatch views based on request method

Project description

Usage

from django.conf.urls import patterns, url
from django_view_dispatch import dispatch, dispatch_strict

from . import views


urlpatterns = patterns('',
    url(r'^some_url/$', dispatch(get=views.my_view, post=views.my_view_for_post), name='events_json'),

    # you can get any keyword argument you want to specify any http verb
    url(r'^some_url/$', dispatch(get=views.my_view, put=views.create, foo=views.another_view, bar=views.baz), name='events_json'),

    # by default, if a request has an HTTP verb that hasn't been specified in
    # the dispatch() function, it will be redirected to the GET view if present
    url(r'^some_url/$', dispatch(get=views.will_get_everything_thats_not_put, put=views.stuff), name='events_json'),

    # you can change this behavior this way
    url(r'^some_url/$', dispatch(get=views.stuff, put=views.will_get_everything_thats_not_get, default="put"), name='events_json'),

    # if "default" is set to None, this behavior is disabled and and
    # HttpResponseNotAllowed will be returned
    url(r'^input/$', dispatch(post=views.my_view_for_post, default=None), name='events_json'),  # behave like @require_POST

    # a more explicit way to do that is provided with "dispatch_strict" which behave exactly like dispatch with default set to None
    url(r'^input/$', dispatch_strict(post=views.my_view_for_post), name='events_json'),
)

Installation

pip install django_view_dispatch

Why

Something that you learn as you progress in programming is that conditional are “bad” (as in “should be avoided”) because they increase the complexity of your code and are a potential source of bugs.

For example, mixing POST and GET handling in the same view can be a good terrain for bug and for a more complex code while spliting it gives a KISS situation where you have two views that do only one thing and do it well.

Django doesn’t provide an easy nor standard way to do this so this library is trying to address that.

Can I use string like in the url function?

No, since django 1.8, using string to target views in patterns is depreciated, therefor there is no point in supporting this feature.

Also, to be honest, I have not idea on how to do that and haven’t really made any research about it. That would also make the code way more complex.

Running tests

pip install pytest
py.test test.py

Licence

BSD.

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_view_dispatch-0.1.tar.gz (2.6 kB view details)

Uploaded Source

Built Distributions

django_view_dispatch-0.1-py2.py3-none-any.whl (4.9 kB view details)

Uploaded Python 2 Python 3

django_view_dispatch-0.1-py2.7.egg (2.8 kB view details)

Uploaded Source

File details

Details for the file django_view_dispatch-0.1.tar.gz.

File metadata

File hashes

Hashes for django_view_dispatch-0.1.tar.gz
Algorithm Hash digest
SHA256 78be42e34a9912142efb0f82f0eb908d3c42f58da8a633b8a9fe9f177d6c5c09
MD5 dac208e1c4d627f05943658419ace6a8
BLAKE2b-256 210a9c12d50959c0f1be58be64f5420bc68ddad5b61194defd2f8416676826b2

See more details on using hashes here.

File details

Details for the file django_view_dispatch-0.1-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_view_dispatch-0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 57b54025af7746a14c3106be3f247f6ab7b41bd6f579a6c99c4c3d737bef749f
MD5 f79b491ef5b3f68975f1cc2118c33ef2
BLAKE2b-256 46e34ef095f2f1568d68af52001c1fb453d8b5d60f3cc9b2cf9942c40fceaa5c

See more details on using hashes here.

File details

Details for the file django_view_dispatch-0.1-py2.7.egg.

File metadata

File hashes

Hashes for django_view_dispatch-0.1-py2.7.egg
Algorithm Hash digest
SHA256 364201152621961a132e08a07ec2e842dea53c94ae99978ce8e745f63a55814f
MD5 5c59d83e0409ddc985e1d9a1dbe123e7
BLAKE2b-256 9f2744e367fa0440f55955d998c090719cd9c4d3a9bbd2646d26fd024f6a3c32

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page