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.
 
            