SlideShare uma empresa Scribd logo
Entendendo Frameworks Web com Python Luiz Guilherme F. Aldabalde Flisol 2009 - UERJ
Apresentação
Conteúdo Introdução Python Conceituando os Frameworks Desafios da web  Dividir para conquistar -MVC Camada de Controle Camada de Apresentação Camada de Persistência Juntando tudo Frameworks Python Referências
Introdução O objetivo desta palestra é decompor um modelo típico de framework web, implementado em Python, procurando mostrar as características básicas dos seus componentes e os desafios para usa-lo de forma adequada.
Python Histórico Python foi criada em 1990 por Guido Van Rossum.  O nome da linguagem é uma homenagem ao grupo inglês de humor Monty Python.  Segundo Guido a linguagem foi concebida para ocupar o espaço que existia entre as linguagens C/C++ e o shell.
Python - Introdução Por que usar Python ? Fácil Aprendizado  Fácil Manutenção Possui uma extensa Biblioteca Padrão Possui uma poderosa Estruturas de Dados Nativas Disponível com código aberto e livre Interface para outras Linguagens ( Lua, Java, C)  Multi-plataforma É um canivete- suíço  !!!
Python - Características  Cada linha termina com ponto e vírgula (;) ou com um <enter > Cada bloco de instruções é definido pela identação  Comentário em uma linha é definido pelo símbolo tralha (#) Comentário em mais e uma linha podemos usar aspas triplas para começar e terminar (“”” texto comentado “””) Uma variável não é declarada, ela assume o tipo quando associada com um valor Resumindo  ...
“ Framework é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Frameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando nas exigências do software do que com detalhes tediosos de baixo nível do sistema.” fonte: wikipedia Framework “ A Web framework is a collection of packages or modules which allow developers to write Web applications or services without having to handle such low-level details as protocols, sockets or process/thread management.   ” fonte : wiki.python.org
Desafios da Web Desafios do ambiente web : Múltiplos ambientes a considerar ( browser, servidor)  Mais de uma linguagem envolvida  Separação design x aplicação Novos paradigmas web 2.0 : Ajax e Rich Internet Applications
Dividir para conquistar - MVC Compreendendo cada elemento podemos passar a ter uma visão melhor do todo Podemos usar partes destes elementos em soluções mais simples. O framework deve ser o  responsável pela integração destes elementos
Camada de Controle É o núcleo da aplicação Responsável por tratar os eventos, as solicitações e as respostas da aplicação Representado por um servidor que aguarda as informações provenientes do navegador e devolve uma resposta quando solicitado
Iniciando o uso do Python Resumo  : Servidor Web em Python Muito simples  As páginas são métodos de classes python Atualmente existem duas versões em uso: 3.01 e 2.2 O navegador passa, através da página HTML, as informações que são tratadas como parâmetros  pelas funções. http://www.cherrypy.org/ CherryPy
Iniciando o uso do Python Exemplo : import cherrypy class HelloWorld(object): def index(self): return &quot;Hello World!&quot; index.exposed = True # Cherrypy 2.2 #cherrypy.root = HelloWorld() #cherrypy.server.start() cherrypy.quickstart(HelloWorld()) CherryPy CherryPy 3
Camada de Apresentação É a aparência do seu sistema  Nesta camada são preparadas as páginas que serão exibidas através do uso de módulos de substituição que permitem gerar páginas a partir de modelos ( templates) utilizando tags específicas. Quanto mais isolada das regras de negócio da aplicação mais confortável para os web designers. Existem vários módulos em python  para resolver isso : zpt, kid, Genshi, ...  Trabalha em conjunto com o HTML, com o Javascript e o CSS.
Template kid <?xml version='1.0' encoding='utf-8'?> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:py=&quot;http://purl.org/kid/ns#&quot;> <head> <title>${title.upper()}</title> </head> <body> <h1 py:content=&quot;title&quot;>Title</h1> <p>  A message from Python:  </p> <blockquote py:content=&quot;message&quot;>  Message goes here.  </blockquote> </body> </html>
Usando o Template #-*- encoding: utf-8 -*- from kid import Template template = Template(file='hello.kid', title=&quot;Hello World&quot;, message=u&quot;Python é simples !&quot;) print template.serialize()
Camada de Persistência Nesta camada temos a oportunidade de gravar as informações em um banco de dados. A escolha do BD é muito importante e pode ser um fator de sucesso ou não da solução A dificuldade surge pela manipulação do banco. Comandos específicos e em várias linhas. A flexibilidade é um fator decisivo para o surgimento de uma camada de interface entre o banco e a aplicação
Iniciando o uso do Python Object-Relational Mappers Exemplos : SQLObject, STORM, SQLALCHEMY Permite criar uma camada de abstração entre o programador e o banco de dados, simplificando o código e melhorando a sua compreensão. O uso do BD fica mais prático, porque você acessa os registros ”diretamente” ORM
SQLObject SQLObject é um ”wrapper” feito em python para um bancos de dados.  O Objetivo é criar um nível abstração para o pgrogramador, de forma a evitar os comandos SQL. Atualmente pode ser utilizado com os seguintes bancos : MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL Server e Oracle. http://www.sqlobject.org/
SQLObject Cada tabela se transforma em uma classe Cada linha da tabela é uma instância As colunas se tornam atributos class Pessoa(SQLObject): nome = StringCol() sobrenome = StringCol() emails = MultipleJoin(”Email”) class Email(SQLOBject): pessoa = ForeignKey(”Pessoa”) tipo = EnumCol([”casa”, ”trabalho”]) correio = StringCol()
# -*- encode: latin -*- from sqlobject import * import os # Inicializa o banco db_filename = os.path.abspath(&quot;data.db&quot;) connection_string = &quot;sqlite:&quot; + db_filename connection = connectionForURI(connection_string) sqlhub.processConnection = connection #  [continua] SQLObject
# Tabela person do banco class Person(SQLObject): firstName = StringCol() middleInitial = StringCol(length = 1, default=None) lastName = StringCol() # Criar a uma tabela nova Person.createTable() # Grava uma linha nova no BD Person(firstName =&quot;Romeu&quot;, lastName=&quot;silas&quot;) SQLObject
Juntando tudo ... Automação CRUD Admin interface Templates e widgets Autenticação e controle de acesso  Proteção contra Sql Injection
Frameworks Python Zope/Plone TurboGears Django Web2py Pylons ...
Iniciando o uso do Python Composto pelos seguintes módulos : MochKit / Scriptaculous Kid / Geshi CherryPy SQLObject / SQLAlchemy TurboGears
Estrutura monolítica  Contém engine de templates e um ORM integrado Interface de administração  URL elegantes Muito boa documentação Grande comunidade no Brasil Django
-  Site oficial :  www.python.org - Site oficial no Brasil :  www.pythonbrasil.com.br - Manual Referência :  http://docs.python.org/ref/ref.html - Tutorial ( Português) : http://www.python.org/doc/current/tut/tut.html Alguns endereços  :  Referências
Lista SL-RJ :  groups.google.com/group/slrj Lista PythonRio  :  br.groups.yahoo.com/group/pythonrio/ Mais alguns endereços  :  Referências
- Python in a Nutshell – Alex Martelli – O'Reilly - Python Cookbook – Alex Martelli e David Ascher  - O'Reilly - Dive Into Python – Mark Pilgrim ( http://www.diveintopython.org/  ) - Aprendendo Python - Mark Lutz e David Ascher Livros :  Referências
Perguntas ?
Obrigado !!  Luiz Guilherme F. Aldabalde [email_address]

Mais conteúdo relacionado

Mais procurados (20)

JavaFX 1.2
JavaFX 1.2
Raphael Marques
 
Minicurso Yii2
Minicurso Yii2
X Simpósio de Informática do IFNMG - Januária
 
Spring & Struts
Spring & Struts
eduan
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 
Poo1 aula 2 - java - apresentação do netbeans e 1º programa
Poo1 aula 2 - java - apresentação do netbeans e 1º programa
Denis Sobrenome
 
Aula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SE
Evandro Júnior
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
Petronio Candido
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
Eduardo Bregaida
 
ADO.NET
ADO.NET
Leonardo Lourenço Silva
 
ASP.NET - Conceitos Básicos
ASP.NET - Conceitos Básicos
Leonardo Lourenço Silva
 
Java Web, o Tutorial
Java Web, o Tutorial
Rildo (@rildosan) Santos
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
Luis Borges Gouveia
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Fundamentos de Objetos Remotos
Fundamentos de Objetos Remotos
Denis L Presciliano
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Allyson Barros
 
Introdução C#
Introdução C#
Luis Fernando Marques
 
PHP 10 CodeIgniter
PHP 10 CodeIgniter
Regis Magalhães
 
ASP.NET - Web Services
ASP.NET - Web Services
Leonardo Lourenço Silva
 
Apresentação faef
Apresentação faef
Lucas Simões Maistro
 
Conhecendo o Visual Studio 11
Conhecendo o Visual Studio 11
Leonardo Lourenço Silva
 
Spring & Struts
Spring & Struts
eduan
 
Desenvolvimento web com CodeIgniter
Desenvolvimento web com CodeIgniter
Pedro Junior
 
Poo1 aula 2 - java - apresentação do netbeans e 1º programa
Poo1 aula 2 - java - apresentação do netbeans e 1º programa
Denis Sobrenome
 
Aula 1 - Introdução a linguagem JAVA SE
Aula 1 - Introdução a linguagem JAVA SE
Evandro Júnior
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
Petronio Candido
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
Eduardo Bregaida
 
Introdução ao JAVA (linguagem de programação WEB)
Introdução ao JAVA (linguagem de programação WEB)
Luis Borges Gouveia
 
Django - Desenvolvimento web ágil com Python
Django - Desenvolvimento web ágil com Python
Igor Sobreira
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Allyson Barros
 

Destaque (20)

Webcast certificacao microsoft
Webcast certificacao microsoft
Flavio Honda
 
Python para análise de dados
Python para análise de dados
Caique Lima
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afins
dcarneir
 
Boa apostila sql
Boa apostila sql
Rogerio Silva
 
9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_ii
pedro.prontocor
 
Hoje eu sou um dba
Hoje eu sou um dba
Lilian Barroso
 
Mineração de Dados com Mapas de Kohonen: Uma Abordagem no Setor Financeiro
Mineração de Dados com Mapas de Kohonen: Uma Abordagem no Setor Financeiro
Anderson Pinho
 
Sql apostila construcao de comandos
Sql apostila construcao de comandos
robinhoct
 
Banco de dados I - Aula 01 - Guardando Tudo no Armário
Banco de dados I - Aula 01 - Guardando Tudo no Armário
Manoel Afonso
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
julianabdpaiva
 
TDC 2011 - Arquitetura de desfesa contra injeção de SQL
TDC 2011 - Arquitetura de desfesa contra injeção de SQL
Luis Asensio
 
Quer ser um excelente dba
Quer ser um excelente dba
Vitor Fava
 
Curriculo2016
Curriculo2016
Eduardo Candido
 
Certificações em TI e o Mercado de Trabalho
Certificações em TI e o Mercado de Trabalho
jcmarcussojr
 
Descoberta de Conhecimento em Bancos de Dados e Mineração de Dados
Descoberta de Conhecimento em Bancos de Dados e Mineração de Dados
Eduardo de Lucena Falcão
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 
Apostila de banco de dados e sql
Apostila de banco de dados e sql
Yara Santos
 
Aprenda a Programar Direito!
Aprenda a Programar Direito!
Álvaro Justen
 
Introdução ao ORM
Introdução ao ORM
Leonardo Lourenço Silva
 
Python + algoritmo
Python + algoritmo
Felipe Marcel
 
Webcast certificacao microsoft
Webcast certificacao microsoft
Flavio Honda
 
Python para análise de dados
Python para análise de dados
Caique Lima
 
Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afins
dcarneir
 
9i fundamentos adm_banco_de_dados_ii
9i fundamentos adm_banco_de_dados_ii
pedro.prontocor
 
Mineração de Dados com Mapas de Kohonen: Uma Abordagem no Setor Financeiro
Mineração de Dados com Mapas de Kohonen: Uma Abordagem no Setor Financeiro
Anderson Pinho
 
Sql apostila construcao de comandos
Sql apostila construcao de comandos
robinhoct
 
Banco de dados I - Aula 01 - Guardando Tudo no Armário
Banco de dados I - Aula 01 - Guardando Tudo no Armário
Manoel Afonso
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
julianabdpaiva
 
TDC 2011 - Arquitetura de desfesa contra injeção de SQL
TDC 2011 - Arquitetura de desfesa contra injeção de SQL
Luis Asensio
 
Quer ser um excelente dba
Quer ser um excelente dba
Vitor Fava
 
Certificações em TI e o Mercado de Trabalho
Certificações em TI e o Mercado de Trabalho
jcmarcussojr
 
Descoberta de Conhecimento em Bancos de Dados e Mineração de Dados
Descoberta de Conhecimento em Bancos de Dados e Mineração de Dados
Eduardo de Lucena Falcão
 
Introdução a estruturas de dados em python
Introdução a estruturas de dados em python
Alvaro Oliveira
 
Apostila de banco de dados e sql
Apostila de banco de dados e sql
Yara Santos
 
Aprenda a Programar Direito!
Aprenda a Programar Direito!
Álvaro Justen
 
Anúncio

Semelhante a Entendendo Framework Web com Python (20)

Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 
Aula1
Aula1
mentrixmax
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
Eric Gallardo
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Alexandre Tarifa
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
César Augusto Pessôa
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
Jaydson Gomes
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
Norton Guimarães
 
Asp net mvc
Asp net mvc
Cleiton Estigarribia
 
Framework struts2v2.5
Framework struts2v2.5
Eduardo Gabina
 
Java Seminar
Java Seminar
armeniocardoso
 
Palestra
Palestra
Italo Lelis de Vietro
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
Alessandro Binhara
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity Framework
Luciano Condé
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4
Luciano Condé
 
Aula ASP.NET.pdf whatsap Whatsap pdf.com
Aula ASP.NET.pdf whatsap Whatsap pdf.com
Eltonlanga3
 
Desenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
Alexandre Tarifa
 
Trabalho jQuery
Trabalho jQuery
grupoucpel
 
Evolução do .NET Framework e do Visual Basic
Evolução do .NET Framework e do Visual Basic
Ricardo Guerra Freitas
 
Palestra - Symfony Framework MVC PHP 5
Palestra - Symfony Framework MVC PHP 5
Lucas Augusto Carvalho
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
Eric Gallardo
 
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Alexandre Tarifa
 
01 - Introdução a programação para internet v1.1
01 - Introdução a programação para internet v1.1
César Augusto Pessôa
 
Criando Aplicações .NET com o TheWebMind
Criando Aplicações .NET com o TheWebMind
Jaydson Gomes
 
ASP.NET e Visual Studio 2010
ASP.NET e Visual Studio 2010
Norton Guimarães
 
Interoperabilidade com .NET em ambiente Mainframe
Interoperabilidade com .NET em ambiente Mainframe
Alessandro Binhara
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity Framework
Luciano Condé
 
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Como DDD e Strategic Design estão nos ajudando a modernizar um Legado
Luiz Costa
 
Programação em Camadas com Entity Framework 4
Programação em Camadas com Entity Framework 4
Luciano Condé
 
Aula ASP.NET.pdf whatsap Whatsap pdf.com
Aula ASP.NET.pdf whatsap Whatsap pdf.com
Eltonlanga3
 
Desenvolvimento web com python e django
Desenvolvimento web com python e django
Igor Sobreira
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
Alexandre Tarifa
 
Trabalho jQuery
Trabalho jQuery
grupoucpel
 
Anúncio

Último (13)

Certified SAFe 6 Agilist
Certified SAFe 6 Agilist
Adail Viana Neto
 
modelo apresentação power point de TCC para se inspirar
modelo apresentação power point de TCC para se inspirar
marianaabelhao2024
 
Breve Histórico do Computador [2 de 2].pdf
Breve Histórico do Computador [2 de 2].pdf
jarlisonsantos1985
 
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
jarlisonsantos1985
 
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
destruidorschirmer
 
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
vieirapatricio94
 
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
ssuser0a4331
 
Capítulo 7 - Redes de computadores multimídia.ppt
Capítulo 7 - Redes de computadores multimídia.ppt
ssuser0a4331
 
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
ssuser1712ed
 
Como Criar uma Partição Bootável no HD Interno.pptx
Como Criar uma Partição Bootável no HD Interno.pptx
vieirapatricio94
 
Certified SAFe 6 Lean Portfolio Manager
Certified SAFe 6 Lean Portfolio Manager
Adail Viana Neto
 
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
destruidorschirmer
 
POAN-1 trabalho de antena de microfita.pptx
POAN-1 trabalho de antena de microfita.pptx
joaquimpaulo2306
 
modelo apresentação power point de TCC para se inspirar
modelo apresentação power point de TCC para se inspirar
marianaabelhao2024
 
Breve Histórico do Computador [2 de 2].pdf
Breve Histórico do Computador [2 de 2].pdf
jarlisonsantos1985
 
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
SISTEMAS OPERACIONAIS DE COMPUTADORES PARTE 1
jarlisonsantos1985
 
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
A-Historia-do-Java-Uma-Linguagem-que-Transformou-o-Cenario-da-Programacao.pptx
destruidorschirmer
 
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
G.6 Avarias Mais Comuns em Computadores TIC2.pptx
vieirapatricio94
 
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
PPT - Capítulo 6 - Redes sem fio e redes móveis.ppt
ssuser0a4331
 
Capítulo 7 - Redes de computadores multimídia.ppt
Capítulo 7 - Redes de computadores multimídia.ppt
ssuser0a4331
 
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
Joao Claudio Nunes Carvalho-Classificacao de filmes do Netflix.docx
ssuser1712ed
 
Como Criar uma Partição Bootável no HD Interno.pptx
Como Criar uma Partição Bootável no HD Interno.pptx
vieirapatricio94
 
Certified SAFe 6 Lean Portfolio Manager
Certified SAFe 6 Lean Portfolio Manager
Adail Viana Neto
 
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
A-Historia-da-Programacao-Orientada-a-Objetos.pptx
destruidorschirmer
 
POAN-1 trabalho de antena de microfita.pptx
POAN-1 trabalho de antena de microfita.pptx
joaquimpaulo2306
 

Entendendo Framework Web com Python

  • 1. Entendendo Frameworks Web com Python Luiz Guilherme F. Aldabalde Flisol 2009 - UERJ
  • 3. Conteúdo Introdução Python Conceituando os Frameworks Desafios da web Dividir para conquistar -MVC Camada de Controle Camada de Apresentação Camada de Persistência Juntando tudo Frameworks Python Referências
  • 4. Introdução O objetivo desta palestra é decompor um modelo típico de framework web, implementado em Python, procurando mostrar as características básicas dos seus componentes e os desafios para usa-lo de forma adequada.
  • 5. Python Histórico Python foi criada em 1990 por Guido Van Rossum. O nome da linguagem é uma homenagem ao grupo inglês de humor Monty Python. Segundo Guido a linguagem foi concebida para ocupar o espaço que existia entre as linguagens C/C++ e o shell.
  • 6. Python - Introdução Por que usar Python ? Fácil Aprendizado Fácil Manutenção Possui uma extensa Biblioteca Padrão Possui uma poderosa Estruturas de Dados Nativas Disponível com código aberto e livre Interface para outras Linguagens ( Lua, Java, C) Multi-plataforma É um canivete- suíço !!!
  • 7. Python - Características Cada linha termina com ponto e vírgula (;) ou com um <enter > Cada bloco de instruções é definido pela identação Comentário em uma linha é definido pelo símbolo tralha (#) Comentário em mais e uma linha podemos usar aspas triplas para começar e terminar (“”” texto comentado “””) Uma variável não é declarada, ela assume o tipo quando associada com um valor Resumindo ...
  • 8. “ Framework é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Frameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando nas exigências do software do que com detalhes tediosos de baixo nível do sistema.” fonte: wikipedia Framework “ A Web framework is a collection of packages or modules which allow developers to write Web applications or services without having to handle such low-level details as protocols, sockets or process/thread management. ” fonte : wiki.python.org
  • 9. Desafios da Web Desafios do ambiente web : Múltiplos ambientes a considerar ( browser, servidor) Mais de uma linguagem envolvida Separação design x aplicação Novos paradigmas web 2.0 : Ajax e Rich Internet Applications
  • 10. Dividir para conquistar - MVC Compreendendo cada elemento podemos passar a ter uma visão melhor do todo Podemos usar partes destes elementos em soluções mais simples. O framework deve ser o responsável pela integração destes elementos
  • 11. Camada de Controle É o núcleo da aplicação Responsável por tratar os eventos, as solicitações e as respostas da aplicação Representado por um servidor que aguarda as informações provenientes do navegador e devolve uma resposta quando solicitado
  • 12. Iniciando o uso do Python Resumo : Servidor Web em Python Muito simples As páginas são métodos de classes python Atualmente existem duas versões em uso: 3.01 e 2.2 O navegador passa, através da página HTML, as informações que são tratadas como parâmetros pelas funções. http://www.cherrypy.org/ CherryPy
  • 13. Iniciando o uso do Python Exemplo : import cherrypy class HelloWorld(object): def index(self): return &quot;Hello World!&quot; index.exposed = True # Cherrypy 2.2 #cherrypy.root = HelloWorld() #cherrypy.server.start() cherrypy.quickstart(HelloWorld()) CherryPy CherryPy 3
  • 14. Camada de Apresentação É a aparência do seu sistema Nesta camada são preparadas as páginas que serão exibidas através do uso de módulos de substituição que permitem gerar páginas a partir de modelos ( templates) utilizando tags específicas. Quanto mais isolada das regras de negócio da aplicação mais confortável para os web designers. Existem vários módulos em python para resolver isso : zpt, kid, Genshi, ... Trabalha em conjunto com o HTML, com o Javascript e o CSS.
  • 15. Template kid <?xml version='1.0' encoding='utf-8'?> <html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xmlns:py=&quot;http://purl.org/kid/ns#&quot;> <head> <title>${title.upper()}</title> </head> <body> <h1 py:content=&quot;title&quot;>Title</h1> <p> A message from Python: </p> <blockquote py:content=&quot;message&quot;> Message goes here. </blockquote> </body> </html>
  • 16. Usando o Template #-*- encoding: utf-8 -*- from kid import Template template = Template(file='hello.kid', title=&quot;Hello World&quot;, message=u&quot;Python é simples !&quot;) print template.serialize()
  • 17. Camada de Persistência Nesta camada temos a oportunidade de gravar as informações em um banco de dados. A escolha do BD é muito importante e pode ser um fator de sucesso ou não da solução A dificuldade surge pela manipulação do banco. Comandos específicos e em várias linhas. A flexibilidade é um fator decisivo para o surgimento de uma camada de interface entre o banco e a aplicação
  • 18. Iniciando o uso do Python Object-Relational Mappers Exemplos : SQLObject, STORM, SQLALCHEMY Permite criar uma camada de abstração entre o programador e o banco de dados, simplificando o código e melhorando a sua compreensão. O uso do BD fica mais prático, porque você acessa os registros ”diretamente” ORM
  • 19. SQLObject SQLObject é um ”wrapper” feito em python para um bancos de dados. O Objetivo é criar um nível abstração para o pgrogramador, de forma a evitar os comandos SQL. Atualmente pode ser utilizado com os seguintes bancos : MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL Server e Oracle. http://www.sqlobject.org/
  • 20. SQLObject Cada tabela se transforma em uma classe Cada linha da tabela é uma instância As colunas se tornam atributos class Pessoa(SQLObject): nome = StringCol() sobrenome = StringCol() emails = MultipleJoin(”Email”) class Email(SQLOBject): pessoa = ForeignKey(”Pessoa”) tipo = EnumCol([”casa”, ”trabalho”]) correio = StringCol()
  • 21. # -*- encode: latin -*- from sqlobject import * import os # Inicializa o banco db_filename = os.path.abspath(&quot;data.db&quot;) connection_string = &quot;sqlite:&quot; + db_filename connection = connectionForURI(connection_string) sqlhub.processConnection = connection # [continua] SQLObject
  • 22. # Tabela person do banco class Person(SQLObject): firstName = StringCol() middleInitial = StringCol(length = 1, default=None) lastName = StringCol() # Criar a uma tabela nova Person.createTable() # Grava uma linha nova no BD Person(firstName =&quot;Romeu&quot;, lastName=&quot;silas&quot;) SQLObject
  • 23. Juntando tudo ... Automação CRUD Admin interface Templates e widgets Autenticação e controle de acesso Proteção contra Sql Injection
  • 24. Frameworks Python Zope/Plone TurboGears Django Web2py Pylons ...
  • 25. Iniciando o uso do Python Composto pelos seguintes módulos : MochKit / Scriptaculous Kid / Geshi CherryPy SQLObject / SQLAlchemy TurboGears
  • 26. Estrutura monolítica Contém engine de templates e um ORM integrado Interface de administração URL elegantes Muito boa documentação Grande comunidade no Brasil Django
  • 27. - Site oficial : www.python.org - Site oficial no Brasil : www.pythonbrasil.com.br - Manual Referência : http://docs.python.org/ref/ref.html - Tutorial ( Português) : http://www.python.org/doc/current/tut/tut.html Alguns endereços : Referências
  • 28. Lista SL-RJ : groups.google.com/group/slrj Lista PythonRio : br.groups.yahoo.com/group/pythonrio/ Mais alguns endereços : Referências
  • 29. - Python in a Nutshell – Alex Martelli – O'Reilly - Python Cookbook – Alex Martelli e David Ascher - O'Reilly - Dive Into Python – Mark Pilgrim ( http://www.diveintopython.org/ ) - Aprendendo Python - Mark Lutz e David Ascher Livros : Referências
  • 31. Obrigado !! Luiz Guilherme F. Aldabalde [email_address]