SlideShare uma empresa Scribd logo
1 de 80
Django
Desenvolvimento web ágil com Python




            Igor Sobreira
         www.igorsobreira.com
Quem sou eu

Me chamo Igor Sobreira
Faço TSI no IFPB (antigo CEFET-PB)
Programo em Python a uns 3, 4 anos
Trabalho com Django na
  Smart Nuts Technology (www.smartnutstechnology.com)

Velejo de windsurf (quando dá...)
O mini-projeto relativo aos slides
está em:

http://igorsobreira.com/sitemedia/ensol.zip
O que é Django?
Não é Jungle. É Django.
Não é Django Reinhardt ... na verdade é
• Framework web, escrito em
  Python


• Focado em desenvilmento ágil
• “Nós fazemos a parte
  repetitiva, você faz o que
  interessa”
Django é Python!
• Tipagem dinâmica e forte
• Orientada a Objetos
  (multiparadigma)

• Fácil de aprender
• “Pouco é muito”
• Baterias inclusas
• Extensível
• Preza pela beleza do
DRY
Don’t Repeat Yourself




                 http://www.flickr.com/photos/plinton/215437652/
Projeto & Aplicações
Projeto: http://ensol.org.br


     trabalhos            contato



         inscrições            admin



     usuários              paginas
Projeto                             Apps externas

                               tagging
   trabalhos
                                      mailer
          inscrições
                              photogallery

django.contrib

  admin          auth   flatpages    gis        ...
Caminho de uma requisição
Middleware

Fica no “meio do caminho”
  process_request

  process_response

Manipular o request e/ou o response de maneira
transparente
Alguns disponíveis
  G-Zip

  GET Condicional
Escute os
sinais
Seja notificado quando
algum evento ocorrer.

Sinais relacionados a
request, models. E os
seus.
E isso é MVC?
• Onde estão os Controllers?
•   O que as “views” estão fazendo ali?
Alguns chamam
Criando um projeto
$ django-admin.py startproject ensol
settings.py
é Python, por favor,
tudo menos XML!




                       http://www.flickr.com/photos/willpate/63814657/
• Você precisa de um
  Servidor Web

• O django tem um, para
  desenvolvimento

• Não use em produção.
Aplicações

Deve fazer uma coisa, e fazer direito
Se a descrição de sua aplicação for maior que uma
linha, talvez ela precise ser quebrada
Reutilizável (DRY lembra?)
Talvez já exista!
$ python manage.py startapp trabalhos




 A aplicação é auto-contida
   tests.py
   urls.py
   templates/
   admin.py
Instalando a aplicação




                settings.py
Modelo de Dados
models.py
Esqueça SQL!

               Nós temos objetos, e
               queremos persistí-los
               É preciso um
               mapeamento entre
               classes/objetos e
               tabelas/linhas
               ORM!
Eu crio classes e objetos
                 em Python
O ORM converte para SQL
E com suporte a vários
bancos!
 PostgreSQL, MySQL, SQLite e Oracle




                          settings.py
$ python manage.py syncdb
Cria as tabelas no banco. E pronto.
Alterei minha classe ...
O syncdb não atualiza
Use SQL na unha
Ou aplicações externas:
  south
  desed
  django-evolution
  yasdel
E como eu salvo e
manipulo meus modelos?
Eu criei esse usuário no primeiro syncdb, lembra?
Interface Administrativa
O famoso CRUD
Trabalhoso
Chato
Repetitivo
  Ops. DRY, lembra?
O django já fez pra você
 Ele conhece seus models,
 então ele sabe o que você
 quer editar
 Uma aplicação do
 django.contrib
 Mesmo que não use em
 produção, é útil no
 desenvolvimento
 O admin não é sua
 aplicação!
Só precisa registrar o seu
model




 Instale a aplicação
 Habilite a URL
 E rode o syncdb
Mapeando ações para cada
URL
urls.py e views.py
/Main#PhotoTag.aspxrl=mo&uid=4504979850246063103
/crime/by-place/24/by-primary-type/narcotics/

 /blog/2009/4/15/estruturas-de-dados-do-django/



Estamos na fase
de URLs
amigáveis
URLs são regexs
Views
recebem um HttpRequest, e parâmetros de URL

