Question

J'essaie d'écrire un " login_required " décorateur pour les vues dans une application WSGI + Werkzeug.

Pour ce faire, je dois accéder à la session de l'utilisateur, accessible via l'objet Request transmis aux méthodes d'affichage.

Je n'arrive pas à comprendre comment obtenir cette instance de Request dans le décorateur, cependant. J'ai examiné PEP318, plus précisément le quatrième exemple, mais je ne le comprends pas très bien.

Voici ce que j'essaie:

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)

mais j'obtiens une erreur d'index hors limites en essayant d'appeler args [0] .

Existe-t-il un moyen quelconque d'avoir accès à l'argument de requête passé dans le message "hello"? fonction dans le " login_required " décorateur?

Était-ce utile?

La solution

Le décorateur login_required se voit attribuer la fonction ( hello dans ce cas).

Ce que vous voulez faire, c'est:

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

Autres conseils

kwargs est un dictionnaire contenant des arguments sous forme de clés et des valeurs sous forme de valeurs.

Il suffit donc de vérifier: some_var = kw ['my_property']

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top