Criei o clássico jogo de adivinhação com Python bem básico só para ter a aplicação mesmo, o objetivo de estudo aqui era colocar pra rodar com Flask, semelhante ao projeto do curso 1 de Flask.
O programa em Python estava funcionando perfeitamente, os problemas surgiram somente na implementação do Flask para visualizar tudo nas páginas. Já revisei o código inúmeras vezes, fiz várias alterações e ainda não consegui encontrar o problema. O retorno é sempre "405 Method Not Allowed", mesmo que o method POST esteja colocado em todos os pontos que o curso ensina. Segue os códigos.
OBS: O bloco comentado é pq preferi deixar assim para que não interferisse nos testes da função index. Assim que conseguir rodar ela, vou passar para a função palpite.
ADVINHACAO.PY
from flask import Flask, render_template, request, redirect, session, flash, url_for
import random
class Usuario:
def __init__(self, nickname, senha):
self.nickname = nickname
self.senha = senha
usuario1 = Usuario("luizrodgs", "alohomora")
usuarios = { usuario1.nickname : usuario1
}
app = Flask(__name__)
app.secret_key = 'admin'
@app.route('/', methods=['POST',])
def index():
intervalo1 = int(request.form['intervalo1'])
intervalo2 = int(request.form['intervalo2'])
if intervalo1 < intervalo2:
troca = int(intervalo1)
intervalo1 = int(intervalo2)
intervalo2 = int(troca)
numero_secreto = random.randrange(intervalo2, intervalo1+1)
nivel = int(request.form['nivel'])
if nivel == 1:
vidas = 10
elif nivel == 2:
vidas = 7
elif nivel == 3:
vidas = 5
return render_template('index.html', titulo='Jogar')
# @app.route('/palpite', methods=['POST',])
# def palpite():
# palpite = None
#
# contador_de_palpites = 1
#
# while (palpite != numero_secreto) and (vidas > 0) and (palpite != numero_secreto) and controle_partida == 1:
# print(f'Palpites restantes: {vidas}')
# palpite = int(input(f'Informe seu {contador_de_palpites}° palpite: '))
# contador_de_palpites += 1
# if palpite == numero_secreto:
# print("VOCÊ GANHOU!")
# controle_partida = 0
# else:
# vidas -= 1
# if (nivel == 1) or (nivel == 2):
# if (palpite < numero_secreto):
# print("Palpite incorreto! Tente um número MAIOR...")
# else:
# print("Palpite incorreto! Tente um número MENOR...")
#
# if (vidas == 0):
# print("VOCÊ PERDEU!")
# controle_partida = 0
# print(f'O número secreto era: {numero_secreto}')
# break
app.run(debug=True)
TEMPLATE.HTML
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Jogo da Adivinhação</title>
<link rel="stylesheet" href="{{ url_for('static'), filename='bootstrap.css') }}">
</head>
<body>
<div class="container">
<div class="page-header">
<h1>{{ titulo }}</h1>
</div>
{% block conteudo %} {% endblock %}
</div>
</body>
</html>
INDEX.HTML
{% extends "template.html" %}
{% block conteudo %}
<form action="{{ url_for('/index') }}" method="post">
<fieldset>
<div class="form-group">
<label for="intervalo1">Informe o primeiro número do intervalo: </label>
<input type="text" id="intervalo1" name="intervalo1" class="form-control">
</div>
<div class="form-group">
<label for="intervalo2">Informe o segundo número do intervalo: </label>
<input type="text" id="intervalo2" name="intervalo2" class="form-control">
</div>
<div class="form-group">
<label for="nivel">Informe o nível desejado (1 Fácil / 2 Medio / 3 Difícil): </label>
<input type="text" id="nivel" name="nivel" class="form-control">
</div>
<button type="submit" class="btn btn-primary btn-enviar">Enviar</button>
</fieldset>
</form>
{% endblock %}
OBS: Bootstrap está na página static do projeto, conforme padrão.