1
resposta

Por que usar o proxima ao invés de simplesmente colocar a página que deseja?

Por que utilizou todo esse mecanismo de troca de dados entre PY e HTML sendo que poderia simplesmente colocar a rota '/autenticar' para redirecionar para o '/novo' se a senha fosse a correta?

1 resposta

Olá Guilherme! Tudo certo? Espero que sim. 🙂

Boa pergunta!

A utilização do redirect() na rota autenticar pode ser uma solução viável, porém apenas se considerarmos que todos que fazem o login na nossa aplicação buscam adicionar um novo item. Conforme a nossa aplicação cresce o motivo do login pode não ser, necessariamente, apenas adicionar um novo item. Alguns exemplos podem ser a edição ou deleção de alguns itens (spoilers do próximo curso).

A vantagem desse método de passar a rota anterior através de query string pela variável proxima é que podemos escalar esse redirecionamento para qualquer caso em que o login seja necessário.

Exemplo:

No momento, temos a rota novo, que faz a verificação de login e, caso o usuário não esteja logado, redireciona para a rota de login passando o endereço da a página novo dentro da variável proxima e, portanto fazendo todo o "mecanismo" de query string funcionar:

@app.route('/novo')
def novo():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('novo')))
    return render_template('novo.html', titulo='Novo Jogo')

Mas supondo que queremos adicionar uma rota de edição, bastaria apenas criar uma rota com o raciocínio semelhante ao de novo:

@app.route('/editar')
def editar():
    if 'usuario_logado' not in session or session['usuario_logado'] == None:
        return redirect(url_for('login', proxima=url_for('editar')))
    return render_template('editar.html', titulo='Editar Jogo')

Perceba que agora passamos o endereço de editar na variável proxima.

Assim, o mecanismo iria funcionar normalmente para ambas rotas novo e editar, sem a necessidade de maiores alterações de código em outras rotas.

Caso utilizarmos o redirect() na rota autenticar, teriamos que mudar autenticar todas as vezes que fossemos acrescentar uma nova rota que seja necessário login para ser acessada, correndo o risco de criar múltiplas condições if - elif - else (algo que não é uma boa prática de desenvolvimento de software).

Espero ter ajudado! Quaisquer dúvidas, estou à disposição. 😉

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software