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…