retorna um HttpResponse
Templates
O que é?

 Uma maneira mais poderosa de gerar strings
   Não necessariamente HTML
   Nem precisa ser usado como resposta HTTP
 Permite loops e condicionais, além de variáveis
{% for elemento in coleção %} {% endfor %}
{% if algo %} ... {% else %} ... {% endif %}
{{ variável }}
{{ variável|filtro }}
Herança de templates
base.html

            topo

                          page.html (extends base.html)

        block conteúdo
 menu           (vazio)

                                     block conteúdo

                                         Aqui vai o
                                       conteúdo real
            rodapé
                                        endblock
Cadê meu
 include?

Já era. Nova maneira de pensar. :-)
Mas não é o fim do mundo. Existe uma tag {% include %}
  Porém use com moderação.
  Herança é bem mais flexível
O que mais?
Formulários

Fácil criação de formulários, totalmente OO
Traz validação e renderização dos campos
hooks para validação customizada
Formulários para Models
Form, ModelForm, FormWizard, FormPreview,
formsets
Testes automizados

doctests e unit tests
fixtures
test runner
test client
teste de envio de emails
Cache
  Onde?            Como?
  Memcached        Por site
  Banco de Dados   Por view
  Arquivos         Por bloco de template
  Memória local    Sob demanda
Feeds RSS e Atom
Outras alternativas ao seu conteúdo.
Extenda a classe Feed
Sobrescreva alguns métodos/atributos
  title, link, description, items, etc ...
Diga o tipo (RSS ou Atom)
Publique sob uma url.
Sitemaps

Seja amigo dos bots de busca
Extenda a class Sitemap
Sobrescreva alguns métodos/atributos
  changefreq, priority, items, lastmod, ...
Publique sob uma url.
Cadê o AJAX?
Django é um framework de backend, não traz código
   javascript
   Ele faz a parte de backend (JSON, XML, YAML)



Serializa



Desserializa
Aplicações do contrib
comments        formtools
Content Types   markup
localflavor      sites
flatpages        redirects
gis
databrowse
i18n
Suporte a
internacionalização
O admin já vem traduzido
em pt_BR
Seguraça

SQL Injection
Cross-Site Scripting (XSS)
Cross-Site Request Forgery (CSRF)
E-Mail Header Injection
DEBUG = False em produção
Deployment
WSGI                Também ...

Apache + mod_wsgi   Apache + mod_python
nginx               CGI
lighttpd            FastCGI
Twisted.web2
                    prefira WSGI
CherryPy
Quem tá usando?
vericia.com
everyblock.com
jaiku.com
ucsvirtual.ucs.br
A globo.com usa Django para diversas aplicações
Documentação
docs.djangoproject.com
docs.djangobrasil.org (Projeto de tradução. Ajude!)
djangobook.com
Comunidade
djangoproject.com - site oficial
djangobrasil.org - site oficial nacional
djangogigs.com - vagas de empregro
djangopeople.net - rede social
djangosites.org - rede social de sites em django
djangosearch.com - busca assuntos relacionados
djangocodesearch.com - busca nos fontes
Comunidade
Google Grupos
 django-brasil - 1014
 django-users - 14289
IRC
 #django-br
 #django

grupypb.net - Python na Paraíba
Obrigado. Dúvidas?


              Igor Sobreira
        http://igorsobreira.com

Mais conteúdo relacionado

Mais procurados

Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de DjangoLeandro Zanuz
 
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 DjangoOsvaldo Santana Neto
 
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 Webantonio sérgio nogueira
 
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 web2pyRelsi Maron
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com pythonBruno Rocha
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.comricobl
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com DjangoMarinho Brandão
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonGuilherme Garcia
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHPRafael Dohms
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkRafael Dohms
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015Renato Groff
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasVitor Mattos
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web ServicesDorneles Treméa
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmoitalomaia
 
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 pythonPaula Grangeiro
 

Mais procurados (20)

Treinamento Básico de Django
Treinamento Básico de DjangoTreinamento Básico de Django
Treinamento Básico de Django
 
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
 
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
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
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
 
Desenvolvendo mvp com python
Desenvolvendo mvp com pythonDesenvolvendo mvp com python
Desenvolvendo mvp com python
 
Python e Django na Globo.com
Python e Django na Globo.comPython e Django na Globo.com
Python e Django na Globo.com
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Despertando para o PHP
Despertando para o PHPDespertando para o PHP
Despertando para o PHP
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
PHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao FrameworkPHP e AJAX: do Request ao Framework
PHP e AJAX: do Request ao Framework
 
