SlideShare a Scribd company logo
1 of 39
Download to read offline
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

More Related Content

Similar to 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
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniterDesenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP Day Curitiba
 

Similar to 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...
 

Python mudando o modo de desenvolver para a internet