Gostaria de compartilhar uma dicas sobre como corrigir um erro que pode surgir ao usar o url_for(). Parece algo bobo, mas acredite, levei um tempo até entender o que estava acontecendo. Imagino que outras pessoas podem estar com o mesmo problema, então vim aqui compartilhar minha solução.
O url_for() adiciona automaticamente uma barra antes do nome da rota, o que pode causar erros ao redirecionar do login para cadastrar um novo jogo na lista. Para corrigir isso, removi manualmente essa barra. Veja como fiz:
Observação: O meu cadastrar_jogo é o novo de vocês!!
@app.route('/cadastrar_jogo')
def cadastrar_jogo():
if 'usuario_logado' not in session or session['usuario_logado'] == None:
proxima = url_for('cadastrar_jogo')
proxima = proxima.lstrip('/') # Remove a / antes do nome de rota
return redirect(url_for('login', proxima=proxima))
return render_template('cadastro.html', titulo='CADASTRAR NOVO JOGO')
Outro problema que vocês podem encontrar é ao acessar o login diretamente, resultando em uma URL como "http://127.0.0.1:5000/None". Para resolver isso, basta verificar se "proxima" é diferente de None no login. Se for, redirecionamos para "proxima"; caso contrário, redirecionamos para o diretório de login por padrão. Aqui está o exemplo de código:
@app.route('/login')
def login():
proxima = request.args.get('proxima')
if proxima != None:
return render_template('login.html', titulo='LOGIN', proxima=proxima)
else:
return render_template('login.html', titulo='LOGIN')
Espero que a minha dificuldade possa ajudar nas dúvidas de vocês, tmj!