Este documento apresenta o framework Django. Discute a história do Django, suas características e princípios, como configurar e criar projetos e aplicações no Django. O palestrante também mostra como criar modelos de dados, instalar aplicações e gerar bancos de dados no Django.
Django: desenvolvendo aplicações web de maneira simples e rápida!
1. Django
Desenvolvendo aplicações web de maneira simples e rápida!
Felipe B. Queiroz
felipe.buarque@gmail.com
III Jornada Acadêmica de Informática - JAINF
Novembro de 2010
1 / 42
2. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
3. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
4. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
5. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
6. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
7. Quem sou eu?
Felipe Buarque (wally)
Mestrando pela UFPE
Entusiasta de software livre
Entusiasta da linguagem Python
Blog: www.felipewally.com.br
Twitter: @felipe_wally
2 / 42
10. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
11. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
12. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
13. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
14. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
15. Um pouco de história...
Open Source script language
Guido Van Rossum (BDFL) - 1991
Monty Python’s Flying Circus
Ensino de programação
Simplicidade e fácil aprendizado
import this
5 / 42
16. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
17. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
18. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
19. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
20. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
21. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
22. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
23. Características
Interpretada (bytecode + VM)
Multiplataforma
Tipagem forte e dinâmica
OO + procedural + funcional
Extensa biblioteca padrão
Sintaxe elegante, simples e clara
Blocos de código são delimitados por identação
Interpretador interativo: Shell
6 / 42
33. O que é Django?!
“Django is a high-level Python Web framework that encourages
rapid development and clean, pragmatic design.”
(djangoproject.com)
“...and is not a CMS system.”
(wally)
11 / 42
36. Origens...
Criado por Adrian Holovaty - PyCon 2005
Criado para ser um gerenciador de notícias
Licença BSD 1
Mantido pela Django Software Foundation desde 2008
1
http://en.wikipedia.org/wiki/BSD_licenses
14 / 42
37. Origens...
Criado por Adrian Holovaty - PyCon 2005
Criado para ser um gerenciador de notícias
Licença BSD 1
Mantido pela Django Software Foundation desde 2008
1
http://en.wikipedia.org/wiki/BSD_licenses
14 / 42
38. Origens...
Criado por Adrian Holovaty - PyCon 2005
Criado para ser um gerenciador de notícias
Licença BSD 1
Mantido pela Django Software Foundation desde 2008
1
http://en.wikipedia.org/wiki/BSD_licenses
14 / 42
39. Origens...
Criado por Adrian Holovaty - PyCon 2005
Criado para ser um gerenciador de notícias
Licença BSD 1
Mantido pela Django Software Foundation desde 2008
1
http://en.wikipedia.org/wiki/BSD_licenses
14 / 42
41. Princípios (... ou filosofias)
DRY (Don’t Repeat Yourself)
Baixo acoplamento
Plugabilidade e reusabilidade
Escrever menos código possível
Desenvolvimento rápido!
16 / 42
42. Princípios (... ou filosofias)
DRY (Don’t Repeat Yourself)
Baixo acoplamento
Plugabilidade e reusabilidade
Escrever menos código possível
Desenvolvimento rápido!
16 / 42
43. Princípios (... ou filosofias)
DRY (Don’t Repeat Yourself)
Baixo acoplamento
Plugabilidade e reusabilidade
Escrever menos código possível
Desenvolvimento rápido!
16 / 42
44. Princípios (... ou filosofias)
DRY (Don’t Repeat Yourself)
Baixo acoplamento
Plugabilidade e reusabilidade
Escrever menos código possível
Desenvolvimento rápido!
16 / 42
45. Princípios (... ou filosofias)
DRY (Don’t Repeat Yourself)
Baixo acoplamento
Plugabilidade e reusabilidade
Escrever menos código possível
Desenvolvimento rápido!
16 / 42
46. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
47. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
48. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
49. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
50. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
51. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
52. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
53. Características
Convention over configuration
Mapeamento Objeto-Relacional (ORM)
Interface administrativa automática (CRUD)
Tratamento de formulários
URLs elegantes
Sistema de templates
Sistema de cache
Internacionalização (i18n)
17 / 42
62. Arquivos de configuração
__init__.py - indica um pacote python
manager.py - tarefas administrativas
settings.py - configurações do projeto
urls.py - mapeamento das URLs do projeto
24 / 42
63. Vamos fazer algo...
No settings.py:
DATABASE.ENGINE = ‘django.db.backends.sqlite3’
DATABASE.NAME = ‘mural.db’
No diretório do projeto:
python manage.py runserver
No browser:
http://localhost:8000
25 / 42
64. Vamos fazer algo...
No settings.py:
DATABASE.ENGINE = ‘django.db.backends.sqlite3’
DATABASE.NAME = ‘mural.db’
No diretório do projeto:
python manage.py runserver
No browser:
http://localhost:8000
25 / 42
65. Vamos fazer algo...
No settings.py:
DATABASE.ENGINE = ‘django.db.backends.sqlite3’
DATABASE.NAME = ‘mural.db’
No diretório do projeto:
python manage.py runserver
No browser:
http://localhost:8000
25 / 42
68. Arquivos da aplicação
models.py - abstração do banco de dados / entidades do
sistema
tests.py - testes da aplicação
views.py - controller da aplicação
28 / 42
70. Instalando a aplicação...
No settings.py:
INSTALLED_APPS = (... ‘jainf.mural’)
Gerando o banco de dados:
python manage.py syncdb
30 / 42
71. Instalando a aplicação...
No settings.py:
INSTALLED_APPS = (... ‘jainf.mural’)
Gerando o banco de dados:
python manage.py syncdb
30 / 42
72. Django Admin
Aplicação plugável que vem por padrão no framework
Interface administrativa gerada com muito pouco trabalho
Acelera a produtividade mas perde em flexibilidade
31 / 42
73. Configurando o Django Admin...
Adicionar a aplicação django.contrib.admin ao
INSTALLED_APPS
Descomentar as seguintes linhas no arquivo urls.py:
# from django.contrib import admin
# admin.autodiscover()
# (r‘âdmin/’, include(admin.site.urls)
32 / 42
74. Configurando o Django Admin...
Adicionar a aplicação django.contrib.admin ao
INSTALLED_APPS
Descomentar as seguintes linhas no arquivo urls.py:
# from django.contrib import admin
# admin.autodiscover()
# (r‘âdmin/’, include(admin.site.urls)
32 / 42
75. Registrando o modelo no Admin...
Criar o arquivo admin.py dentro do diretório da aplicação
Sincronizar o banco de dados
No browser:
http://localhost:8000/admin
33 / 42
76. Registrando o modelo no Admin...
Criar o arquivo admin.py dentro do diretório da aplicação
Sincronizar o banco de dados
No browser:
http://localhost:8000/admin
33 / 42
77. Registrando o modelo no Admin...
Criar o arquivo admin.py dentro do diretório da aplicação
Sincronizar o banco de dados
No browser:
http://localhost:8000/admin
33 / 42
78. Generic views
Views genéricas disponibilizadas junto com o framework
Realizam ações básicas: listar, detalhar, cadastrar, editar,
excluir
34 / 42
80. Templates
Linguagem simples para desenvolvimento de templates
Utilização de tags e filters
Tag block proporciona reusabilidade de código
36 / 42
81. Configurando os templates...
Criar uma pasta chamada ‘templates’ na raiz do projeto
Adicionar o seguinte código ao settings.py:
import os
PROJECT_ROOT_PATH =
os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS =
(os.path.abspath(os.path.join(PROJECT_ROOT_PATH,
‘templates’)))
37 / 42
82. Configurando os templates...
Criar uma pasta chamada ‘templates’ na raiz do projeto
Adicionar o seguinte código ao settings.py:
import os
PROJECT_ROOT_PATH =
os.path.dirname(os.path.abspath(__file__))
TEMPLATE_DIRS =
(os.path.abspath(os.path.join(PROJECT_ROOT_PATH,
‘templates’)))
37 / 42
83. Configurando os templates...
Criar o arquivo templates/blog/artigo_list.html e
adicionar o conteúdo:
No browser:
http://localhost:8000
38 / 42
84. Configurando os templates...
Criar o arquivo templates/blog/artigo_list.html e
adicionar o conteúdo:
No browser:
http://localhost:8000
38 / 42