1
resposta

"if request.form['usuario'] in usuarios:" não funciona no python 3.8.10

O trecho de código

if request.form['usuario'] in usuarios:

Não funciona no python 3.8.10. Tive de realizar um pequeno ajuste que envolveu um for. Não achei a solução muito elegante, mas funciona. Segue o código:

@app.route('/autenticar', methods=['POST', ])
def autenticar():
    form_usuario = request.form['usuario']
    lista_usuarios = usuarios.values()
    for usuario in lista_usuarios:
        if usuario.nome == form_usuario:
            if request.form['senha'] == usuario.senha:
                session['usuario_logado'] = form_usuario
                flash('Seja bem vindo(a), ' + form_usuario)
                proxima_pagina = request.form['proxima']
                return redirect(proxima_pagina)
            else:
                flash('Falha ao validar dados de login. Favor tente novamente')
                return redirect(url_for('login'))
    flash('Falha ao validar dados de login. Favor tente novamente')
    return redirect(url_for('login'))
1 resposta

Olá Washington Souza,

estive analisando aqui, acredito que seria interessante você utilizar o operador "and" ao inves do "in" if em questão. Como por exemplo:

@app.route('/autenticar', methods=['POST',])
def autenticar():
    if 'admin' == request.form['senha'] and 'admin' == request.form['usuario']:
        session['usuario_logado'] = request.form['usuario']
        return redirect('/bem-vindo')
    else:
        flash('Usuario não autenticado, tente de novo!')
        return redirect('/')

a partir disto, você conseguirá enxugar um pouco mais o código.

espero ter ajudado, boa jornada para você!