Django Wars [Parte 04]: Cadastro de usuário

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

12 thoughts on “Django Wars [Parte 04]: Cadastro de usuário

  1. 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! 😀

  2. 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

Deixe uma resposta

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