Frameworks PHP
Frameworks PHPFrameworks PHP
Frameworks PHP
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015C# 6.0 - Interopmix 2015
C# 6.0 - Interopmix 2015
 
BDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemasBDD: Torne viva a documentação de seus sistemas
BDD: Torne viva a documentação de seus sistemas
 
Introdução ao Python & Web Services
Introdução ao Python & Web ServicesIntrodução ao Python & Web Services
Introdução ao Python & Web Services
 
Django Tem Ritmo
Django Tem RitmoDjango Tem Ritmo
Django Tem Ritmo
 
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
 

Destaque

Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Marcel Caraciolo
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantesrichardsonlima
 
Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonPedro Valente
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
PDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffreyPDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffreyJohn McCaffrey
 
Agenda pentru Romania Digitala
Agenda pentru Romania DigitalaAgenda pentru Romania Digitala
Agenda pentru Romania DigitalaTotalSoft
 
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonCriação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonLeandro Mendes Ferreira
 

Destaque (16)

Curso de Python e Django
Curso de Python e DjangoCurso de Python e Django
Curso de Python e Django
 
Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3Oficina Python: Hackeando a Web com Python 3
Oficina Python: Hackeando a Web com Python 3
 
Python para iniciantes
Python para iniciantesPython para iniciantes
Python para iniciantes
 
Aprendendo Git
Aprendendo GitAprendendo Git
Aprendendo Git
 
Extraindo dados públicos na marra com Python
Extraindo dados públicos na marra com PythonExtraindo dados públicos na marra com Python
Extraindo dados públicos na marra com Python
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Introdução ao Django
Introdução ao DjangoIntrodução ao Django
Introdução ao Django
 
Aprendendo python
Aprendendo pythonAprendendo python
Aprendendo python
 
Hackeando o Facebook com Python
Hackeando o Facebook com PythonHackeando o Facebook com Python
Hackeando o Facebook com Python
 
PDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffreyPDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
PDF Generation in Rails with Prawn and Prawn-to: John McCaffrey
 
Django debug-toolbar
Django debug-toolbarDjango debug-toolbar
Django debug-toolbar
 
Virtualenv e Pip
Virtualenv e PipVirtualenv e Pip
Virtualenv e Pip
 
Agenda pentru Romania Digitala
Agenda pentru Romania DigitalaAgenda pentru Romania Digitala
Agenda pentru Romania Digitala
 
Django
DjangoDjango
Django
 
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e PythonCriação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
Criação de Data Warehouse em Banco de Dados NoSQL com Cassandra, Spark e Python
 

Semelhante a Django: Desenvolvimento web ágil com Python

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 FrameworkBruno Oliveira
 
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 Ofabio.thomaz
 
Python e Django
Python e DjangoPython e Django
Python e Djangopugpe
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
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 pythonGrupo de Testes Carioca
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Bruno Rocha
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitFlávio Lisboa
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaAlexandre Tarifa
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com PythonLuiz Aldabalde
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com PythonPythOnRio
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoCezinha Anjos
 

Semelhante a Django: Desenvolvimento web ágil com Python (20)

Django
DjangoDjango
Django
 
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
 
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
 
Python e Django
Python e DjangoPython e Django
Python e Django
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
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
 
Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011Desmistificando web2py - #TDC2011
Desmistificando web2py - #TDC2011
 
W2py pyconpe
W2py pyconpeW2py pyconpe
W2py pyconpe
 
PHPZEIRO: Adote um framework
PHPZEIRO: Adote um frameworkPHPZEIRO: Adote um framework
PHPZEIRO: Adote um framework
 
Desenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo ToolkitDesenvolvendo com Dojo Toolkit
Desenvolvendo com Dojo Toolkit
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Django Básico
Django BásicoDjango Básico
Django Básico
 
Entendendo Frameworks web com Python
Entendendo Frameworks web com PythonEntendendo Frameworks web com Python
Entendendo Frameworks web com Python
 
Entendendo Framework Web com Python
Entendendo Framework Web com PythonEntendendo Framework Web com Python
Entendendo Framework Web com Python
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018Framework web 01 - Aula UTFPR 2018
Framework web 01 - Aula UTFPR 2018
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
TDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direitoTDC 2015 - Rails & Javascript: faça isso direito
TDC 2015 - Rails & Javascript: faça isso direito
 

Django: Desenvolvimento web ágil com Python