python mudando o modo de desenvolver para a internet

39
Python mudando o modo de Python mudando o modo de desenvolver para a internet desenvolver para a internet Marcos Daniel Petry

Upload: marcos-daniel-petry

Post on 11-Jun-2015

2.360 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Python mudando o modo de desenvolver para a internet

Python mudando o modo de Python mudando o modo de desenvolver para a internetdesenvolver para a internet

Marcos Daniel Petry

Page 2: Python mudando o modo de desenvolver para a internet

Quem sou eu?Quem sou eu?

• Marcos Daniel Petry =)• Bacharel em Ciências da Computação• Desenvolvedor Python desde 2005• Já programei em Delphi, VB, PHP, Java ...

Page 3: Python mudando o modo de desenvolver para a internet

Quem está aí?Quem está aí?

• Desenvolvedores?• Conhecem python?• Trabalham com python?

Page 4: Python mudando o modo de desenvolver para a internet

Há muito tempo atrás...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...

Page 5: Python mudando o modo de desenvolver para a internet
Page 6: Python mudando o modo de desenvolver para a internet

Iniciada a evolução...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....

Page 7: Python mudando o modo de desenvolver para a internet

A era PHP e ASPA 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

Page 8: Python mudando o modo de desenvolver para a internet

=(=(

Page 9: Python mudando o modo de desenvolver para a internet

=(((=(((

Page 10: Python mudando o modo de desenvolver para a internet
Page 11: Python mudando o modo de desenvolver para a internet

Precisamos trabalhar com Precisamos trabalhar com aplicações e não páginas!aplicações e não páginas!

Page 12: Python mudando o modo de desenvolver para a internet

Frameworks!Frameworks!

Page 13: Python mudando o modo de desenvolver para a internet
Page 14: Python mudando o modo de desenvolver para a internet

Mas por que Python?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!

Page 15: Python mudando o modo de desenvolver para a internet

SegurançaSegurança• Por Linguagem:• Python: 82• PHP: 11899

Joomla Drupal Zend Cake Zope Plone Django0

100

200

300

400

500

600

700

Dados da National Vulnerability Database, em 18/06/2010

http://web.nvd.nist.gov/view/vuln/search

Page 16: Python mudando o modo de desenvolver para a internet

O Resultado?O Resultado?

Page 17: Python mudando o modo de desenvolver para a internet

O que é necessário para um Framework O que é necessário para um Framework WEB?WEB?

• Alto nível

• Orientado a aplicações

• Que respeite um paradigma de projeto

• Desenvolvimento rápido

• Open Source =)

Page 18: Python mudando o modo de desenvolver para a internet

Como conseguimos isso?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

Page 19: Python mudando o modo de desenvolver para a internet

Resultado?Resultado?

• Rápida implementação• Facil manutenção

Page 20: Python mudando o modo de desenvolver para a internet

Mapeamento Objeto-RelacionalMapeamento 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

Page 21: Python mudando o modo de desenvolver para a internet

Mapeamento Objeto-RelacionalMapeamento 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);

Page 22: Python mudando o modo de desenvolver para a internet

Mapeamento Objeto-RelacionalMapeamento 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)

Page 23: Python mudando o modo de desenvolver para a internet

Mapeamento Objeto-RelacionalMapeamento 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>]

Page 24: Python mudando o modo de desenvolver para a internet

Mapeador de EndereçosMapeador 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

Page 25: Python mudando o modo de desenvolver para a internet

Mapeador de EndereçosMapeador 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>[\­\d\w]+).html$', 'artigo', name='not­detalhe'),

 )

Page 26: Python mudando o modo de desenvolver para a internet

Mapeador de Endereços - Resultado?Mapeador de Endereços - Resultado?

http://www.meusite.com/noticias.php?secao=12&categoria=12

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

Page 27: Python mudando o modo de desenvolver para a internet

Mapeador de Endereços - Resultado?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

Page 28: Python mudando o modo de desenvolver para a internet

Sistema de TemplatesSistema de Templates

• Separação de código e layout

• Existem vários, independente do framework escolhido– Cheetah– Genshi– Jinja– Mako – ...

Page 29: Python mudando o modo de desenvolver para a internet

Sistema de TemplatesSistema 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 %}

Page 30: Python mudando o modo de desenvolver para a internet

Ferramentas AuxiliaresFerramentas Auxiliares

• Propicia o desenvolvimento rápido• Reutilização de código

Page 31: Python mudando o modo de desenvolver para a internet

Frameworks PythonFrameworks Python

• Plone/Zope• Pylons• TurboGears• Django

Page 32: Python mudando o modo de desenvolver para a internet

PylonsPylons

• "Full Stack", extremamente flexivel• Reúsa vários componenetes já existentes• A substituiçã ode componentes é muito fácil

Page 33: Python mudando o modo de desenvolver para a internet

Turbo GearsTurbo Gears

• Full stack, mas também com reúso de componentes

• Turbo Gears roda em cima do Pylons

Page 34: Python mudando o modo de desenvolver para a internet

DjangoDjango

• 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! =)

Page 35: Python mudando o modo de desenvolver para a internet

Zope/PloneZope/Plone

Servido se aplicações Content Management Framework

Page 36: Python mudando o modo de desenvolver para a internet

Google App EngineGoogle App Engine

• Aplicações na Infraestrutura do Google• Autenticação pelo Google Accounts• Big Table• Vários Frameworks

Page 37: Python mudando o modo de desenvolver para a internet

Onde procurar ajuda?Onde procurar ajuda?

• Programadores python tem uma certa aversão a fóruns =P

• Documentações• Listas de Discussão• IRC

Page 38: Python mudando o modo de desenvolver para a internet

Dúvidas?Dúvidas?

Page 39: Python mudando o modo de desenvolver para a internet

Obrigado!Obrigado!

• E-mail: [email protected]• Meu Blog: http://mdpetry.net• Twitter: @petry