Pergunta

Eu estou tentando escrever um decorador "login_required" para os pontos de vista em um aplicativo WSGI + Werkzeug.

A fim de fazer isso, eu preciso para obter a sessão do usuário, que é acessível através do objeto de solicitação que é passado para os métodos de exibição.

Eu não consigo descobrir como chegar a essa instância de solicitação na decorador, no entanto. Olhei para PEP318, especificamente o quarto exemplo, mas eu não estou bastante começá-lo.

Aqui está o que estou tentando:

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)

mas eu recebo um índice de erro de falta de limites tentando args[0] chamada.

Existe alguma maneira eu posso obter acesso ao argumento pedido passado para a função "Olá" na decorador "login_required"?

Foi útil?

Solução

O login_required decorador é passado para a função (hello neste caso).

Então, o que você quer fazer é:

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

Outras dicas

kwargs é um dicionário contendo argumento como chaves e valores como valores.

Então tudo que você precisa fazer é verificar: some_var = kw['my_property']

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top