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
return render_to_response("index.html")
# pagina de cadastro de jogador
# 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
# 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
if request.method == 'POST':
form = AuthenticationForm(data=request.POST) # Veja a documentacao desta funcao
#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
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()})
# 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()})
# 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?
<input type='submit' value='Logar' />
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Logar' />
</form>
<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
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
Muito bons os posts, parabéns! A proposito, que IDE é esta que você usa?
Abraço!
No trabalho uso Komodo EDIT.
Em casa, uso PHPStorm e PyCharm (comprei key de profissional liberal para os dois :D)