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
O Django possui uma conjunto de ferramentas para facilitar a criação e autenticação de usuários, a biblioteca django.contrib.auth.
Um problema a menos para nos preocuparmos :D.
Nesta etapa do desenvolvimento vamos utilizar dessa facilidade que o Django nos fornece para criar a tela de registro do usuário.
Para que possamos fazer uso desta facilidade, precisamos que a biblioteca django.contrib.auth e a biblioteca django.contrib.contenttypes estejam cadastradas no INSTALLED_APPS, dentro do arquivo settings.py (eles já vem ativados por padrão).
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)
Feito isso, precisamos que o Django crie no nosso banco de dados o conjunto de tabelas que essas bibliotecas precisam para funcionar.
Para isso rodamos o comando syncdb.
python manage.py syncdb
Com isso, o Django está pronto para cuidar dos registros e autenticações dos seus usuários.
Note também que o Django ajuda você a criar uma conta de superadmin.
Criando a tela de cadastro
Para facilitar a criação de formulários de cadastro, assim como formulários de logins e de trocas de senhas, o Django possui a seguinte biblioteca: django.contrib.auth.forms.
Nela, encontramos o formulário UserCreationForm que vamos utilizar para cadastrar os nossos novos usuários.
Para isso, vamos editar novamente o arquivo views.py criando uma função com o nome registrar().
# 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
# 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() })
Note que na views registrar estamos utilizando a função render() e na view index estamos utilizando render_to_response.
Isto se dá pois precisamos que nossa visão possua também o contexto da requisição, que está na variável request, para podermos utilizar a facilidade de crsf.
Esta facilidade será utilizada no template (logo abaixo).
Também, precisamos informar ao Django sobre a URL de cadastro do usuário.
Para isso, alteramos o arquivo urls.py
from django.conf.urls import patterns, include, url
import djangowars.views
urlpatterns = patterns('',
url(r'^$', djangowars.views.index),
url(r'^registrar/$', djangowars.views.registrar), # pagina de cadastro
)
Por fim, criamos o arquivo registrar.html, que irá conter o formulário de cadastro, dentro da pasta templates.
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type='submit' value='Registrar' />
</form>
Como sempre, o código atual do projeto pode ser visualizado em:
https://github.com/frenetic/django-wars
Esse código aí tem um erro, vc deve criar uma instancia do UserCreationForm antes do teste de post, caso contrário o form não será renderizado! 😀
Mas tá lá na linha 17…
Pelo menos, quando desenvolvi esse projeto ele funcionou tranquilo 😀
Olá, tudo bem?
Primeiramento gostaria de agradecer pelo ótimo tutorial, nunca imaginei que daria pra construir um web game com django.
Estou tendo o seguinte erro:
ttributeError at /registrar
‘module’ object has no attribute ‘registrar’
Request Method: GET
Request URL: http://127.0.0.1:8000/registrar
Django Version: 1.4
Exception Type: AttributeError
Exception Value:
‘module’ object has no attribute ‘registrar’
Exception Location: /home/natan/django_wars/django_wars/urls.py in , line 11
Python Executable: /home/natan/project_django_wars/bin/python
Python Version: 2.7.5
Segue meu código: https://github.com/NatanCC/django_wars
O seu arquivo Views não possui uma função para Registrar.
Veja como é o código:
https://github.com/frenetic/django-wars/blob/1a4f9196ff2c972312b8d956e969453bc9076eb2/djangowars/views.py
Qual o tema do sublime de você está usando?
Olá Cardoso.
Eu não utilizo Sublime.
Eu utilizo PyCharm ou Atom.
put’s muito bom também uso o atom, dai percebi você também deve usar linux!
Gostei desse material, parabéns!!!
Muito bem explicado!
se fazer vídeo aulas ficaria melhor ainda!
Um dia, quem sabe…