Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Method Not Allowed

Estou com problema de ao preeencher as informações do jogo para ser colocado na lista. Já estou no final do projeto e acho que comi mosca em alguma hora de testar... Já voltei e revi o código, achei alguns errinhos mas ainda não consegui descobri o que perdi.

Acho que ainda tenho um pouco de dificuldade com POST e GET... D:

Vou deixar os códigos aqui abaixo.

Agradeço muitíssimo desde já!

(jogoteca.py)

from flask import Flask, render_template, request, redirect, session, flash, url_for


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


class Usuario:
    def __init__(self, id, nome, senha):
        self.id = id
        self.nome = nome
        self.senha = senha


app = Flask(__name__)  # Cria uma instância do Flask - referência nesse próprio arquivo
app.secret_key = 'mamou'  # Chave secreta para o Flask

lista_jogos = [
    Jogo('Super Mario', 'Ação', 'SNES'),
    Jogo('Pokemon Gold', 'RPG', 'GBA'),
    Jogo('Mortal Kombat', 'Luta', 'SNES'),
    Jogo('Zelda', 'Aventura', 'SNES')
]

usuarios = {
    'admin': Usuario('admin', 'admin', 'admin'),
    'jose': Usuario('jose', 'jose', '1234'),
    'maria': Usuario('maria', 'maria', '4321')
}

designPATH = 'static/bootstrap.css'


@app.route('/')  # Define a rota para a página inicial
def index():  # Função que será executada quando a rota for acessada

    return render_template('lista.html', titulo="Jogos", jogos=lista_jogos,
                           design=designPATH)  # Retorna o conteúdo da página home.html


@app.route('/cadastro')  # Define a rota para a página cadastro
def cadastro():
    if 'usuario_logado' not in session or session['usuario_logado'] is None:
        return redirect(url_for('login', proxima=url_for('cadastro')))
    return render_template('cadastro.html', titulo="Cadastro de Jogo")  # Retorna o conteúdo da página cadastro.html


@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_jogos.append(jogo)
    return redirect(url_for('index'))


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


@app.route('/auth', methods=['POST', ])
def auth():

    if request.form['usuario'] in usuarios:
        user = usuarios[request.form['usuario']]
        if request.form['senha'] == user.senha:
            session['usuario_logado'] = user.id
            flash(user.id + ' logou com sucesso!')
            prox_pagina = request.form['proxima']
            return redirect(prox_pagina)
    else:
        flash('Não logado, tente novamente!')
        return redirect(url_for('login'))


@app.route('/logout')
def logout():
    session['usuario_logado'] = None
    flash('Logout efetuado com successo!')
    return redirect(url_for('index'))


app.run(debug=True)  # Inicia o servidor web do Flask

(template.html)

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Jogoteca</title>
      <link rel="stylesheet" href="{{ url_for('static', filename='bootstrap.css') }}">
  </head>
  <body>
    <div class="container">
        {% with messages = get_flashed_messages() %}
            {% if messages %}
                <ul id="messages" class="list-unstyled">
                {% for message in messages %}
                    <li class="alert alert-success">{{ message }}</li>
                {% endfor %}
                </ul>
            {% endif %}
        {% endwith %}

        <div class="page-header">
            <h1>{{ titulo }}</h1>
        </div>

        {% block conteudo %}

        {% endblock %}

    </div>
  </body>
</html>

(cadastro.html)

{% extends 'template.html' %}
{% block conteudo %}
      <form method="post" action="{{ url_for('cadastro') }}">
        <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 %}
5 respostas

Baixei o arquivo do professor, e segue aparecendo a mesma coisa.... Tô entendendo nada kkkkk

Isso pode ser por versão? E se sim, como faço para resolver mantendo a mesma que estou usando?

(requirements.txt)

blinker==1.8.2
click==8.1.7
colorama==0.4.6
Flask==3.0.3
itsdangerous==2.2.0
Jinja2==3.1.4
MarkupSafe==2.1.5
Werkzeug==3.0.3

Boa tarde, Paula! Tudo joia?

Poderia compartilhar todo o seu projeto, via GitHub ou Drive do Google? Pois os trechos que você compartilhou aparentemente não apresentam nenhuma inconsistência que poderia está causando o seu erro, por isso seria interessante testar o seu projeto completo para entender se existe alguma outra parte dele interferindo.

Fico no aguardo e à disposição

Não estou no computador que fiz mas eu tenho o zip dele aqui que passei para um amigo ver se conseguia... Aparentemente funciona na máquina dele KKKKKKKK Tô começando a achar que pode ser algo na minha máquina, mas também não sei o quê.

Segue o link: https://drive.google.com/file/d/1wxLht5LGWLLOejjXCC-VQVW4ivLhAzNS/view?usp=sharing

solução!

Bom dia, Paula!

Não querendo ser estraga prazeres, mas acho que o problema está mesmo no seu computador kkkk.

Brincadeiras a parte, o seu código tem um pequeno problema no seu arquivo cadastro.html na linha 3 onde você define a rota que o formulário deve acessar. Você definiu que ele deve acessar a rota cadastro, porém, você deveria ter passado a rota criar.

Então, para solucionar o seu problema, você precisa apenas alterar a URL que você está tentando acessar no formulário:

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

Espero ter ajudado e bons estudos!

Perfeitamente resolvido, obrigada!

Pior que era meu computador né kkkkkkkkkkkkkk

<3 Valeu