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á ...
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 qu...
Iniciada a evolução...
•   Não é necessário escrever todo html "no braço"
•   O servidor Web Recebe a requisição
•   Execu...
A era PHP e ASP
• Inicio da divisão de culturas
  – Software proprietário x Software livre
  – "guerra de linguagens"
• O ...
=(
=(((
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
•   ...
Segurança
700                                                         • Por Linguagem:
600                                ...
O Resultado?
O que é necessário para um Framework
WEB?

  •   Alto nível
  •   Orientado a aplicações
  •   Que respeite um paradigma d...
Como conseguimos isso?
•   Mapemento objeto-relacional
•   Mapeador de URL
•   Sistema de Templates
•   Ferramentas auxili...
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

• Exis...
Mapeamento Objeto-Relacional
class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = ...
Mapeamento Objeto-Relacional

class Person(models.Model):
    name = models.CharField(max_length=128)
    def __unicode__(...
Mapeamento Objeto-Relacional
>>> ringo = Person.objects.create(name="Ringo Starr")
>>> paul = Person.objects.create(name="...
Mapeador de Endereços
• Mantém a estrutura do seu site controlada
  – Mais segurança
• Mais fácil de debugar em caso de er...
Mapeador de Endereços


 urlpatterns = patterns('noticias.views',
     url(r'^$', 'index', name="pr­index"),
     url(r'^n...
Mapeador de Endereços - Resultado?
http://www.meusite.com/noticias.php?secao=12&categoria=12

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

http://www.meusite.com/notic...
Sistema de Templates
• Separação de código e layout

• Existem vários, independente do framework
  escolhido
  –   Cheetah...
Sistema de Templates
{% extends "base_templ.html" %}
{% block title %}{{ titulo }}{% endblock %}
{% block content %}
<h1>{...
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 é m...
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...
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ário...
Onde procurar ajuda?
• Programadores python tem uma certa aversão a
  fóruns =P

• Documentações
• Listas de Discussão
• I...
Dúvidas?
Obrigado!
• E-mail: marcospetry@gmail.com
• Meu Blog: http://mdpetry.net
• Twitter: @petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Python mudando o modo de desenvolver para a web  - Marcos Daniel Petry
Upcoming SlideShare
Loading in …5
×

Python mudando o modo de desenvolver para a web - Marcos Daniel Petry

1,509 views
1,451 views

Published on

Python: mudando o modo de desenvolver para a internet (Marcos Daniel Petry)

A Palestra se propõem a apresentar várias soluções que a linguagem oferece para o desenvolvimento de aplicações voltadas para a internet e uma pequena comparação com alguns de seus “concorrentes” de outras linguagens. Fatores determinantes para a escolha de um framework ideal e também cases de sucesso de várias empresas, dos mais diversos portes, ao redor do mundo

Marcos Daniel Petry

Desenvolvedor Python/Django na Universidade de Caxias do Sul. Vice Presidente da Associação Python Brasil, associação cujo objetivo é apoiar e disseminar o uso da linguagem Python no país. Jogador de poker =P

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,509
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
47
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Python mudando o modo de desenvolver para a web - Marcos Daniel Petry

  1. 1. Python mudando o modo de desenvolver para a internet Marcos Daniel Petry
  2. 2. Quem sou eu? • Marcos Daniel Petry =) • Bacharel em Ciências da Computação • Desenvolvedor Python desde 2005 • Já programei em Delphi, VB, PHP, Java ...
  3. 3. Quem está aí? • Desenvolvedores? • Conhecem python? • Trabalham com python?
  4. 4. 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...
  5. 5. 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....
  6. 6. 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
  7. 7. =(
  8. 8. =(((
  9. 9. Precisamos trabalhar com aplicações e não páginas!
  10. 10. Frameworks!
  11. 11. 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!
  12. 12. 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
  13. 13. O Resultado?
  14. 14. 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 =)
  15. 15. 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
  16. 16. Resultado? • Rápida implementação • Facil manutenção
  17. 17. 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
  18. 18. 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 );
  19. 19. 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)
  20. 20. 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>]
  21. 21. 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
  22. 22. 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'),  )
  23. 23. Mapeador de Endereços - Resultado? http://www.meusite.com/noticias.php?secao=12&categoria=12 http://www.meusite.com/noticias_ver.php?id=12
  24. 24. 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
  25. 25. Sistema de Templates • Separação de código e layout • Existem vários, independente do framework escolhido – Cheetah – Genshi – Jinja – Mako – ...
  26. 26. 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 %}
  27. 27. Ferramentas Auxiliares • Propicia o desenvolvimento rápido • Reutilização de código
  28. 28. Frameworks Python • Plone/Zope • Pylons • TurboGears • Django
  29. 29. Pylons • "Full Stack", extremamente flexivel • Reúsa vários componenetes já existentes • A substituiçã ode componentes é muito fácil
  30. 30. Turbo Gears • Full stack, mas também com reúso de componentes • Turbo Gears roda em cima do Pylons
  31. 31. 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! =)
  32. 32. Zope/Plone Servido se aplicações Content Management Framework
  33. 33. Google App Engine • Aplicações na Infraestrutura do Google • Autenticação pelo Google Accounts • Big Table • Vários Frameworks
  34. 34. Onde procurar ajuda? • Programadores python tem uma certa aversão a fóruns =P • Documentações • Listas de Discussão • IRC
  35. 35. Dúvidas?
  36. 36. Obrigado! • E-mail: marcospetry@gmail.com • Meu Blog: http://mdpetry.net • Twitter: @petry

×