Dank, was ich von this question gelernt, ich habe in der Lage gewesen, eine Flasche Login-Prozess mit einem Endpunkt wie folgt zu machen:Flask Login bricht, wenn meine Dekorateur Parameter akzeptiert
@app.route('/top_secret')
@authorize
@login_required
def top_secret():
return render_template("top_secret.html")
und (bis jetzt) Pass-Through „autorisiert“ ein völlig Dekorateur:
from functools import wraps
def authorize(func):
@wraps(func)
def newfunc(*args, **kwargs):
return func(*args, **kwargs)
return newfunc
Der @wraps(func)
Aufruf erlaubt Flask den Endpunkt zu finden, das es sucht. So weit, ist es gut.
Aber ich möchte einen Gruppennamen an den "authorize" -Prozess übergeben, und die Dinge gehen schlecht, wenn ich versuche, einen Dekorateur zu machen, der eingehende Parameter akzeptiert. Dies scheint die richtige Syntax zu sein, wenn ich nicht irre:
from functools import wraps
def authorize(group=None):
def real_authorize(func):
@wraps(func)
def newfunc(*args, **kwargs):
return func(*args, **kwargs)
return newfunc
return real_authorize
Aber noch einmal der Fehler erscheint als Flask nicht in der Lage ist, den 'top-secret' Endpunkt, um herauszufinden:
werkzeug.routing.BuildError: Could not build url for endpoint 'top_secret'.
I dachte vielleicht, es brauchte @wraps(authorize)
Dekoration direkt über def real_authorize(func)
, aber das half nichts zu helfen.
Kann mir jemand helfen herauszufinden, wo meine @wraps
falsch läuft?
Ah! Also, wenn ich dich richtig verstehe, bewirkte meine Dekoration eines nackten "@ authorize", dass es die "top_secret" -Funktion als Argument annahm? Ich sage es vielleicht nicht richtig, aber als ich die Dekoration in '@authorize ('mygroup')' 'oder auch nur' @authorize() 'änderte, schien das zu funktionieren. Verstehe ich deine Antwort richtig? –