SlideShare una empresa de Scribd logo
1 de 78
Descargar para leer sin conexión
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
”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 ´gil
                                              a




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
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
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
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
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
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 flex´ de URLs
                    ıvel




        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 flex´ de URLs
                    ıvel
      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 flex´ de URLs
                    ıvel
      Sistema de cache
      Internacionaliza¸˜o
                      ca




        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 flex´ de URLs
                    ıvel
      Sistema de cache
      Internacionaliza¸˜o
                      ca
      Reusabilidade (DRY)




        Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
O padr˜o MVC no Django
      a




      Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
O padr˜o MVC no Django
      a




      Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
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
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
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
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
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
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
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
Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
   a
Ent˜o o Django me ajuda a ser menos repetitivo... Ok, como?
   a
     O Django ´ um framework database-driven
              e
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
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
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
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
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
”Talk is cheap, show me the code!”
Criando um novo projeto

     Um Cat´logo de Contatos:
           a


     $ django-admin startproject catalogo




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Criando um novo projeto

     Um Cat´logo de Contatos:
           a


     $ django-admin startproject catalogo




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
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
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
Digam ”Ol´” para o Django!
         a

     Acessando o sistema:


     $ ./manage.py runserver




      Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Digam ”Ol´” para o Django!
         a

     Acessando o sistema:


     $ ./manage.py runserver




      Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
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
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
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
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
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¸˜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
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
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˜o tem
                 a




        Arthur Furlan (afurlan) afurlan@afurlan.org          Django para desenvolvimento web
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
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
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
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
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
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
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
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
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¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
Telas da aplica¸˜o
               ca




       Arthur Furlan (afurlan) afurlan@afurlan.org   Django para desenvolvimento web
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
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
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
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
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
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
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
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
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
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
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
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

Más contenido relacionado

La actualidad más candente

Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
jesuinoPower
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
Bruno Rocha
 

La actualidad más candente (20)

Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação WebDjango Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
Django Módulo Básico Parte I - Desenvolvimento de uma aplicação Web
 
Boas práticas de django
Boas práticas de djangoBoas práticas de django
Boas práticas de django
 
Joomla! do desktop ao datacenter
Joomla! do desktop ao datacenterJoomla! do desktop ao datacenter
Joomla! do desktop ao datacenter
 
Java não é tão difícil quanto parece
Java não é tão difícil quanto pareceJava não é tão difícil quanto parece
Java não é tão difícil quanto parece
 
O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!O Spring está morto! Viva o Spring!
O Spring está morto! Viva o Spring!
 
Domando a irreversibilidade com feature flags
Domando a irreversibilidade com feature flagsDomando a irreversibilidade com feature flags
Domando a irreversibilidade com feature flags
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
POG nunca mais - SOLISC
POG nunca mais - SOLISCPOG nunca mais - SOLISC
POG nunca mais - SOLISC
 
Como fazer boas libs
Como fazer boas libs Como fazer boas libs
Como fazer boas libs
 
Globo.com - Porque amamos open-source?
Globo.com - Porque amamos open-source?Globo.com - Porque amamos open-source?
Globo.com - Porque amamos open-source?
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Javascript levado a sério
Javascript levado a sérioJavascript levado a sério
Javascript levado a sério
 
Desenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2pyDesenvolvimento web ágil com python e web2py
Desenvolvimento web ágil com python e web2py
 
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvensDrupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
Drupal Performance - Dicas e técnicas para levar seu Drupal às nuvens
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Introdução ao java fx e visage
Introdução ao java fx e visageIntrodução ao java fx e visage
Introdução ao java fx e visage
 
Trabalhando de forma profissional com silex
Trabalhando de forma profissional com silexTrabalhando de forma profissional com silex
Trabalhando de forma profissional com silex
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 

Destacado (6)

Django Básico
Django BásicoDjango Básico
Django Básico
 
Django - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em pythonDjango - A sua cápsula de soluções web em python
Django - A sua cápsula de soluções web em python
 
Explorando Django
Explorando DjangoExplorando Django
Explorando Django
 
Junho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em pythonJunho 2016 - Django - A sua cápsula de soluções web em python
Junho 2016 - Django - A sua cápsula de soluções web em python
 
Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Desenvolvimento web com python e django
Desenvolvimento web com python e djangoDesenvolvimento web com python e django
Desenvolvimento web com python e django
 

Similar a Django para desenvolvimento web; porque ser repetitivo é chato.

Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
Mateus Padua
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
Miguel Galves
 
Django: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoDjango: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazo
Bernardo Fontes
 

Similar a Django para desenvolvimento web; porque ser repetitivo é chato. (20)

Django
DjangoDjango
Django
 
F R A M E W O R K D J A N G O
F R A M E W O R K  D J A N G OF R A M E W O R K  D J A N G O
F R A M E W O R K D J A N G O
 
Desmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest FrameworkDesmitificando as aplicações RESTFul usando Django Rest Framework
Desmitificando as aplicações RESTFul usando Django Rest Framework
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHPPog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
Pog Nunca Mais - Técnicas e Macetes para o Desenvolvimento em PHP
 
Desenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJangoDesenvolvimento web simples com Python e DJango
Desenvolvimento web simples com Python e DJango
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
PHP Tools for Fast coding
PHP Tools for Fast codingPHP Tools for Fast coding
PHP Tools for Fast coding
 
Django: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento webDjango: Uso de frameworks ágeis para desenvolvimento web
Django: Uso de frameworks ágeis para desenvolvimento web
 
Django: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazoDjango: um framework web para perfeccionistas com prazo
Django: um framework web para perfeccionistas com prazo
 
Desenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando PythonDesenvolvimento de aplicações embarcadas utilizando Python
Desenvolvimento de aplicações embarcadas utilizando Python
 
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
Não se repita - Django Generic Views - Semana Acadêmica TADS 2015.
 
Python
PythonPython
Python
 
[Roadsec23] Dominando Angular com o ChatGPT
[Roadsec23] Dominando Angular com o ChatGPT[Roadsec23] Dominando Angular com o ChatGPT
[Roadsec23] Dominando Angular com o ChatGPT
 
Criando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e DicasCriando Framework - Conceitos, Estratégias e Dicas
Criando Framework - Conceitos, Estratégias e Dicas
 
Java.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com JavaJava.ino - Plataforma de Programação para Arduino com Java
Java.ino - Plataforma de Programação para Arduino com Java
 
Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015Trabalho 4 Semestre e 5 Semestre 2015
Trabalho 4 Semestre e 5 Semestre 2015
 
Desenvolvimento rápido de aplicações Web com Python e Django
Desenvolvimento rápido de aplicações Web com Python e DjangoDesenvolvimento rápido de aplicações Web com Python e Django
Desenvolvimento rápido de aplicações Web com Python e Django
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 

Último

Último (8)

ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

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
  • 33. ”Talk is cheap, show me the code!”
  • 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