Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Method configurado como POST no form, mas chega uma requisição GET no Flask

por Ana Karla Amador Ribeiro Fujioka | 79.6k xp | 5 posts Analista de Negócio/CEO

Olá. Estou seguindo o "Mãos na massa: autorização de usuários" da aula 06. Quando tento acessar a página novo, sou redirecionado para a página de login, faço o login com sucesso e a página novo é exibida. Acompanhado o console, vejo que o Flask recebe a requisição POST, como está configurado no formulário da página de login.

Quando tento fazer o login diretamente, assim que rodo a aplicação, quando envio os dados de login para a rota '/autenticar' aparece a tela de erro "Method Not allowed". Quando mudo a rota para '/novo', por exemplo, a página novo é exibida e aparece a mensagem de que o usuário foi logado com sucesso. Vejo no terminal que foi enviada uma requisição GET para o Flask. Não sei o que está acontecendo. Pode me ajudar? Segue os prints do código e do console.

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

@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 'mestra' == request.form['senha']: session['usuario_logado'] = request.form['usuario'] flash(request.form['usuario'] + ' logou com sucesso!') proxima_pagina = request.form['proxima'] return redirect('/{}'.format(proxima_pagina)) else: flash('Não logado, tente novamente!') return redirect('/login')

Em login.html temos:

Faça seu login

Nome de usuário:

Senha:

Quando rodo a aplicação do início e vou para a rota de login, as mensagens no console que aparecem na sequência são as seguintes: 127.0.0.1 - - [28/Jun/2021 00:58:11] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [28/Jun/2021 00:58:22] "GET /login HTTP/1.1" 200 - 127.0.0.1 - - [28/Jun/2021 00:58:35] "POST /autenticar HTTP/1.1" 302 - 127.0.0.1 - - [28/Jun/2021 00:58:35] "GET /autenticar HTTP/1.1" 405 -

É como se tívessemos duas requisições em seguida, uma POST (ao que parece o usuário é logado na sessão) e uma GET (aparece o erro no navegador "Method not allowed"). Mas é só mudar a rota, por exemplo, para '/novo' ou '/' que a página é exibida e aparece a mensagem flash informando que o usuário foi logado.

Tomara que consigam me ajudar. Agradeço.

1 resposta
solução!

caso você também esteja recebendo esse erro, aqui vai meu , método que fez ele funcionar e sua explicação:

Info adicionais - SO utilizado: UBUNTU, Browser: Firefox 94.0 (64-bit)

Estou na aula 7, e quando o professor explica sobre redirecionar para uma pagina 'http://127.0.0.1:5000/None', no código HTML dele é colocada a solução:

<input type='hidden' name='proxima' value="{{ proxima or '/' }}" >.

O erro que aparece para mim é que o método POST vira um Método GET, isso eu infelizmente não saberei explicar.

Mas o que esta acontecendo é que basicamente o código esta concatenando a variável 'proxima' que contem 'novo' ou '/' com o link ja existente, ou seja 'http://127.0.0.1:5000/', fazendo com que o browser procure por 'http://127.0.0.1:5000//'.

O método que utilizei foi bem simples, por ja termos definido a nossa home como @app.route('/'), não se faz necessário a utilização da '/' no código HTML. Ficando assim:

<input type='hidden' name='proxima' value="{{ proxima or '' }}" >

Com o valor, caso 'proxima' seja vazio, apenas uma string vazia e indo para nossa rota home.

espero ter ajudado a todos que estão com esse problema. qualquer duvida é só chamar

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