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
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)