A modo de ejemplo,Los decoradores de Python se ejecutan antes de la función que se llama decorar?
def get_booking(f=None):
print "Calling get_booking Decorator"
def wrapper(request, **kwargs):
booking = _get_booking_from_session(request)
if booking == None:
# we don't have a booking in our session.
return HttpRedirect('/')
else:
return f(request=request, booking=booking, **kwargs)
return wrapper
@get_booking
def do_stuff(request, booking):
# do stuff here
El problema que estoy teniendo es, el decorador @get_booking se está llamando incluso antes de llamar a la función que estoy decorando.
salida en el arranque:
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
Calling get_booking Decorator
[26/Oct/2008 19:54:04] "GET /onlinebooking/?id=1,2 HTTP/1.1" 302 0
[26/Oct/2008 19:54:05] "GET /onlinebooking/ HTTP/1.1" 200 2300
[26/Oct/2008 19:54:05] "GET /site-media/css/style.css HTTP/1.1" 200 800
[26/Oct/2008 19:54:05] "GET /site-media/css/jquery-ui-themeroller.css HTTP/1.1" 200 25492
ni siquiera he hecho una llamada a una función que está decorado en este punto.
Estoy empezando con los decoradores, así que tal vez me falta algo. ¿Alguna ayuda?
Para responder al título de la pregunta directamente, ** ¿Se ejecuta un decorador antes de la función decorada? **. No, no se ejecuta cuando se declara la función. Se ejecuta cuando la función se llama _. Espero que esto ayude. – Jess