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

Falha ao redirecionar para página login

Olá, estou tendo um problema, ao pressionar o botão de submit da página de cadastro não estou sendo redirecionado para a página de login como ocorre na aula, estou sendo redirecionado para a página de cadastro novamente, por não ocorrer nenhum erro trata-se de uma falha no meu código. Pelo que vejo no terminal quando pressiono o botão de submit ocorre um método HTTP GET ao invés do POST.

código da view.py:

from django.shortcuts import redirect, render
# Create your views here.

def cadastro(request):
    if request.method == 'POST':
        print('usuário cadastrado!')
        return redirect('login')
    else:
        return render(request, 'usuarios/cadastro.html')

def login(request):
    return render(request, 'usuarios/login.html')

def dashboard(request):
    return

def logout(request):
    return

arquivo login.html:

<form action="{% url 'cadastro' %}" method="POST">
                        {% csrf_token %}
                        <div class="row">
                            <div class="col-12 col-lg-12">
                            <label for="email"><b>Email</b></label>
                                <input type="text" id="email" class="form-control" name="email" placeholder="Entre com o email cadastrado">
                            </div>
                                <div class="col-12 col-lg-12">
                                <label for="senha"><b>Senha</b></label>
                                <input id="senha" type="password" class="form-control" name="senha" placeholder="Digite aqui sua senha">
                            </div>
                            <div class="col-12 text-center">
                                <button class="btn btn-success" type="submit">Acessar sua conta</button>
                                <button type="button" class="btn btn-primary" onclick="exibirCriarConta()">Ainda não tem conta? Clique aqui</button>
                            </div>
                        </div>
                    </form>

E aqui tem uma imagem do terminal, repare que a última ocorrência indica o método HTTP GET: Imagem do terminal com a última ocorrência após clique no submit na página de cadastro

Como resolver isso para obter a mesma resposta demostrada na aula?

5 respostas

Olá! Para o cadastro você está usando o arquivo login.html?

Oi, se você está se referindo a função cadastro sim, nela indico para redirecionar para a função login que por sua vez redireciona para a página login.html, como mostra o código que adicionei na pergunta e o que segue aqui em baixo:

def cadastro(request):
    if request.method == 'POST':
        print('usuário cadastrado!')
        return redirect('login')
    else:
        return render(request, 'usuarios/cadastro.html')

Pelo resultado que mostra no terminal quando clico no botão de submit o problema está na página não retorna o método HTTP POST, apesar de ser indicado o POST no atributo method:

<form action="{% url 'cadastro' %}" method="POST">
                        {% csrf_token %}
                        <div class="row">

resultado do terminal ao clicar em submit

solução!

Olá! Pelo o que eu vi o problema está no atributo action do formulário. Por favor, faça o seguinte:

  1. No arquivo cadastro.html: <form action="{% url 'cadastro' %}">...</form>

  2. No arquivo login.html: <form action="{% url 'login' %}">...</form>

Quando acessamos a tela de cadastro, será obtido uma requisição GET para a rota /usuarios/cadastro/, que neste caso irá executar a função cadastro. Nesta primeira requisição entraremos no ELSE, porque não fizemos nenhuma requisição do tipo POST, logo será renderizado a página cadastro.html.

Preenchendo o formulário de cadastro (em cadastro.html), informamos no atributo action onde será processado estas informações. Neste caso se fizermos action="{% url 'cadastro' %}", seremos redirecionados para a rota cadastro (veja no arquivo urls.py de usuários) que por sua vez irá executar a função cadastro mas dessa vez iremos entrar na condição IF, pois a requisição foi do tipo POST.

Não sei se deu pra entender rsrs. Qualquer coisa é só avisar :)

Olá Kaio, entendi sim, deu certo. Estava editando a página login ao invés da cadastro, por isso não era envia um POST. Obrigado pela ajuda.

Opa! De nada ;)

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