SlideShare uma empresa Scribd logo
Python mudando o modo de
desenvolver para a internet
        Marcos Daniel Petry
Quem sou eu?
•   Marcos Daniel Petry =)
•   Bacharel em Ciências da Computação
•   Desenvolvedor Python desde 2005
•   Já programei em Delphi, VB, PHP, Java ...
Quem está aí?

  • Desenvolvedores?
  • Conhecem python?
  • Trabalham com python?
Há muito tempo atrás...
•   Não havia um estrutura determinada
•   Poucos padrões
•   O objetivo era muito diferente do que é hoje
•   Necessidade de algo melhor...
Iniciada a evolução...
•   Não é necessário escrever todo html "no braço"
•   O servidor Web Recebe a requisição
•   Executa o código CGI e devolve a informação processada
•   Possibilidade de usar C, Perl, TCL....
A era PHP e ASP
• Inicio da divisão de culturas
  – Software proprietário x Software livre
  – "guerra de linguagens"
• O mesmo objetivo de CGI, mas com uma melhor
  tecnologia e mais fácil de entender
• Os sites são orientados a páginas
• Várias iniciativas de integrar outras linguagens
  com o servidor Web
=(
=(((
Precisamos trabalhar com
aplicações e não páginas!
Frameworks!
Mas por que Python?
•   Criada para ser explícita e de fácil aprendizado
•   Orientada a Objetos, mas multi-paradigma
•   Multi-plataforma
•   Software Livre
•   Compilada, interpretada e interativa
•   Muitas bibliotecas
•   Curva de aprendizado curta
•   Divertida!
Segurança
700                                                         • Por Linguagem:
600                                                         • Python: 82
500                                                         • PHP: 11899
400



300



200



100



  0
      Joomla Drupal   Zend   Cake   Zope   Plone   Django


                                       Dados da National Vulnerability Database, em 18/06/2010
                                       http://web.nvd.nist.gov/view/vuln/search
O Resultado?
O que é necessário para um Framework
WEB?

  •   Alto nível
  •   Orientado a aplicações
  •   Que respeite um paradigma de projeto
  •   Desenvolvimento rápido
  •   Open Source =)
Como conseguimos isso?
•   Mapemento objeto-relacional
•   Mapeador de URL
•   Sistema de Templates
•   Ferramentas auxiliares
    –   Formulários e Validação
    –   Autenticação
    –   Controle de sessões
    –   Administração
Resultado?
• Rápida implementação
• Facil manutenção
Mapeamento Objeto-Relacional
• Escrever SQL é descecessário na maioria dos casos
• Independência de Banco de Dados

• Existem vários, independente do framework
  escolhido
  –   SQL Objetct
  –   Alchemy
  –   Mongo-Engine
  –   Divan
Mapeamento Objeto-Relacional
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)




CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
Mapeamento Objeto-Relacional

class Person(models.Model):
    name = models.CharField(max_length=128)
    def __unicode__(self):
        return self.name

class Group(models.Model):
    name = models.CharField(max_length=128)
    members = models.ManyToManyField(Person, through='Membership')
    def __unicode__(self):
        return self.name

class Membership(models.Model):
    person = models.ForeignKey(Person)
    group = models.ForeignKey(Group)
    date_joined = models.DateField()
    invite_reason = models.CharField(max_length=64)
Mapeamento Objeto-Relacional
>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="Paul McCartney")
>>> beatles = Group.objects.create(name="The Beatles")
>>> m1 = Membership(person=ringo, group=beatles,
...     date_joined=date(1962, 8, 16),
...     invite_reason= "Needed a new drummer.")
>>> m1.save()
>>> beatles.members.all()
[<Person: Ringo Starr>]
>>> ringo.group_set.all()
[<Group: The Beatles>]
>>> m2 = Membership.objects.create(person=paul, group=beatles,
...     date_joined=date(1960, 8, 1),
...     invite_reason= "Wanted to form a band.")
>>> beatles.members.all()
[<Person: Ringo Starr>, <Person: Paul McCartney>]
Mapeador de Endereços
• Mantém a estrutura do seu site controlada
  – Mais segurança
• Mais fácil de debugar em caso de erro no site
• Endereços fáceis de entender
Mapeador de Endereços


 urlpatterns = patterns('noticias.views',
     url(r'^$', 'index', name="pr­index"),
     url(r'^noticia/(?P<secao>)/(?P<categoria>)/$', 'secao',  name="not­secao"),
     url(r'^noticia/(?P<nome>[­dw]+).html$', 'artigo', name='not­detalhe'),
 )
Mapeador de Endereços - Resultado?
http://www.meusite.com/noticias.php?secao=12&categoria=12

http://www.meusite.com/noticias_ver.php?id=12
Mapeador de Endereços - Resultado?
http://www.meusite.com/noticias.php?secao=12&categoria=12

http://www.meusite.com/noticias_ver.php?id=12


http://www.meusite.com/noticias/esportes/selecao/

http://www.meusite.com/noticias/selecao-brasileira-ganha-da-
coreia-do-norte.html
Sistema de Templates
• Separação de código e layout

• Existem vários, independente do framework
  escolhido
  –   Cheetah
  –   Genshi
  –   Jinja
  –   Mako
  –   ...
Sistema de Templates
{% extends "base_templ.html" %}
{% block title %}{{ titulo }}{% endblock %}
{% block content %}
<h1>{{ titulo }}</h1>


{% for noticia in noticias_lista %}
<h2>
  <a href="{{ noticia.get_absolute_url }}">
    {{ noticia.titulo|upper }}
  </a>
</h2>
<p>{{ noticia.descricao|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}
Ferramentas Auxiliares
• Propicia o desenvolvimento rápido
• Reutilização de código
Frameworks Python
•   Plone/Zope
•   Pylons
•   TurboGears
•   Django
Pylons
• "Full Stack", extremamente flexivel
• Reúsa vários componenetes já existentes
• A substituiçã ode componentes é muito fácil
Turbo Gears
• Full stack, mas também com reúso de
  componentes
• Turbo Gears roda em cima do Pylons
Django
•   O mais popular no mundo Python
•   Não reusa nada
•   Prioriza a integração interna de componentes
•   Quebra o projeto em aplicações
•   Facilita muito o reúso, já que há várias apps
    disponibilizadas

• Eu uso ele! =)
Zope/Plone

Servido se aplicações   Content Management
                            Framework
Google App Engine
•   Aplicações na Infraestrutura do Google
•   Autenticação pelo Google Accounts
•   Big Table
•   Vários Frameworks
Onde procurar ajuda?
• Programadores python tem uma certa aversão a
  fóruns =P

• Documentações
• Listas de Discussão
• IRC
Dúvidas?
Obrigado!
• E-mail: marcospetry@gmail.com
• Meu Blog: http://mdpetry.net
• Twitter: @petry

Mais conteúdo relacionado

Semelhante a Python mudando o modo de desenvolver para a internet

Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
Rangel Javier
 
Curso HTML 5 - Aula Inicial
Curso HTML 5 - Aula InicialCurso HTML 5 - Aula Inicial
Curso HTML 5 - Aula Inicial
Tiago Antônio da Silva
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
Marcos Thomaz
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
Flávio Lisboa
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
Alvaro Viebrantz
 
Slides .pptx.pdf
Slides .pptx.pdfSlides .pptx.pdf
Slides .pptx.pdf
ssuser546d49
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
Evaldo Junior
 
Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
Marinho Brandão
 
2006 - CURSOINTRODUÇÃOADOTNET.ppt
2006 - CURSOINTRODUÇÃOADOTNET.ppt2006 - CURSOINTRODUÇÃOADOTNET.ppt
2006 - CURSOINTRODUÇÃOADOTNET.ppt
Ricardo Guerra Freitas
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
Alvaro Viebrantz
 
Apresentação documenta
Apresentação documentaApresentação documenta
Apresentação documenta
Documenta Treinamentos
 
O que podemos fazer com Python?
O que podemos fazer com Python?O que podemos fazer com Python?
O que podemos fazer com Python?
Izabela Guerreiro
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Domingos Teruel
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP Day Curitiba
 
Machine Learning Black Boxes
Machine Learning Black BoxesMachine Learning Black Boxes
Machine Learning Black Boxes
Denis Wilson Souza Rosa
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
tdc-globalcode
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
javamanrj
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
tdc-globalcode
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Mario Guedes
 

Semelhante a Python mudando o modo de desenvolver para a internet (20)

Slide Aula - Curso CakePHP
Slide Aula - Curso CakePHPSlide Aula - Curso CakePHP
Slide Aula - Curso CakePHP
 
Curso HTML 5 - Aula Inicial
Curso HTML 5 - Aula InicialCurso HTML 5 - Aula Inicial
Curso HTML 5 - Aula Inicial
 
Conhecendo o Django
Conhecendo o DjangoConhecendo o Django
Conhecendo o Django
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Carreira de Desenvolvimento
Carreira de DesenvolvimentoCarreira de Desenvolvimento
Carreira de Desenvolvimento
 
Slides .pptx.pdf
Slides .pptx.pdfSlides .pptx.pdf
Slides .pptx.pdf
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
 
2006 - CURSOINTRODUÇÃOADOTNET.ppt
2006 - CURSOINTRODUÇÃOADOTNET.ppt2006 - CURSOINTRODUÇÃOADOTNET.ppt
2006 - CURSOINTRODUÇÃOADOTNET.ppt
 
Curso AngularJS - Parte 1
Curso AngularJS - Parte 1Curso AngularJS - Parte 1
Curso AngularJS - Parte 1
 
Apresentação documenta
Apresentação documentaApresentação documenta
Apresentação documenta
 
O que podemos fazer com Python?
O que podemos fazer com Python?O que podemos fazer com Python?
O que podemos fazer com Python?
 
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User InterfaceDesenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
Desenvovelndo Aplicações com PHP, AJAX e Y!UI Yahoo User Interface
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Machine Learning Black Boxes
Machine Learning Black BoxesMachine Learning Black Boxes
Machine Learning Black Boxes
 
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho DuroTDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
TDC2016SP - Machine Learning Black Boxes - Terceirizando o Trabalho Duro
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
TDC2018SP | Trilha Modern Web - Blazor - C# rodando no navegador padrao, sem ...
 
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
Uma perspectiva histórica e o cenário atual das ferramentas de desenvolviment...
 

Último

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
2m Assessoria
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 

Último (10)

DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ADSIS - ESTRUTURA DE DADOS II - 52_2024.docx
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 

Python mudando o modo de desenvolver para a internet