On 17 oct, 16:18, Heather <[EMAIL PROTECTED]> wrote:
> I have a couple of projects that use the same application
> (particularly, photologue).  In one project, I want the views of the
> imported application to require users be signed in.  All the views in
> this imported application are generic.  So, is it possible to use
> login_required w/o having to go into photologue.urls and add the
> decorator?  Is it possible to do this in my projects urls file?

Technically, yes - but I failed to find a clean way to do so. Here's
some possible (*untested*) hack:

# project's urls.py

import photologue.urls
for purl in photologue.urls.urlpatterns:
    callback = purl.callback
    purl._callback = login_required(callback)

AFAICT, this _should_ work - but well, this is a (dirty) hack, and as
such is not garanteed in any way.


And if there's a better way (not requiring to rewrite all photologue
urls by hand), I'd be happy to know about it !-)

>  I am
> new to Python so I'm not sure I'm on the right track but I thought I
> should do something along the lines of writing my own wrapper that
> would take  photologue.urls as an argument (the **kwargs argument,
> maybe?)  Like:
>
> @login_required
> restrict_access(*args, **kwargs)
>     #if this is indeed the right idea, this is where I'm not quite
> sure what to do...
>     if kwargs.list_object(*args, **kwargs)
>           return kwargs.list_object
>
> I know this isn't right but I am not 100% sure of the concept of
> decorators.

The first thing to understand is that in Python, everything is an
object - including functions. The second point is that functions are
mostly a specific case of callable objects - a callable object being
any object implementing the __call__ operator (iow : having a __call__
method). FWIW, classes (classes being objects too...) are callable
objects too (you call them to instanciate them).

IOW :
- you can use functions and classes like any other objects (passing
them as args, returning them from function, etc, etc)
- you can define your own callable types

Now : a decorator is a callable object that takes a (single) callable
object as argument and returns a (single) callable object.


FWIW, the

@decorator
def somefunc(...):
   # XXX

notation is only syntactic sugar for

def somefunc(...):
   # XXX
somefunc = decorator(somefunc)


HTH
--~--~---------~--~----~------------~-------~--~----~
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