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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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?
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. 😉