Ich versuche, einen access_rights
Decorator zu meiner Flasche App hinzufügen, um Berechtigungen beim Zugriff auf eine Route zu überprüfen. Es wird jedoch nicht die Argumente der verzierten Funktion erhalten, was zu einem Fehler führt, wenn ich meine dekorierte Funktion erneut aufrufen möchte.Decorator bekommt keine Argumente
Hier ist ein Beispiel von Code mit dem Dekorateur:
@route('/users')
@access_rights({'POST': ['admin']})
def users(user):
pass
Der user
Parameter stammt aus einer Flasche Plugin Ich schrieb, dass der Benutzer die mit der Anfrage übergeben Token erhält. Dies ist meine aktuelle Dekorateur:
def access_rights(permissions):
def decorator(f):
def wrapper(*args, **kwargs):
# Check permissions rights here (not implemented yet)
return f(*args, **kwargs)
return wrapper
return decorator
Damit ich TypeError: users() takes exactly 1 argument (0 given)
wenn ein GET /users
tun, was bedeutet, args
und kwargs
waren beide leer. Allerdings, wenn ich den Dekorateur wie folgt ändern, es funktioniert:
def access_rights(permissions):
def decorator(f):
return f
return decorator
Ich habe nicht mit Dekorateure viel gearbeitet, aber aus meinem Verständnis, beide Implementierungen oben sollte die users
Funktion mit seiner ursprünglichen Parameter aufrufen, noch für aus irgendeinem Grund erhält der erste die Parameter nicht. Warum das?
Dieser Code funktioniert für mich. Wenn Ihre zweite Decorator-Syntax funktioniert, dann bedeutet das, dass Sie sie nicht mit Argumenten verwenden: dh Sie tun nur '@ access_rights' und nicht' @access_rights (was auch immer) '. –
Vielleicht ist irgendwo der Name der Funktionen überprüft? In diesem Fall sollte ein '@ functools.wraps (f)' über dem Wrapper helfen. – Artyer
Verwenden Sie Py2 oder Py3? Ich glaube nicht, dass es einen großen Unterschied macht, aber ich bin neugierig. –