Python mudando o modo de desenvolver para a internet

2,750 views

Published on

Palestra ministrada no evento TcheLinux 2010 em Caxias do Sul - RS

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

No Downloads
Views
Total views
2,750
On SlideShare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
61
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Python mudando o modo de desenvolver para a internet

  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

×