Django Wars [Parte 05]: Formulário de login

O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django

No nosso projeto já temos a página de cadastro, agora precisamos criar a página de login do usuário.
Novamente, com o django tudo fica mais fácil.
Dentro da biblioteca django.contrib.auth.forms existe a classe AuthenticationForm, que irá nos ajudar a criar o formulário de login.

Para criar uma sessão persistente do usuário no sistema, precisaremos de outra função, também presente na rica biblioteca de funções do Django, a função login(), que está na biblioteca django.contrib.auth.

Nossa views.py ficará da seguinte forma:

# Create your views here.
from django.shortcuts import render_to_response, render
from django.http import HttpResponseRedirect # Funcao para redirecionar o usuario
from django.contrib.auth.forms import UserCreationForm # Formulario de criacao de usuarios
from django.contrib.auth.forms import AuthenticationForm # Formulario de autenticacao de usuarios
from django.contrib.auth import login # funcao que salva o usuario na sessao


# pagina inicial do projeto django-wars
def index(request):
    return render_to_response("index.html")


# pagina de cadastro de jogador
def registrar(request):
    # Se dados forem passados via POST
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        
        if form.is_valid(): # se o formulario for valido
            form.save() # cria um novo usuario a partir dos dados enviados 
            return HttpResponseRedirect("/login/") # redireciona para a tela de login
        else:
            # mostra novamente o formulario de cadastro com os erros do formulario atual
            return render(request, "registrar.html", {"form": form})
    
    # se nenhuma informacao for passada, exibe a pagina de cadastro com o formulario
    return render(request, "registrar.html", {"form": UserCreationForm() })


# pagina de login do jogador
def logar(request):
    if request.method == 'POST':
        form = AuthenticationForm(data=request.POST) # Veja a documentacao desta funcao
        
        if form.is_valid():
            #se o formulario for valido significa que o Django conseguiu encontrar o usuario no banco de dados
            #agora, basta logar o usuario e ser feliz.
            login(request, form.get_user())
            return HttpResponseRedirect("/") # redireciona o usuario logado para a pagina inicial
        else:
            return render(request, "logar.html", {"form": form})
    
    #se nenhuma informacao for passada, exibe a pagina de login com o formulario
    return render(request, "logar.html", {"form": AuthenticationForm()})

Notem como ela é bem parecida com a view registrar().
Com poucas linhas temos um formulário de login bastante funcional.

Para fazer o template eu tive um trabalho de preguiçoso.
Copiei o arquivo registrar.html, que criei para a view registrar(), que está dentro da pasta templates, e colei renomeando-o para logar.html.
Por que isso?

<form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value='Logar' />
</form>

O código para exibir o formulário de registro e o código para exibir o formulário de login é o mesmo.
A única diferença se dá no botão de submit.
Em um, o botão chama-se ‘registrar’. No outro, o botão chama-se ‘logar’.

Esse Django é porreta! 😀

O código fonte atual do projeto está aqui:
https://github.com/frenetic/django-wars

3 thoughts on “Django Wars [Parte 05]: Formulário de login

  1. Olá, gostaria de saber como faço para logar um usuário sendo que os dados de user e senha se encontram em um banco pertencente a outra aplicação, se o django possui alguma ferramenta pra capturar esses 2 campos e fazer a validação na minha app… obrigado

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *