Sie sind auf Seite 1von 78

Django para desenvolvimento web

Porque ser repetitivo e chato.

Arthur Furlan (afurlan) afurlan@afurlan.org

11 de Maio de 2010

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Django focuses on automating as much as possible and adhering to the DRY principle.
Django Project - http://djangoproject.com

Mais sobre o Django


Framework web voltado ao desenvolvimento agil

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Mais sobre o Django


Framework web voltado ao desenvolvimento agil Torna f acil e r apido tarefas simples do desenvolvimento web

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Mais sobre o Django


Framework web voltado ao desenvolvimento agil Torna f acil e r apido tarefas simples do desenvolvimento web Escrito com a linguagem de programa c ao Python

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Mais sobre o Django


Framework web voltado ao desenvolvimento agil Torna f acil e r apido tarefas simples do desenvolvimento web Escrito com a linguagem de programa c ao Python

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Mais sobre o Django


Framework web voltado ao desenvolvimento agil Torna f acil e r apido tarefas simples do desenvolvimento web Escrito com a linguagem de programa c ao Python

Django Reinhardt

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Principais caracter sticas


Desenvolvimento em Camadas (MVC)

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Principais caracter sticas


Desenvolvimento em Camadas (MVC) Mapeamento Objeto Relacional (ORM)

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

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

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

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

Principais caracter sticas


Desenvolvimento em Camadas (MVC) Mapeamento Objeto Relacional (ORM) Desenvolvimento dirigido a testes (TDD) Interface administrativa Sistema de templates Mapeamento ex vel de URLs

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Principais caracter sticas


Desenvolvimento em Camadas (MVC) Mapeamento Objeto Relacional (ORM) Desenvolvimento dirigido a testes (TDD) Interface administrativa Sistema de templates Mapeamento ex vel de URLs Sistema de cache

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Principais caracter sticas


Desenvolvimento em Camadas (MVC) Mapeamento Objeto Relacional (ORM) Desenvolvimento dirigido a testes (TDD) Interface administrativa Sistema de templates Mapeamento ex vel de URLs Sistema de cache Internacionaliza c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Principais caracter sticas


Desenvolvimento em Camadas (MVC) Mapeamento Objeto Relacional (ORM) Desenvolvimento dirigido a testes (TDD) Interface administrativa Sistema de templates Mapeamento ex vel de URLs Sistema de cache Internacionaliza c ao Reusabilidade (DRY)

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

O padr ao MVC no Django

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

O padr ao MVC no Django

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

O padr ao MVC no Django

MVC X MTV Model (Model) Template (View) View (Controller)

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes Um projeto pode conter v arias aplica c oes

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes Um projeto pode conter v arias aplica c oes Uma aplica c ao pode fazer parte de v arios projetos

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes Um projeto pode conter v arias aplica c oes Uma aplica c ao pode fazer parte de v arios projetos

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes Um projeto pode conter v arias aplica c oes Uma aplica c ao pode fazer parte de v arios projetos

O que e um projeto Django? Uma inst ancia de Django: congura c oes, aplica c oes, etc.

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Projetos e aplica co es
Sistemas em Django s ao divididos em projetos e aplica c oes Um projeto pode conter v arias aplica c oes Uma aplica c ao pode fazer parte de v arios projetos

O que e um projeto Django? Uma inst ancia de Django: congura c oes, aplica c oes, etc.

O que e uma aplica c ao Django? Qualquer trecho de c odigo que possa ser reutilizado

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como?

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven Voc e dene suas regras de neg ocio no modelo

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven Voc e dene suas regras de neg ocio no modelo Camadas superiores herdam essas informa c oes

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven Voc e dene suas regras de neg ocio no modelo Camadas superiores herdam essas informa c oes
Atributos

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven Voc e dene suas regras de neg ocio no modelo Camadas superiores herdam essas informa c oes
Atributos Informa c oes

Ent ao o Django me ajuda a ser menos repetitivo... Ok, como? O Django e um framework database-driven Voc e dene suas regras de neg ocio no modelo Camadas superiores herdam essas informa c oes
Atributos Informa c oes Valida c oes

Talk is cheap, show me the code!

Criando um novo projeto


Um Cat alogo de Contatos: $ django-admin startproject catalogo

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando um novo projeto


Um Cat alogo de Contatos: $ django-admin startproject catalogo

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Come cando pelo come co...


Congurando 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

Come cando pelo come co...


Congurando 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

Digam Ol a para o Django!


