Als BeispielPython Decorators vor Funktion ausgeführt wird es heißt dekorieren?
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
Das Problem, das ich habe ist, wird die @get_booking Dekorateur, noch bevor ich die Funktion, dass ich die Dekoration am genannt genannt wird.
Ausgabe am Start:
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
Ich habe nicht einmal einen Anruf an eine Funktion aus, die an dieser Stelle eingerichtet.
Ich fange gerade mit Dekorateuren an, also verpasse ich vielleicht etwas. Irgendeine Hilfe?
Um den Fragetitel direkt zu beantworten, ** Läuft ein Dekorateur vor der dekorierten Funktion? **. Nein, es wird nicht ausgeführt, wenn die Funktion deklariert wird. Es wird ausgeführt, wenn die Funktion _called_ ist. Ich hoffe das hilft. – Jess