DJANGO TEM RITMO!




Palestrante: Italo MC Maia
Duração: 50min
Blog: http://tiny.cc/italo_blog
Site: http://tiny.cc/italomaia
http://www.python.org.br          http://www.pugce.org
Frameworks Web

         Frameworks              Frameworks Python
      MyFaces - Java                TurboGears
  RubyOnRails - Ruby                  Web.Py
       Catalyst - Perl                Web2Py
         Kepler - Lua                 Pylons
       CakePHP - PHP                 Karrigell

http://www.python.org.br               http://www.pugce.org
Django!

Desenvolvido para “Lawrence Journal-World”
http://www.lawrence.com/

                                 - Princípios -
                                     ORM
                                      DRY
                                     KISS
                                  MTV (MVC)
                                    Rápido
                                   Escalável
                              Poucas dependências
http://www.python.org.br             http://www.pugce.org
Melhores Práticas!

      Baixo acoplamento             Lógica de domínio
      Urls/Visão/Modelo               auto-contida
   Explícito é melhor que                Modelo
           implícito                     Poliglota
       Menos mágica!                Internacionalização
             Enxuto                 Ajax e companhia
          Só o essencial!          XML, (X)HTML, JSON
           Produtivo                    Extensível
       - Código + Produto                TUDO!
http://www.python.org.br                  http://www.pugce.org
models.py

                   ORM padrão do Django

                            from django.models import *
      Solução InHouse       # define a classe/tabela no banco
                            class Page(models.Model):
         Lazy Queries          name=CharField(max_length=100)
                               slug=SlugField(primary_key=True)
        ActiveRecord           text=models.TextField()


     1to1, 1toM, MtoN       # cria uma página no banco
                            Page.objects.create(name='Pugce', slug='pugce',
   Independe do Banco       text='Amo tudo isso!')
                            pg = Page.objects.get(pk='pugce') # busca por PK
              Sinais        query = Page.objects.all() # todas as paginas!
                            # paginas que o nome comeca com 'P'
                            Page.objects.filter(name__startswith='P')

http://www.python.org.br                            http://www.pugce.org
urls.py

              Mapeamento de Requisições

                           from django.conf.urls.defaults import *
                           from django.contrib import admin
                           from cms import views
                           # acha modelos p/ o django-admin
          DRY              admin.autodiscover()

   Baixo acoplamento       # (<regex>, view.metodo ou include(modulo_url))
                           urlpatterns = patterns('',
    Exp. Regulares            (r'^admin/', include(admin.site.urls)),
                              (r'^accounts/(?P<username>[w_]+)/',
       RÁPIDO!!                  include('pugce.accounts.urls')),
                              url(r'^(?P<slug>[0-9A-Za-z-_.//]+)/$',
                                 views.page, name='cms-page')
                           )

http://www.python.org.br                           http://www.pugce.org
forms.py

                   Geração de Formulários
     - Gerados -                        - Validação -
   A partir do modelo                    Automática
     Manualmente                        Personalizada
                            from django import forms
                            from . import models
  - Características -       # form a partir de um modelo
      Sem HTML              class PageForm(forms.ModelForm):
                                 class Meta: model=models.Page
   Mapeamento auto.         # testando o formulário
                            page=models.Page.objects.get(pk='pugce')
  Tratamento de erros       frm=PageForm({“name”:”huguinho”}, instance=page)
                            if frm.is_valid(): frm.save()
                            else: print frm.errors
http://www.python.org.br                              http://www.pugce.org
views.py

                       Lógica da Aplicação

                               from django.shortcuts import 
 - Características -           render_to_response as rp
                               from . import models
       Simples
    Valida Acesso              # primeiro argumento deve ser a requisicao
                               def page(request, slug):
 Responde Requisições              # slug: identificador de uma Page
                                   pg = models.Page.objects.get(pk=slug)
   Acessa o Modelo                 rp_dict = pg.__dict__
Independe do Template
                                   if request.is_ajax(): # requisicao ajax?
  Ajax Transparente                     return rp('pg.json', rp_dict,
                                             mimetype='application/json')
                                   else: return rp('pg.html', rp_dict)

http://www.python.org.br                               http://www.pugce.org
Templates!

                    Mostrando Resultado!

             Tags                      Flexível
        {% tagname %}          Funciona com qualquer
            Variáveis          arquivo texto, seja XML,
                               HTML, XHTML, TXT...
             {{ var }}
             Filtros
                                 Melhores Práticas
            var|filtro
                             Separa Lógica e Apresentação


http://www.python.org.br                  http://www.pugce.org
base.html




http://www.python.org.br           http://www.pugce.org
page.html




http://www.python.org.br           http://www.pugce.org
Página montada

          HTML exibindo Page(pk='pugce')




http://www.python.org.br             http://www.pugce.org
contribs.*

    Admin                     Csrf       Humanize
 Contenttype                   Gis       Redirects
  Formtools                  Markup     Syndication
 Localflavor                  Sites      Comments
  Sitemaps                    Auth       Flatpages
  Admindocs                Databrowse     Sessions
                                        Webdesign

http://www.python.org.br                http://www.pugce.org
contrib.admin

                   Interface Administrativa

                                      Acesso ao banco
                                           Crud
                                       Automatizado
                                           Logs
                                        Permissões
                                       Personalizável

 fonte:djangobook.zinpep