Acessando o sistema: $ ./manage.py runserver

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Digam Ol a para o Django!


Acessando o sistema: $ ./manage.py runserver

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando uma aplica c ao


Nossa primeira
(e, nesta apresenta c ao, u nica)

aplica c ao:

$ django-admin startapp contatos

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando uma aplica c ao


Nossa primeira
(e, nesta apresenta c ao, u nica)

aplica c ao:

$ django-admin startapp contatos

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando um novo modelo


Criando o primeiro modelo da aplica c ao
1 2 3 4 5 6 7 8 9 10 11 12 from django . db import models from django . core . urlresolvers import reverse class Pessoa ( models . Model ): name = models . CharField ( max_length =60) email = models . EmailField ( unique = True ) def __unicode__ ( self ): return "% s " <%s > % ( self . name , self . email ) def get_absolute_url ( self ): return reverse ( pessoa - view , args =[ self . id ])

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando um novo modelo


Criando o primeiro modelo da aplica c ao
1 2 3 4 5 6 7 8 9 10 11 12 from django . db import models from django . core . urlresolvers import reverse class Pessoa ( models . Model ): name = models . CharField ( max_length =60) email = models . EmailField ( unique = True ) def __unicode__ ( self ): return "% s " <%s > % ( self . name , self . email ) def get_absolute_url ( self ): return reverse ( pessoa - view , args =[ self . id ])

Criando o formul ario para o modelo Pessoa


1 2 3 4 5 6 from django . forms import ModelForm from catalogo . apps . contatos . models import Pessoa class PessoaForm ( ModelForm ): class Meta : model = Pessoa

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

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

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

Criando a segunda view


Exibi c ao dos objetos
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

Criando a segunda view


Exibi c ao dos objetos
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

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

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 ao tem

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Criando a u ltima view


Edi c ao de objetos
from from from from from from django . core . urlresolvers import reverse django . shortcuts import render_to_response , ge t_o bjec t_o r_4 04 django . template import RequestContext django . http import H t t p R e s p o n s e R e d i r e c t catalogo . apps . contatos . models import Pessoa 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

Criando a u ltima 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

Mapeando URLs para as views


URLs do projeto
1 2 3 4 5 from django . conf . urls . defaults import * urlpatterns = patterns ( , url ( ^ pessoa / , include ( catalogo . apps . contatos . urls )) , )

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Mapeando URLs para as views


URLs do projeto
1 2 3 4 5 from django . conf . urls . defaults import * urlpatterns = patterns ( , url ( ^ pessoa / , include ( catalogo . apps . contatos . urls )) , )

URLs da aplica c ao
1 2 3 4 5 6 7 8 9 10 11 12 from django . conf . urls . defaults import * urlpatterns = patterns ( catalogo . apps . contatos , url ( ^ $ , views . pessoa_list , name = pessoa - list ) , url ( ^ form / $ , views . pessoa_form , name = pessoa - insert ) , url ( ^ form /(? P < object_id >\ d +)/ $ , views . pessoa_form , name = pessoa - update ) , url ( ^ view /(? P < object_id >\ d +)/ $ , views . pessoa_view , name = pessoa - view ) , url ( ^ delete /(? P < object_id >\ d +)/ $ , views . pessoa_delete , name = pessoa - delete ) , )

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Reaproveitando mais, escrevendo menos...


Se eu quiser criar outro modelo, qual a diferen ca?

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Reaproveitando mais, escrevendo menos...


Se eu quiser criar outro modelo, qual a diferen ca? O modelo

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Reaproveitando mais, escrevendo menos...


Se eu quiser criar outro modelo, qual a diferen ca? O modelo Por que n ao criar algo gen erico?

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Reaproveitando mais, escrevendo menos...


Se eu quiser criar outro modelo, qual a diferen ca? O modelo Por que n ao criar algo gen erico? Generic Views!

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

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

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Telas da aplica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao Cache

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao Cache ...

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao Cache ...

Reposit orios de aplica c oes

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao Cache ...

Reposit orios de aplica c oes


http://djangoapps.org

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Isso e s o a ponta do iceberg...


O Django tem muitas outras coisas interessantes:
Administra c ao Flatpages Sitemaps Feeds Autentica c ao Cache ...

Reposit orios de aplica c oes


http://djangoapps.org http://pinaxproject.com

Arthur Furlan (afurlan) afurlan@afurlan.org

Django para desenvolvimento web

Fim

Obrigado! D uvidas?

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

Das könnte Ihnen auch gefallen