3
respostas

Codigo não funciona

Nessa parte da aula, da forma como o codigo está o redirecionamento para a pagina incial (/) não funciona, retorna o erro de "Method Not Allowed".

Segue o codigo e versão do flask é 1.0.2:

jogoteca.py
"from flask import Flask, render_template, request, redirect, session, flash

app = Flask(__name__)
app.secret_key = 'alura'


class Jogo:
    def __init__(self, nome, categoria, console):
        self.nome = nome
        self.categoria = categoria
        self.console = console


jogo1 = Jogo('Super Mario', 'Ação', 'SNES')
jogo2 = Jogo('Pokemon Gold', 'RPG', 'BGA')
jogo3 = Jogo('Mortal Kombat', 'Luta', 'SNES')
lista = [jogo1, jogo2, jogo3]


@app.route('/')
def index():
    return render_template('lista.html', titulo='Jogos', jogos=lista)


@app.route('/novo')
def novo():
    if 'logado' not in session or session['logado'] is None:
        return redirect('/login?proxima=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('/')


@app.route('/login')
def login():
    proxima = request.args.get('proxima')
    return render_template('login.html', titulo='Faça seu login', proxima=proxima)


@app.route('/autenticar', methods=['POST', ])
def autenticar():
    if 'mestra' == request.form['senha']:
        session['logado'] = request.form['usuario']
        flash(request.form['usuario'] + ' logou com sucesso!', 'success')
        proxima_pagina = request.form['proxima']
        return redirect('/{}'.format(proxima_pagina))
    else:
        flash('Não logado, tente de novo!', 'danger')
        return redirect('/login')


@app.route('/logout')
def logout():
    session['logado'] = None
    flash('Nenhum usuário logado!', 'info')
    return redirect('/')


app.run(debug=True)"

login.html
{% extends "template.html" %}
{% block conteudo %}
        <form method="POST" action="/autenticar">
            <input type="hidden" name="proxima" value="{{ proxima or '/' }}">
            <p><label>Nome de usuário:</label> <input class="form-control" type="text" name="usuario" required></p>
            <p><label>Senha:</label> <input class="form-control" type="password" name="senha" required></p>
            <p><button class="btn btn-primary" type="submit">Entrar</button></p>
        </form>
{% endblock %}
3 respostas

Olá Natalia.

Tive o mesmo problema nessa atividade, mas quando prossegui para o vídeo "Mais URL's dinâmicas" e segui os passos do instrutor, o código funcionou perfeitamente. Tente aplicar as mudanças do próximo vídeo para ver se funciona.

Sim, ja fiz isso, o que gostaria de saber é como resolver esse problema de qualquer jeito No mundo real não vai ter próxima aula pra assistir pra resolver o problema

Pelas minhas conclusões, o problema está na parte "proxima or '/'". Não consegui diagnosticar perfeitamente o erro, mas também não vejo outra alternativa que possa causar isso. Em qualquer caso, creio que não usar hard-coding vai evitar a ocorrência desse tipo de problema.