Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Python mudando o modo de desenvolver para a internet

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

  • Be the first to comment

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

×