Apresenta algumas das principais características do Django. Mostra os conceitos por trás do framework e ilusta como o desenvolvedor consegue utilizar suas funcionalidades para produzir código mais rápido porém sem abrir mão da qualidade.
Django para desenvolvimento web; porque ser repetitivo é chato.
1. Django para desenvolvimento web
Porque ser repetitivo ´ chato.
e
Arthur Furlan (afurlan)
afurlan@afurlan.org
11 de Maio de 2010
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
2. ”Django focuses on automating as much as
possible and adhering to the DRY principle.”
Django Project - http://djangoproject.com
3. Mais sobre o Django
Framework web voltado ao desenvolvimento ´gil
a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
4. Mais sobre o Django
Framework web voltado ao desenvolvimento ´gil
a
Torna f´cil e r´pido tarefas simples do desenvolvimento web
a a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
5. Mais sobre o Django
Framework web voltado ao desenvolvimento ´gil
a
Torna f´cil e r´pido tarefas simples do desenvolvimento web
a a
Escrito com a linguagem de programa¸˜o Python
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
6. Mais sobre o Django
Framework web voltado ao desenvolvimento ´gil
a
Torna f´cil e r´pido tarefas simples do desenvolvimento web
a a
Escrito com a linguagem de programa¸˜o Python
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
7. Mais sobre o Django
Framework web voltado ao desenvolvimento ´gil
a
Torna f´cil e r´pido tarefas simples do desenvolvimento web
a a
Escrito com a linguagem de programa¸˜o Python
ca
Django Reinhardt
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
8. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
9. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
10. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
11. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
12. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
13. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flex´ de URLs
ıvel
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
14. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flex´ de URLs
ıvel
Sistema de cache
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
15. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flex´ de URLs
ıvel
Sistema de cache
Internacionaliza¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
16. Principais caracter´
ısticas
Desenvolvimento em Camadas (MVC)
Mapeamento Objeto Relacional (ORM)
Desenvolvimento dirigido a testes (TDD)
Interface administrativa
Sistema de templates
Mapeamento flex´ de URLs
ıvel
Sistema de cache
Internacionaliza¸˜o
ca
Reusabilidade (DRY)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
17. O padr˜o MVC no Django
a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
18. O padr˜o MVC no Django
a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
19. O padr˜o MVC no Django
a
MVC X MTV
Model (Model)
Template (View)
View (Controller)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
20. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
21. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Um projeto pode conter v´rias aplica¸˜es
a co
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
22. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Um projeto pode conter v´rias aplica¸˜es
a co
Uma aplica¸˜o pode fazer parte de v´rios projetos
ca a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
23. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Um projeto pode conter v´rias aplica¸˜es
a co
Uma aplica¸˜o pode fazer parte de v´rios projetos
ca a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
24. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Um projeto pode conter v´rias aplica¸˜es
a co
Uma aplica¸˜o pode fazer parte de v´rios projetos
ca a
O que ´ um projeto Django?
e
Uma instˆncia de Django: configura¸˜es, aplica¸˜es, etc.
a co co
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
25. Projetos e aplica¸oes
c˜
Sistemas em Django s˜o divididos em projetos e aplica¸˜es
a co
Um projeto pode conter v´rias aplica¸˜es
a co
Uma aplica¸˜o pode fazer parte de v´rios projetos
ca a
O que ´ um projeto Django?
e
Uma instˆncia de Django: configura¸˜es, aplica¸˜es, etc.
a co co
O que ´ uma aplica¸˜o Django?
e ca
Qualquer trecho de c´digo que possa ser reutilizado
o
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
26. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
27. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
28. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
Vocˆ define suas regras de neg´cio no modelo
e o
29. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
Vocˆ define suas regras de neg´cio no modelo
e o
Camadas superiores herdam essas informa¸˜es
co
30. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
Vocˆ define suas regras de neg´cio no modelo
e o
Camadas superiores herdam essas informa¸˜es
co
Atributos
31. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
Vocˆ define suas regras de neg´cio no modelo
e o
Camadas superiores herdam essas informa¸˜es
co
Atributos
Informa¸˜es
co
32. Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
a
O Django ´ um framework database-driven
e
Vocˆ define suas regras de neg´cio no modelo
e o
Camadas superiores herdam essas informa¸˜es
co
Atributos
Informa¸˜es
co
Valida¸˜es
co
34. Criando um novo projeto
Um Cat´logo de Contatos:
a
$ django-admin startproject catalogo
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
35. Criando um novo projeto
Um Cat´logo de Contatos:
a
$ django-admin startproject catalogo
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
36. Come¸ando pelo come¸o...
c c
Configurando e criando o banco de dados:
$ vim settings.py
...
DATABASE_ENGINE = ’ p o s tg r e sq l _ ps y c op g 2 ’
DATABASE_NAME = ’ catalogo ’
DATABASE_USER = ’ catalogo ’
DATABASE_PASSWOR D = ’ ****** ’
DATABASE_HOST = ’ ’
DATABASE_PORT = ’ ’
...
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
37. Come¸ando pelo come¸o...
c c
Configurando e criando o banco de dados:
$ vim settings.py
...
DATABASE_ENGINE = ’ p o s tg r e sq l _ ps y c op g 2 ’
DATABASE_NAME = ’ catalogo ’
DATABASE_USER = ’ catalogo ’
DATABASE_PASSWOR D = ’ ****** ’
DATABASE_HOST = ’ ’
DATABASE_PORT = ’ ’
...
$ ./manage.py syncdb
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
38. Digam ”Ol´” para o Django!
a
Acessando o sistema:
$ ./manage.py runserver
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
39. Digam ”Ol´” para o Django!
a
Acessando o sistema:
$ ./manage.py runserver
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
40. Criando uma aplica¸˜o
ca
Nossa primeira (e, nesta apresenta¸˜o, unica)
ca ´ aplica¸˜o:
ca
$ django-admin startapp contatos
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
41. Criando uma aplica¸˜o
ca
Nossa primeira (e, nesta apresenta¸˜o, unica)
ca ´ aplica¸˜o:
ca
$ django-admin startapp contatos
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
42. Criando um novo modelo
Criando o primeiro modelo da aplica¸˜o
ca
1 from django . db import models
2 from django . core . urlresolvers import reverse
3
4 class Pessoa ( models . Model ):
5 name = models . CharField ( max_length =60)
6 email = models . EmailField ( unique = True )
7
8 def __unicode__ ( self ):
9 return ’ "% s " <%s > ’ % ( self . name , self . email )
10
11 def get_absolute_url ( self ):
12 return reverse ( ’ pessoa - view ’ , args =[ self . id ])
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
43. Criando um novo modelo
Criando o primeiro modelo da aplica¸˜o
ca
1 from django . db import models
2 from django . core . urlresolvers import reverse
3
4 class Pessoa ( models . Model ):
5 name = models . CharField ( max_length =60)
6 email = models . EmailField ( unique = True )
7
8 def __unicode__ ( self ):
9 return ’ "% s " <%s > ’ % ( self . name , self . email )
10
11 def get_absolute_url ( self ):
12 return reverse ( ’ pessoa - view ’ , args =[ self . id ])
Criando o formul´rio para o modelo Pessoa
a
1 from django . forms import ModelForm
2 from catalogo . apps . contatos . models import Pessoa
3
4 class PessoaForm ( ModelForm ):
5 class Meta :
6 model = Pessoa
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
44. Criando a primeira view
Listagem dos objetos
from django . shortcuts import re n de r_ t o_ r es po n se
from django . template import RequestContext
from catalogo . apps . contatos . models import Pessoa
def pessoa_list ( request ):
# obtem a lista de pessoas
object_list = Pessoa . objects . all ()
# envia os dados para o template
return r e nd e r_ to _ re s po ns e ( ’ pessoa_list . html ’ , locals () ,
context_instance = RequestContext ( request ))
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
45. Criando a primeira view
Listagem dos objetos
from django . shortcuts import re n de r_ t o_ r es po n se
from django . template import RequestContext
from catalogo . apps . contatos . models import Pessoa
def pessoa_list ( request ):
# obtem a lista de pessoas
object_list = Pessoa . objects . all ()
# envia os dados para o template
return r e nd e r_ to _ re s po ns e ( ’ pessoa_list . html ’ , locals () ,
context_instance = RequestContext ( request ))
Template
{% extends " base . html " %}
{% block title %} Pessoas {% endblock %}
{% block body %}
<a href = " {% url pessoa - insert %} " > Inserir </ a > < br / >
< br / >
{% for object in object_list %}
<a href = " {{ object . get_absolute_url }} " > {{ object }} </ a >
( <a href = " {% url pessoa - update object . id %} " > Editar </ a >
| <a href = " {% url pessoa - delete object . id %} " > Apagar </ a >) < br / >
{% endfor %}
{% endblock %}
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
46. Criando a segunda view
Exibi¸˜o dos objetos
ca
from django . shortcuts import render_to_response , ge t_o bjec t_o r_4 04
from django . template import RequestContext
from catalogo . apps . contatos . models import Pessoa
def pessoa_view ( request , object_id ):
# obtem a pessoa a ser exibida
object = get _ob jec t_o r_4 04 ( Pessoa , id = object_id )
# envia os dados para o template
return r e nd e r_ to _ re s po ns e ( ’ pessoa_view . html ’ , locals () ,
context_instance = RequestContext ( request ))
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
47. Criando a segunda view
Exibi¸˜o dos objetos
ca
from django . shortcuts import render_to_response , ge t_o bjec t_o r_4 04
from django . template import RequestContext
from catalogo . apps . contatos . models import Pessoa
def pessoa_view ( request , object_id ):
# obtem a pessoa a ser exibida
object = get _ob jec t_o r_4 04 ( Pessoa , id = object_id )
# envia os dados para o template
return r e nd e r_ to _ re s po ns e ( ’ pessoa_view . html ’ , locals () ,
context_instance = RequestContext ( request ))
Template
{% extends " base . html " %}
{% block title %} Exibir pessoa {% endblock %}
{% block body %}
<b > Nome : </ b > {{ object . name }} < br / >
<b > Email : </ b > {{ object . email }} < br / >
< br / >
<a href = " {% url pessoa - list %} " > Voltar </ a >
{% endblock %}
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
48. Criando a terceira view
Removendo objetos
from django . shortcuts import g et_ obj ect _or_ 404
from django . http import H t t p R e s p o n s e R e d i r e c t
from catalogo . apps . contatos . models import Pessoa
def pessoa_delete ( request , object_id ):
# obtem a pessoa a ser apagadao
object = get _ob jec t_o r_4 04 ( Pessoa , id = object_id )
object . delete ()
# redireciona para a listagem de objetos
return H t t p R e s p o n s e R e d i r e c t ( reverse ( ’ pessoa - list ’ ))
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
49. Criando a terceira view
Removendo objetos
from django . shortcuts import g et_ obj ect _or_ 404
from django . http import H t t p R e s p o n s e R e d i r e c t
from catalogo . apps . contatos . models import Pessoa
def pessoa_delete ( request , object_id ):
# obtem a pessoa a ser apagadao
object = get _ob jec t_o r_4 04 ( Pessoa , id = object_id )
object . delete ()
# redireciona para a listagem de objetos
return H t t p R e s p o n s e R e d i r e c t ( reverse ( ’ pessoa - list ’ ))
Template: n˜o tem
a
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
50. Criando a ultima view
´
Edi¸˜o de objetos
ca
from django . core . urlresolvers import reverse
from django . shortcuts import render_to_response , ge t_o bjec t_o r_4 04
from django . template import RequestContext
from django . http import H t t p R e s p o n s e R e d i r e c t
from catalogo . apps . contatos . models import Pessoa
from catalogo . apps . contatos . forms import PessoaForm
def pessoa_form ( request , object_id = None ):
# carrega o objeto ( se houver ) e inicializa o formulario
instance = ge t_ob jec t_o r_4 04 ( Pessoa , id = object_id ) if object_id else None
form = PessoaForm ( instance = instance )
# valida e altera o objeto ( caso a validacao esteja OK )
if request . method == ’ POST ’:
form = PessoaForm ( request . POST , instance = instance )
if form . is_valid ():
form . save ()
return H t t p R e s p o n s e R e d i r e c t ( reverse ( ’ pessoa - list ’ ))
# envia novamente para o formulario
return r e nd e r_ to _ re s po ns e ( ’ pessoa_form . html ’ , locals () ,
context_instance = RequestContext ( request ))
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
51. Criando a ultima view
´
Template
{% extends " base . html " %}
{% block title %}
{% if form . instance . id %} Editar {% else %} Inserir {% endif %} pessoa
{% endblock %}
{% block body %}
< form method = " post " action = " . " >
{{ form . as_p }}
< input type = " submit " value = " Enviar " / >
</ form >
{% endblock %}
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
52. Mapeando URLs para as views
URLs do projeto
1 from django . conf . urls . defaults import *
2
3 urlpatterns = patterns ( ’ ’ ,
4 url ( ’^ pessoa / ’ , include ( ’ catalogo . apps . contatos . urls ’)) ,
5 )
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
53. Mapeando URLs para as views
URLs do projeto
1 from django . conf . urls . defaults import *
2
3 urlpatterns = patterns ( ’ ’ ,
4 url ( ’^ pessoa / ’ , include ( ’ catalogo . apps . contatos . urls ’)) ,
5 )
URLs da aplica¸˜o
ca
1 from django . conf . urls . defaults import *
2
3 urlpatterns = patterns ( ’ catalogo . apps . contatos ’ ,
4 url ( ’^ $ ’ , ’ views . pessoa_list ’ , name = ’ pessoa - list ’) ,
5 url ( ’^ form / $ ’ , ’ views . pessoa_form ’ , name = ’ pessoa - insert ’) ,
6 url ( ’^ form /(? P < object_id > d +)/ $ ’ , ’ views . pessoa_form ’ ,
7 name = ’ pessoa - update ’) ,
8 url ( ’^ view /(? P < object_id > d +)/ $ ’ , ’ views . pessoa_view ’ ,
9 name = ’ pessoa - view ’) ,
10 url ( ’^ delete /(? P < object_id > d +)/ $ ’ , ’ views . pessoa_delete ’ ,
11 name = ’ pessoa - delete ’) ,
12 )
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
54. Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferen¸a?
c
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
55. Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferen¸a? O modelo
c
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
56. Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferen¸a? O modelo
c
Por que n˜o criar algo gen´rico?
a e
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
57. Reaproveitando mais, escrevendo menos...
Se eu quiser criar outro modelo, qual a diferen¸a? O modelo
c
Por que n˜o criar algo gen´rico?
a e
Generic Views!
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
58. Mapeando URLs para as views... com Generic Views
Mapeamento de URLs utilizando Generic Views
from django . conf . urls . defaults import *
from django . views . generic import create_update , list_detail
from models import Pessoa
list _dict_info = { ’ queryset ’: Pessoa . objects . all () , ’ template_name ’: ’ pessoa_list . html ’ }
view _dict_info = { ’ queryset ’: Pessoa . objects . all () , ’ template_name ’: ’ pessoa_view . html ’ }
i n s e r t _ d i ct_info = {
’ model ’: Pessoa , ’ po s t_ sa v e_ r ed ir e ct ’: ’/ pessoa / ’ ,
’ template_name ’: ’ pessoa_form . html ’ ,
}
d e l e t e _ d i ct_info = { ’ model ’: Pessoa , ’ p o s t _ d e l e t e _ r e d i r e c t ’: ’/ pessoa / ’ }
u p d a t e _ d i ct_info = insert_dict_info
urlpatterns = patterns ( ’ ’ ,
url ( ’^ $ ’ , list_detail . object_list , list_dict_info , name = ’ pessoa - list ’) ,
url ( ’^ form / $ ’ , create_update . create_object ,
insert_dict_info , name = ’ pessoa - insert ’) ,
url ( ’^ form /(? P < object_id > d +)/ $ ’ , create_update . update_object ,
update_dict_info , name = ’ pessoa - update ’) ,
url ( ’^ view /(? P < object_id > d +)/ $ ’ , list_detail . object_detail ,
view_dict_info , name = ’ pessoa - view ’) ,
url ( ’^ delete /(? P < object_id > d +)/ $ ’ , create_update . delete_object ,
delete_dict_info , name = ’ pessoa - delete ’) ,
)
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
59. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
60. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
61. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
62. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
63. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
64. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
65. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
66. Telas da aplica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
67. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
68. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
69. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜o
ca
Flatpages
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
70. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜o
ca
Flatpages
Sitemaps
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
71. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜o
ca
Flatpages
Sitemaps
Feeds
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
72. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
73. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Cache
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
74. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Cache
...
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
75. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Cache
...
Reposit´rios de aplica¸˜es
o co
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
76. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Cache
...
Reposit´rios de aplica¸˜es
o co
http://djangoapps.org
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
77. Isso ´ s´ a ponta do iceberg...
e o
O Django tem muitas outras coisas interessantes:
Administra¸˜oca
Flatpages
Sitemaps
Feeds
Autentica¸˜o
ca
Cache
...
Reposit´rios de aplica¸˜es
o co
http://djangoapps.org
http://pinaxproject.com
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web
78. Fim
Obrigado! D´vidas?
u
http://www.slideshare.net/afurlan/django-para-desenvolvimento-web-porque-ser-repetitivo-chato
http://tinyurl.com/afurlan-django
Arthur Furlan (afurlan)
afurlan@afurlan.org
http://blog.afurlan.org
twitter: @arthurfurlan
Arthur Furlan (afurlan) afurlan@afurlan.org Django para desenvolvimento web