Then forget about ajax.*

What I am thinking is to change url dispatcher
to create three as many lists as the http methods is

GET = ()
POST = ()
DELETE = ()
...
ALL = ()

And then while parsing an urls.py it appends fitting matches to those
lists.

When goes request, for example GET, than dispatcher lookup regexp
pattern in GET lists,
if its find, we have a hit, if not go to ALL dict, if it isn't there
throw 404

This Classed based view method is good, but you have to create one
abstract view and then inherit in all your views to do so. Unless you
want to write a lot of boilerplate code per view


--
Matt Harasymczuk
www.matt.harasymczuk.pl






On Mar 21, 8:44 am, Russell Keith-Magee <russ...@keith-magee.com>
wrote:
> On Mon, Mar 21, 2011 at 9:09 AM, haras.pl <m...@harasymczuk.pl> wrote:
> > It would be nice to have possibility to distinguish a HTTP method in
> > urls.py. IMHO it would be clearer and more extensible in future for
> > example:
> >  ajax ('POST', r'/user/(?P<username>\d+)$', 'views.view2'),
> >  ajax ('GET', r'/user/(?P<username>\d+)$', 'views.view2'),
> >  ajax ('DELETE', r'/user/(?P<username>\d+)$', 'views.view2'),
> ...
> > I think this is a good way of getting rid of nested ifs in each view:
>
> > if request.is_ajax:
> >  #do stuff
> > else:
> >  if request.method == "POST":
> >     #do something
> >   else:
> >     #do else
>
> > Hence my true code is almost two indents inside those boilerplate if
> > structure. Which is always the same... it takes a lot of python beauty
> > and readibility from code.
>
> While I can see where this request comes from, I agree with the triage
> review that the ticket has received -- that this isn't necessary. This
> is for three reasons:
>
>  * As noted on the ticket What you are describing can already be done
> with class-based generic views, and a class-based resource structure
> is a much better way of gathering concerns than three lines in a URL
> config file
>
>  * Even if you don't want to use class-based resources, you could
> easily generate a wrapper function to direct to subviews as required
> based on request methods:
>
> def dispatched_view(get_view=None, post_view=None):
>     def _view(request, *args, **kwargs):
>         if request.method == "POST":
>             return post_view(request, *args, *kwargs)
>         return get_view(request, *args, **kwargs)
>     return _view
>
> and then, in your urls.py:
>
> url(r'/user/(?P<username>\d+)$', dispatched_view(GET=get_view, 
> POST=post_view))
>
> Your definition of ajax_view could be a lot more complex than that,
> including handling for the is_ajax flag, other HTTP verbs, and so on.
>
>  * Lastly, even if the previous two approaches didn't exist, the
> proposal you have made requires a pretty egregious duplication of
> regular expressions. This is both a performance hit (since you need to
> match the same regular expression pattern multiple times), as well as
> a potential source of error (since you are repeating yourself).
>
> Yours,
> Russ Magee %-)

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to