http://www.python.org.br                http://www.pugce.org
Agradecimento
     Agradeço a presença de todos e aos meus
     colegas coordenadores por serem grandes
              pessoas e profissionais!


Mais informações em:
http://djangoproject.com/
http://www.djangobrasil.org/



http://www.python.org.br             http://www.pugce.org

Django Tem Ritmo

  • 1.
    DJANGO TEM RITMO! Palestrante:Italo MC Maia Duração: 50min Blog: http://tiny.cc/italo_blog Site: http://tiny.cc/italomaia http://www.python.org.br http://www.pugce.org
  • 2.
    Frameworks Web Frameworks Frameworks Python MyFaces - Java TurboGears RubyOnRails - Ruby Web.Py Catalyst - Perl Web2Py Kepler - Lua Pylons CakePHP - PHP Karrigell http://www.python.org.br http://www.pugce.org
  • 3.
    Django! Desenvolvido para “LawrenceJournal-World” http://www.lawrence.com/ - Princípios - ORM DRY KISS MTV (MVC) Rápido Escalável Poucas dependências http://www.python.org.br http://www.pugce.org
  • 4.
    Melhores Práticas! Baixo acoplamento Lógica de domínio Urls/Visão/Modelo auto-contida Explícito é melhor que Modelo implícito Poliglota Menos mágica! Internacionalização Enxuto Ajax e companhia Só o essencial! XML, (X)HTML, JSON Produtivo Extensível - Código + Produto TUDO! http://www.python.org.br http://www.pugce.org
  • 5.
    models.py ORM padrão do Django from django.models import * Solução InHouse # define a classe/tabela no banco class Page(models.Model): Lazy Queries name=CharField(max_length=100) slug=SlugField(primary_key=True) ActiveRecord text=models.TextField() 1to1, 1toM, MtoN # cria uma página no banco Page.objects.create(name='Pugce', slug='pugce', Independe do Banco text='Amo tudo isso!') pg = Page.objects.get(pk='pugce') # busca por PK Sinais query = Page.objects.all() # todas as paginas! # paginas que o nome comeca com 'P' Page.objects.filter(name__startswith='P') http://www.python.org.br http://www.pugce.org
  • 6.
    urls.py Mapeamento de Requisições from django.conf.urls.defaults import * from django.contrib import admin from cms import views # acha modelos p/ o django-admin DRY admin.autodiscover() Baixo acoplamento # (<regex>, view.metodo ou include(modulo_url)) urlpatterns = patterns('', Exp. Regulares (r'^admin/', include(admin.site.urls)), (r'^accounts/(?P<username>[w_]+)/', RÁPIDO!! include('pugce.accounts.urls')), url(r'^(?P<slug>[0-9A-Za-z-_.//]+)/$', views.page, name='cms-page') ) http://www.python.org.br http://www.pugce.org
  • 7.
    forms.py Geração de Formulários - Gerados - - Validação - A partir do modelo Automática Manualmente Personalizada from django import forms from . import models - Características - # form a partir de um modelo Sem HTML class PageForm(forms.ModelForm): class Meta: model=models.Page Mapeamento auto. # testando o formulário page=models.Page.objects.get(pk='pugce') Tratamento de erros frm=PageForm({“name”:”huguinho”}, instance=page) if frm.is_valid(): frm.save() else: print frm.errors http://www.python.org.br http://www.pugce.org
  • 8.
    views.py Lógica da Aplicação from django.shortcuts import - Características - render_to_response as rp from . import models Simples Valida Acesso # primeiro argumento deve ser a requisicao def page(request, slug): Responde Requisições # slug: identificador de uma Page pg = models.Page.objects.get(pk=slug) Acessa o Modelo rp_dict = pg.__dict__ Independe do Template if request.is_ajax(): # requisicao ajax? Ajax Transparente return rp('pg.json', rp_dict, mimetype='application/json') else: return rp('pg.html', rp_dict) http://www.python.org.br http://www.pugce.org
  • 9.
    Templates! Mostrando Resultado! Tags Flexível {% tagname %} Funciona com qualquer Variáveis arquivo texto, seja XML, HTML, XHTML, TXT... {{ var }} Filtros Melhores Práticas var|filtro Separa Lógica e Apresentação http://www.python.org.br http://www.pugce.org
  • 10.
  • 11.
  • 12.
    Página montada HTML exibindo Page(pk='pugce') http://www.python.org.br http://www.pugce.org
  • 13.
    contribs.* Admin Csrf Humanize Contenttype Gis Redirects Formtools Markup Syndication Localflavor Sites Comments Sitemaps Auth Flatpages Admindocs Databrowse Sessions Webdesign http://www.python.org.br http://www.pugce.org
  • 14.
    contrib.admin Interface Administrativa Acesso ao banco Crud Automatizado Logs Permissões Personalizável fonte:djangobook.zinpep http://www.python.org.br http://www.pugce.org
  • 15.
    Agradecimento Agradeço a presença de todos e aos meus colegas coordenadores por serem grandes pessoas e profissionais! Mais informações em: http://djangoproject.com/ http://www.djangobrasil.org/ http://www.python.org.br http://www.pugce.org