Pregunta

Estoy tratando de escribir un " login_required " decorador para las vistas en una aplicación WSGI + Werkzeug.

Para hacer esto, necesito acceder a la sesión del usuario, a la que se puede acceder a través del objeto Solicitud que se pasa a los métodos de visualización.

Sin embargo, no puedo entender cómo llegar a esa instancia de Solicitud en el decorador. Miré a PEP318, específicamente el cuarto ejemplo, pero aún no lo entiendo.

Esto es lo que estoy intentando:

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)

pero obtengo un error de índice fuera de límites al intentar llamar a args [0] .

¿Hay alguna forma de obtener acceso al argumento de solicitud pasado al " hola " función en el " login_required " decorador?

¿Fue útil?

Solución

Al decorador login_required se le pasa la función ( hello en este caso).

Entonces, lo que quieres hacer es:

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

Otros consejos

kwargs es un diccionario que contiene argumentos como claves y valores como valores.

Entonces, todo lo que necesita hacer es verificar: some_var = kw ['my_property']

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top