1
resposta

Página '/novo' não adiciona o jogo

Estou com problema de ao preeencher as informações do jogo para ser colocado na lista, quando aperto em (Salvar), não vai para tela da Lista e fica na mesma tela. Irei deixar a parte do código do servidor e outra da página "novo.html" :

(Jogoteca.py)

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



@app.route('/criar', methods=['POST',])
def criar():
  nome = request.form['nome']
  categoria = request.form['categoria']
  console = request.form['console']

  jogo = Jogo(nome, categoria, console)
  lista.append(jogo)
  return redirect(url_for('index'))


#Tela de Login
@app.route('/login')
def login():
  proxima = request.args.get('proxima')
  return render_template('login.html', proxima=proxima)


@app.route('/autenticar', methods=['POST',])
def autenticar():
  if request.form['usuario'] in usuarios:
      usuario = usuarios[request.form['usuario']]
      if request.form['senha'] == usuario.senha:
          session['usuario_logado'] = usuario.nickname

          flash(usuario.nickname + ' Logado com SUCESSO!')
          proxima_pagina = request.form['proxima']
          return redirect(proxima_pagina)

  else:
      flash('Usuário não logado')
      return redirect(url_for('login')) 

(novo.html)

{% extends "template.html" %}
{% block conteudo %}
        <form method="post" action="{{ url_for('criar') }}>

        <fieldset>

          <div class="form-group">
            <label for="nome">Nome</label>
            <input type="text" id="nome" name="nome" class="form-control">
          </div>

          <div class="form-group">
            <label for="categoria">Categoria</label>
            <input type="text" id="categoria" name="categoria" class="form-control">
          </div>

          <div class="form-group">
            <label for="console">Console</label>
            <input type="text" id="console" name="console" class="form-control">
          </div>

          <button type="submit" class="btn btn-primary btn-salvar">Salvar</button>

        </fieldset>
      </form>

{% endblock %}
1 resposta

Olá, Ramon.

Tudo bem?

Parece que seu código está correto. No entanto, um detalhe que pode estar causando o problema é a falta do fechamento da aspa dupla no atributo action do formulário em seu arquivo novo.html. Isso pode estar causando problemas na hora de enviar os dados para a rota '/criar'.

Seu código atual está assim:

<form method="post" action="{{ url_for('criar') }}>

Deveria estar assim:

<form method="post" action="{{ url_for('criar') }}">

Por favor, corrija essa parte e tente novamente.

Além disso, certifique-se de que a sessão do usuário está sendo mantida após o login. Se a sessão não estiver sendo mantida, a rota '/novo' sempre irá redirecionar para a tela de login, pois ela verifica se existe um usuário logado antes de renderizar a página.

Espero ter ajudado e 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