Hi Michael,

It's an interesting solution which I didn't think of.
The strong point of this solution is that it avoids changing the inner
structure of the decorated function. On the other hand, in the
decorated function, type checking is thus needed because the passed
parameters may have been changed.

If __call__(*args) had an extra parameter ctx, there would be no such
problems

On Sep 21, 8:39 pm, Michael <[EMAIL PROTECTED]> wrote:
> Hi Linan,
>
> On Sep 22, 3:38 am, Linan <[EMAIL PROTECTED]> wrote:
>
>
>
> > Hi all,
>
> > I just wrote a decorator to validate if an object(say Blog) exists:
>
> > def require_blog_item_exists(func):
> >     def _decorated_func(request, blog_id, *args, **kwargs):
> >         try:
> >             blog = Blog.objects.get(id = blog_id)
> >             return func(request, blog_id, *args, **kwargs)
> >         except:
> >             return HttpResponseRedirect('error')
> >     return _decorated_func
>
> > An idea pops into my mind, that why not cache the blog object in
> > func.func_globals to avoid extra database retrieval operation? So I
> > wrote following codes:
>
> I think a better way to save yourself the repeated database retrieval
> would be to use your decorator to modify the arguments to you view
> function.
>
> So where you return the original function above, do this instead:
>                return func(request, blog, *args, **kwargs)
>
> And then modify all your view functions that use this decorator so
> that they take the actual blog as an argument rather than just the id
> returned by the URL conf. I'm not sure if this moves beyond what a
> decorator is meant to do, but it seems to be similar to the permalink
> decorator (in django.db.models.__init__.py) that requires changing the
> return value of your get_absolute_url method before using it.
>
> Hope that helps,
> Michael.
>
> Cheers,
> Michael


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

Reply via email to