Frage

Ich versuche, einen "login_required" Dekorateur für die Ansichten in einer WSGI + Werkzeug-Anwendung zu schreiben.

Um dies zu tun, muss ich an die Sitzung des Benutzers erhalten, die über das Request-Objekt zugänglich ist, die in die Ansicht Methoden übergeben wird.

Ich kann nicht herausfinden, wie in diesem Fall des Antrags in der Dekorateur zu bekommen, though. Ich sah PEP318, insbesondere das vierte Beispiel, aber ich bin nicht ganz zu bekommen.

Hier ist, was ich versuche:

def login_required(*args, **kw):
    def goto_login(**kw):
        return redirect(url_for('login'))

    def decorate(f):
        # args[0] should be request
        args[0].client_session['test'] = True
        logged_in = 0
        if logged_in:
            return f
        else:
            return goto_login
    return decorate


@login_required()
@expose('/hello/<string:name>')
def hello(request, name):
    return render_template('say_hello.html', name=name)

, aber ich erhalte einen Index außerhalb der Grenzen Fehler beim args[0] nennen.

Gibt es eine Möglichkeit, den Zugriff auf die Anfrage Argument in die „Hallo“ -Funktion in dem „login_required“ Dekorateur geben bekommen kann?

War es hilfreich?

Lösung

Der Dekorateur login_required wird die Funktion (hello in diesem Fall) übergeben.

Also, was Sie tun möchten, ist:

def login_required(f):
    # This function is what we "replace" hello with
    def wrapper(*args, **kw):
        args[0].client_session['test'] = True
        logged_in = 0
        if logged_in:
            return f(*args, **kw)  # Call hello
        else:
            return redirect(url_for('login'))
    return wrapper

Andere Tipps

kwargs ist ein Wörterbuch als Schlüssel und Werte als Wert enthält Argument.

Also alles, was Sie tun müssen, ist Check: some_var = kw['my_property']

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top