Olá. Eu estava tendo o mesmo problema que o Sálvio descreveu nesse tópico: https://cursos.alura.com.br/forum/topico-tipo-none-e-passado-para-a-variavel-proxima_pagina-quando-tento-acesso-direto-pela-url-login-212214 Percebi que o valor da input proxima está recebendo o valor 'None' quando faço o login normalmente (sem ser proveniente da rota novo) O que fiz para solucionar esse problema foi o seguinte:
@app.route('/autenticar', methods=['POST'])
def autenticar():
pasw = request.form['pasw']
if pasw == 'Senha':
session['usuario_logado'] = request.form['user']
proxima_pagina = request.form['proxima']
if proxima_pagina == 'None':
proxima_pagina = "/"
return redirect(proxima_pagina)
Essa é a melhor forma de corrigir esse problema?
Meu código python completo é:
from flask import Flask, render_template, request, redirect, session, flash, url_for
app = Flask(__name__)
app.secret_key = 'key'
@app.route('/')
def index():
return '<p>index<p>'
@app.route('/comentario')
def comentario():
if 'usuario_logado' not in session or session['usuario_logado'] == None:
return redirect(url_for('login', proxima=url_for('comentario')))
else:
return '<p>comentario<p>'
@app.route('/login')
def login():
proxima = request.args.get('proxima')
return render_template('login.html', proxima = proxima)
@app.route('/autenticar', methods=['POST'])
def autenticar():
pasw = request.form['pasw']
if pasw == 'Senha':
session['usuario_logado'] = request.form['user']
proxima_pagina = request.form['proxima']
if proxima_pagina == 'None':
proxima_pagina = "/"
return redirect(proxima_pagina)
else:
flash('Algo deu errado na sua autenticação.')
return redirect('/login')
@app.route('/logout')
def logout():
session['usuario_logado'] = None
return redirect('/login')
if __name__ == '__main__':
app.run(debug = True)
Meu código html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.8.1/font/bootstrap-icons.css">
<link rel="stylesheet" href="{{ url_for('static', filename='login.css') }}">
</head>
<body>
<div class = 'container-fluid centralize'>
<div class="card text-white bg-dark">
<form method="post" action="/autenticar">
<input type="hidden" name="proxima" value="{{ proxima }}">
<p>Login</p>
<br/>
<div class="container">
<div class="row">
<div class="col-4">
<label>Usuário:</label>
</div>
<div class="col-8">
<input name="user">
</div>
</div>
<div class="row">
<div class="col-4">
<label>Senha:</label>
</div>
<div class="col-8">
<input name="pasw">
</div>
</div>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul id="messages" class="list-unstyled">
{% for message in messages %}
<li class="text-danger">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
<br/>
<div class="row centralize">
<input type="submit" value="Pronto" style="width: 70px">
</div>
</div>
</form>
</div>
</div>
</body>
</html>