Criado dentro do Lawrence Journal-World por Adrian Holovaty.
Adrian era apaixonado por música e seu sonho era ser jornalista. Mas como nem tudo é perfeito ele trabalhava em um jornal como desenvolvedor. Já cansado de ter que refazer muitas coisas na sua rotina diária, ao conhecer Python depois de estudar o livro Mergulhando no Python, decidiu implementar um framework que facilitasse sua vida.
Django Reinhardt – Grande nome do Jazz.
Com o framework “pronto”, a sua paixão pela música fez com que ele colocasse o nome de Django, em homenagem ao grande nome do Jazz Django Reinhardt.
Framework Web de alto nível escrito em Python.
Python é uma linguagem de altíssimo nível, orientada a objetos, dinâmica, interativa e com muitas outras qualidades. Muitas empresas já se tornaram inteligentes o suficiente para ver que se trata de uma linguagem séria e que vale a pena implementar seus softwares com a robustez, elegância e facilidade que o Python proporciona.
O Django proporciona o desenvolvimento rápido de aplicações, fazendo com que o desenvolvedor se preocupe menos com coisas redundantes. O framework Django automatiza coisas repetitivas. Coisas como formulários, enquetes, feeds e qualquer outro tipo de aplicação que você tenha que fazer poderá ser aproveitada em outros projetos, pois o Django tem em sua filosofia que toda aplicação pode e deve ser plugável.
Como trabalha o Django?
Ao se trabalhar com Django, utlizamos o desenvolvimento em camadas, que facilita tanto o desenvolvimento quanto a manutenção de qualquer sistema. Sempre que ouvimos falar em camadas nos vem à cabeça o padrão MVC. O Django utiliza este mesmo padrão, mas por convenção os idealizadores do Django optaram por chamar as camadas que o Django trabalha por MTV, que são os já conhecidos Models, Templates, e Views.
Veremos agora um pequeno resumo de como funcionam estas camadas.
MODELS
Os Models são os nossos modelos de dados. Com eles fazemos o Mapeamento Objeto Relacional do nosso banco de dados. Todas as classes criadas são transformadas em tabelas no nosso banco, e durante todo o desenvolvimento não precisaremos digitar praticamente nenhuma string SQL.
class Exemplo(models.Model):
pass
TEMPLATES
Responsáveis pela “apresentação” do site, os templates são uma mistura de elementos HTML e códigos Python.
Os códigos Python são compostos por {% instruções %} e {{ variáveis }}.
VIEWS
Funcionam como o “controller” da aplicação. Aqui definimos o que será passado para os templates apresentarem em suas páginas. Basicamente aqui nas views criamos funções e definimos as páginas que retornarão os resultados destas funções.
def index(request):
lista = Emprego.objects.order_by(‘-publicado’)[:10]
return render_to_response(‘vagas/index.html’, {‘lista’:lista})
A documentação é importante?
O Django possui uma documentação muito boa. E a comunidade participa ativamente em gerar novos exemplos, tutoriais, video aulas e afins. Como todas as ferramentas e softwares livres que existem hoje, o primeiro meio a se recorrer é sem dúvida nenhuma a documentação oficial do projeto.
O Django possui ainda diversos livros (em inglês) que discorrem muito bem sobre as funcionalidades do framework. Em breve, também espero que tenhamos livros no nosso português, para facilitar ainda mais o acesso aos brasileiros para esse fantástico framework.
Mercado de Trabalho
Há vagas!
http://www.pythonbrasil.com.br/moin.cgi/OportunidadesDeEmprego (42 Vagas)
http://djangogigs.com/ (242 Vagas)
http://simonwillison.net/2008/Jan/18/django/ (74 Vagas)
http://www.python.org/community/jobs/ (221 Vagas)
As vagas oferecidas são muitas, e são geralmente para projetos grandes, com vários desenvolvedores atuando diretamente no desenvolvimento.
Alguns exemplos de sites/projetos que utilizam Django.
Instalação
- Python 2.3+
- Database: PostgreSQL, MySQL, SQLite3
- Django 1.0 >> Debian like -> apt-get install python-django
Outros GNU’s -> http://www.djangoproject.com/download/
-> tar xvzf Django-1.0.tar.gz
-> cd Django-1.0
-> python setupt.py install (como root)
Prática
Iremos agora desenvolver uma aplicação simples, para começarmos a nos familiarizar com os projetos e aplicações com Django.
Nosso projeto será um site de uma empresa que anuncia vagas de emprego. Nele ainda haverá uma área administrativa onde o administrador gerenciará as vagas postadas no site.
A aplicação será desenvolvida em 11 passos:
Passo 1:
Abra seu gerenciador de banco de dados preferido e crie um banco chamado “empresa”.
– No meu caso, eu utilizei o phpMyAdmin para criar o banco no MySQL. Mas você pode utilizar qualquer outro de sua preferência, como o SQLite, PostgreSQL, Oracle…
Passo 2:
Abra o terminal, entre no seu “home” e crie um diretório chamado “django_projetos” com o seguinte comando:
1 – cd ~
2 – mkdir django_projetos
Passo 3:
Ainda com o terminal aberto digite os seguintes comandos:
- cd django_projetos # Comando para entrar no diretório “django_projetos”
- django-admin.py startproject empresa # comando do django para criar projetos
- cd empresa # após criar o projeto “empresa” entraremos no diretório criado
- ls # comando para listarmos o conteúdo do diretório.
Esta é a estrutura encontrada no diretório do projetos que acabamos de criar. Podemos ver neste caso que a estrutura de um projeto no Django é bem enxuta. 🙂
Sobre a estrutura criada:
Até o momento descobrimos que para se criar um projeto com Django utilizamos o comando django-admin.py + nomeDoProjeto. No nosso exemplo o comando foi django-admin.py empresa.
Descobrimos também que ao se criar um projeto o Django cria um diretório com o nome do projeto e dentro deste diretório ele coloca uma estrutura básica de arquivos.
O arquivo “settings.py” é o arquivo que utilizamos para configurar as informações do nosso banco de dados (nome do banco, usuário, senha) e algumas coisas mais que veremos mais à frente.
O arquivo “manage.py“, como o próprio nome sugere, serve para gerenciarmos nosso projeto. Trabalharemos bastante com ele durante o desenvolvimento do projeto.
O arquivo “urls.py” é o arquivo responsável pelas rotas do nosso site. Veremos mais detalhes também à frente.
O arquivo “__init__.py” se você abri-lo verá que não tem nada escrito dentro dele, mas ele simplesmente diz ao Python que aquele projeto se trata de um pacote.
Passo 4:
Ainda dentro do diretório do nosso projeto, criaremos nossa aplicação com o seguinte comando:
django-admin.py startapp vagas
Entraremos dentro do diretório da aplicação criada:
cd vagas
Listaremos os arquivos contidos na aplicação.
ls
Como vimos acima, da mesma forma que o Django cria uma estrutura básica para nossos projetos, ele também cria uma estrutura para nossas aplicações. Veremos agora para que serve cada arquivo criado.
O arquivo “models.py” serve para criarmos nossas classes de dados. Veremos que é uma das partes mais legais de se trabalhar com Django. Falaremos mais sobre este arquivo mais tarde.
O arquivo “views.py” é utilizado para criarmos as views da nossa aplicação (difícil adivinhar, não?), mas pensando no conceito MVC este seria o “controller” da nossa aplicação. Lembrando que o Django colocou a nomenclatura de suas camadas de MTV.
O arquivo “__init__.py” assim como no arquivo de mesmo nome do nosso projeto não tem nada escrito dentro, mas serve para dizer para o Python que nossa aplicação é um pacote.
Chegou a hora de fazermos algo de útil com os arquivos que o Django gerou. Daqui para frente iremos codificar. Para isso eu irei utilizar o Komodo Edit, que para quem não conhece é um excelente editor de códigos para o GNU/Linux, e pode ser baixado gratuitamente no link abaixo.
Claro que você pode utilizar qualquer outro editor, eu aconcelho o Komodo Edit que é gratuito e excelente, não somente para Python, mas também para Ruby, PHP e outras mais.
Passo 5:
Como vimos nos passos anteriores, o Django trabalha com o padrão MVC, ou melhor dizendo MTV, sendo que o “M” são os Models, o “T” são os Templates, e o V são as Views.
Na nossa estrutura atual temos configurado da seguinte forma:
/home/usuario/django_projetos/empresa/vagas/
Sendo que o diretório “django_projetos” foi criado por nós dentro do diretório “home” do usuário.
O diretório “empresa” foi criado prlo Django, quando executamos o comando para criação de projetos “django-admin.py startproject empresa“.
O diretório “vagas” foi também criado pelo Django quando executamos o comando para criação de aplicações “django-admin.py startapp vagas” .
Vamos agora, criar o diretório onde estarão os Templates do nosso projeto.
Entre no diretório do nosso projeto e crie uma pasta chamada “templates”
Feito isso, a estrutura do nosso projeto deverá estar desta forma:
Sendo que os diretórios “vagas” e “templates” estão no mesmo nível, dentro do diretório “empresa“.
Bem, feito isso, com o Komodo edit, criaremos um novo projeto, da seguinte forma:
Menu “file” -> “new” -> “new project”
Na caixa de seleção que aparece, selecionaremos o diretório do nosso projeto, que fica em
“/home/usuario/django_projetos/empresa“, e daremos o nome do projeto de “empresa“.
Com isso, temos nosso projeto criado e aberto com o Komodo Edit. Já podemos editar o código.
Abrimos o arquivo “settings.py” e alteramos as linhas descritas abaixo.
DATABASE_ENGINE = 'mysql' # Estou utilizando o MySql, mas pode ser utilizado outro.
DATABASE_NAME = 'empresa' # Aqui vai o nome do banco que criamos no início.
DATABASE_USER = 'root' # Nome de usuário do banco de dados.
DATABASE_PASSWORD = '123' # Senha de usuário do banco de dados.
DATABASE_HOST = 'localhost' # Endereço do servidor de banco de dados.
LANGUAGE_CODE = 'pt-br' # Sim, o Django dá suporte ao Português do Brasil.
TEMPLATE_DIRS = ('/home/usuario/django_projetos/empresa/templates/',)
# Nesta parte em especial, vemos as aplicações que já vêm por padrão instaladas pelo Django, sendo que acrescentamos apenas o conteúdo em azul.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'django.contrib.admindocs',
'empresa.vagas',
)
Não se preocupem com o resto do arquivo no momento. Aos poucos iremos conhecer mais a fundo cada opção e artifícios que podemos acrescentar ainda aqui.
No momento saiba apenas que as aplicaçõe que nós adicionamos há pouco são, em ordem, a Administração do sistema (django.contrib.admin), a documentação para o Administrador (django.contrib.admindocs) e nossa aplicação criada, no caso específico, é a aplicação “vagas” que está no projeto “empresa” (empresa.vagas).
Passo 6:
Legal, nossa aplicação já está configurada. Mas ainda não vimos nada de anormal, ou de excepcional. Mas agora, meus amigos, o Django começará a mostrar seu poder!
Começaremos agora a criar nossos modelos de dados. Abriremos o arquivo “models.py” que se encontra em: “/vagas/models.py“
O arquivo models.py está praticamente vazio, contando apenas com duas linhas, sendo ainda uma delas um comentário.
Deixaremos ele para que fique da seguinte forma:
from django.db import models
class Local(models.Model):
cidade = models.CharField(max_length=50)
estado = models.CharField(max_length=50, null=True, blank=True)
pais = models.CharField(max_length=50)
def __unicode__(self):
if self.estado:
return "%s, %s, %s" % (self.cidade, self.estado, self.pais)
else:
return "%s, %s" % (self.cidade, self.pais)
class Emprego(models.Model):
publicado = models.DateField()
titulo = models.CharField(max_length=50)
descricao = models.TextField()
local = models.ForeignKey(Local)
def __unicode(self):
return "%s (%s)" % (self.titulo, self.local)
Bom, comentando um pouco o código em azul acima. Dessa forma criamos as classes que logo se tornarão tabelas no nosso banco de dados.
A classe criada com o nome “Local“, terá 3 campos, sendo eles “cidade“, “estado“, “pais“. Podem ver também que todos os campos foram definidos como “CharField” com um tamanho definido em 50 caracteres. Podemos ver, ainda, que o campo “estado” aceita valor em branco, ou valores nulos, ou seja, não é um campo obrigatório. Daqui a pouco, ao “pedirmos” para o Django transformar nossas classes em tabelas no banco, ele criará uma chave primária para a dita cuja.
Logo abaixo dela, mas ainda fazendo parte da mesma, criamos uma função, que simplesmente diz o seguinte:
“Ao ser solicitado as informações contidas aqui na tabela “Local “, caso exista o campo “estado“, retorne cidade, estado e pais (Lembram que o campo estado não é obrigatório?). Caso o campo “estado” não exista, retorne cidade e pais.”
A outra classe foi criada com o nome “Emprego” e tem 4 campos, sendo eles “publicado” do tipo DateField, “titulo” do tipo já conhecido CharField, “descricao” do tipo TextField. Agora reparem o último campo, chamado de “local” que é do tipo ForeignKey, e referencia a outra classe, Local. Ou seja, esta tabela receberá a chave primária da primeira como chave estrangeira para ela, formando assim uma referência entre as duas tabelas.
Assim como na primeira classe, nesta também temos definida uma função, que neste caso apenas diz que:
“Ao solicitar informações desta classe, retorne os campos “titulo” e “local”.
Parte 7:
Bom, criamos nossos modelos de dados. Eles já nos dão uma boa idéia de como o Django trabalha. Mas ainda não vimos o poder do Django.
Então vamos lá. Poder nº 1
Abra o terminal e vá até o diretório do nosso projeto: “/home/usuario/django_projetos/empresa“
Digite: python manage.py sql vagas
Viram algo?…Se fizemos tudo certo até o momento o Django nos apresentou a estrutura SQL que ele fez para nosso modelo de dados.
Legal isso, não? Só não podemos esquecer que nada foi feito ainda. Ele apenas nos apresentou a estrutura SQL do nosso modelo de dados com o comando python manage.py sql vagas
Abram o PHPMyAdmin e vejam a estrutura do banco “empresa“, estará vazio ainda, mas por pouco tempo.
Ainda com o terminal aberto digite: python manage.py syncdb
O Django criará a as tabelas no banco com a estrutura de todas as aplicações descritas no arquivo “settings.py” na seção “INSTALLED_APPS“. Ele perguntará também se você quer criar um usuário que será o administrador do sistema, confirme, crie o administrador, forneça uma senha e lembre-se dela, pois iremos precisar mais à frente.
Repare também que apesar de termos criado apenas 2 classes de dados, o Django cria uma estrutura bem maior no nosso banco de dados, como podemos ver ao acessar o PHPMyAdmin novamente e olharmos a estrutura do nosso banco.
Isso foi feito porque no arquivo “settings.py” estão adicionadas várias aplicações no nosso projeto, como por exemplo controle de sessions, administração e, claro, nossa aplicação “vagas”.
Testaremos agora nosso projeto. Estando no terminal no diretório do nosso projeto “/home/usuario/django_projetos/empresa” digite: python manage.py runserver
Agora abrimos o browser e digitamos: http://127.0.0.1:8000
Se nada deu errado até o momento, uma tela de congratulações do Django estará aberta.
Como podemos ver, nosso projeto Django já está rodando. Como não temos nenhuma página principal estabelecida, o Django nos mostra uma página de congratulações.
Passo 8:
Bem, então vimos algo relativamente poderoso que o Django fez. Mas foi apenas o primeiro “poder” do Django. Agora veremos uma das coisas mais legais que o Django traz na criação dos nossos projetos, a interface administrativa.
Com o Komodo Edit aberto, clique com o botão direito no diretório da nossa aplicação “vagas“, crie um novo arquivo e dê o nome para ele de “admin.py“
Abra o arquivo criado agora para acrescentarmos algumas linhas de código.
from empresa.vagas.models import Local
from empresa.vagas.models import Emprego
from django.contrib import admin
class LocalAdmin(admin.ModelAdmin):
pass
class EmpregoAdmin(admin.ModelAdmin):
pass
admin.site.register(Local, LocalAdmin)
admin.site.register(Emprego, EmpregoAdmin)
Já dissemos pro Django que queremos a interface administrativa para nosso projeto, porém ainda não configuramos a roda da nossa da nossa aplicação.
Faremos o seguinte então:
Abram o arquivo “urls.py” editem para que se pareça com o abaixo.
from django.conf.urls.defaults import *
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('empresas.vagas.views',
# Example:
# Uncomment the line below to show the static files (css, js, png)
# (r'^media/(?P<path>.*)