Python mudando o modo de desenvolver para a web - Marcos Daniel Petry
tchelinux
607 views
39 slides
Jun 22, 2010
Slide 1 of 39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
About This Presentation
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 l...
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
Size: 1.36 MB
Language: pt
Added: Jun 22, 2010
Slides: 39 pages
Slide Content
Python mudando o modo de Python mudando o modo de
desenvolver para a internetdesenvolver para a internet
Marcos Daniel Petry
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 ...
Quem está aí?Quem está aí?
•Desenvolvedores?
•Conhecem python?
•Trabalham com python?
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...
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....
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
=(=(
=(((=(((
Precisamos trabalhar com Precisamos trabalhar com
aplicações e não páginas!aplicações e não páginas!
Frameworks!Frameworks!
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!
SegurançaSegurança
•Por Linguagem:
•Python: 82
•PHP: 11899
JoomlaDrupalZendCake ZopePloneDjango
0
100
200
300
400
500
600
700
Dados da National Vulnerability Database, em 18/06/2010
http://web.nvd.nist.gov/view/vuln/search
O Resultado?O Resultado?
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 =)
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
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
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
);
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)
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>]
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
Mapeador de EndereçosMapeador de Endereços
urlpatterns = patterns(' noticias.views',
url(r'^$', 'index', name="prindex"),
url(r'^noticia/(?P<secao>)/(?P<categoria>)/$', 'secao', name="notsecao"),
url(r'^noticia/(?P<nome>[\\d\w]+).html$', 'artigo', name='notdetalhe'),
)
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
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
Sistema de TemplatesSistema de Templates
•Separação de código e layout
•Existem vários, independente do framework
escolhido
–Cheetah
–Genshi
–Jinja
–Mako
–...
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 %}
Ferramentas AuxiliaresFerramentas Auxiliares
•Propicia o desenvolvimento rápido
•Reutilização de código
PylonsPylons
•"Full Stack", extremamente flexivel
•Reúsa vários componenetes já existentes
•A substituiçã ode componentes é muito fácil
Turbo GearsTurbo Gears
•Full stack, mas também com reúso de
componentes
•Turbo Gears roda em cima do Pylons
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! =)
Zope/PloneZope/Plone
Servido se aplicações Content Management
Framework
Google App EngineGoogle App Engine
•Aplicações na Infraestrutura do Google
•Autenticação pelo Google Accounts
•Big Table
•Vários Frameworks
Onde procurar ajuda?Onde procurar ajuda?
•Programadores python tem uma certa aversão a
fóruns =P
•Documentações
•Listas de Discussão
•IRC