O documento fornece uma introdução ao framework CherryPy para desenvolvimento web em Python. Ele discute brevemente a história de Python e CherryPy, características e vantagens de Python, empresas que usam Python, e como usar CherryPy para desenvolvimento web rápido.
3. Breve Histórico
Linguagem Criada em 1990, Por Guido van
Rossun
Foco em usuários como físicos e engenheiros
Python foi concebida através de uma
linguagem chamada ABC.
4. Características
Linguagem Interpretada
Tipagem dinâmica
Controle de Bloco é feita por indentação
Oferece tipos de alto nível
E orientado a objetos
Fácil aprendizado
Open Source
Biblioteca padrão muito rica
6. Por que Python?
Os conceitos fundamentais da linguagem são simples de entender;
A sintaxe do Python é clara e fácil de aprender;
Os tipos pré-definidos em Python são poderosos e simples de usar;
O interpretador Python permite aprender e testar rapidamente
trechos de código
Python é expressivo, com abstrações de alto nível => código curto e
rápido desenvolvimento
7. Por que Python?
Prototipação rápida
Desenvolvimento Web
Acesso a banco de dados
Código “enxuto”!
Computação numérica e científica
Jogos
3D
8. Quem Usa?
Google (aplicações Web).
Yahoo (aplicações Web).
Microsoft (IronPython: Python para .NET).
Nokia (disponível para as linhas recentes de celulares e
PDAs).
Disney (animações 3D).
Funceme(aplicações com Radares)
Mais casos:
http://www.python.org/about/success/
9. Como Usar?
Nas linguagens Interpretadas é executada utilizando o
interpretador lê o código fonte e interpreta diretamente,
durante a sua execução.
Tanto pode utilizar no Shell ou Uma IDE
10. Instalando
Instalando
Entre no link http://www.python.org/getit/ e baixe
para sua plataforma.
No windows: clique duas vezes, next, next, … e finish.
No linux: qualquer distribuíção já vem com Python!
11. IDE Disponíveis
Idle :
Já vem com o Python. É bem simples de ser usado.
Komodo-Edit:
E uma excelente opção de editor, bastante rico em recursos tais como
autocomplete, multi-language e outros.
Eclipse:
Ideal para desenvolvimento Java. Mas existem plugins para se desenvolver em
Python.
Pycham:
E proprietário, Possui um conjunto de ferramentas úteis para um
desenvolvimento produtivo.
12. Utilizando o Shell no LINUX
Para chamar o interpretador Python apenas digite “python” no
prompt do shell:
Quando o shell é iniciado aparecerão três ‘>’ (“>>>”) indicando que
ele está ativo e pode receber comandos
$ python
Python 2.5.1 (r251:54863, Sep 4 2007, 19:00:19)
[GCC 4.1.2] on linux2
Type "help", "copyright", "credits" or "license" for
more information.
>>>
$ python
Python 2.5.1 (r251:54863, Sep 4 2007, 19:00:19)
[GCC 4.1.2] on linux2
Type "help", "copyright", "credits" or "license" for
more information.
>>>
13. Utilizando o IDLE
Acessar IDLE, depois em file e New File
(ctrl + n), abrindo o editor para
desenvolver o programa .
15. Saida
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Print “Hello, World!”Print “Hello, World!”
JAVA
Python
16. Saída
Salvar com a extensão .py
Exemplo: alomundo.py
Entre na pasta que está o arquivo
cd nomedapasta
Em seguida, rodar o comando:
python alomundo.py
No IDLE
Para salvar, file e save (Ctrl+S)
e com extensão .py
Em seguida em Run, para
rodar o programa.
No Shell
17. Definições de Variáveis
Sintaxe
nomeDaVariavel = valorAtribuido
Descobrir o tipo atual de uma variável, utiliza a função type()
type(nome)
nome = “python” #String
num = 1 # valor inteiro
preco = 10.99 # valor ponto flutuante
t = True # valor booleano
nome = “python” #String
num = 1 # valor inteiro
preco = 10.99 # valor ponto flutuante
t = True # valor booleano
18. Entrada
Sintaxe:
nomeDaVariavel = input(’Texto para Saída’)
Para capturar informações do usuário podemos usar duas
funções:
input(“mensagem”)
Espera que o usuários digite comandos ou
valores
raw_input(“mensagem”)
Espera strings
input(“mensagem”)
Espera que o usuários digite comandos ou
valores
raw_input(“mensagem”)
Espera strings
19. Delimitações
Uso de “;” no fim de comandos não é obrigatório
Blocos delimitados por indentação
def soma(a):
. . . .return a+1
print soma(10)
def soma(a):
. . . .return a+1
print soma(10)
Não é um erro
sintático, mas é
desnecessário
e portanto
deselegante
20. Comentários
Comentários de são feitos usando ‘#’
Para comentários de bloco pode-se usar string multilinhas com
‘”””’
“”” def inc(a):
. . . .return a+1”””
#print inc(10)
“”” def inc(a):
. . . .return a+1”””
#print inc(10)
21. Codificação do Arquivo
A codificação é necessário para suportar caracteres que não fazem
parte da linguagem inglesa, no código fonte do programa
o texto “#-*- coding: <encoding> -*#-” no inicio do arquivo, no
qual <encoding> é a codificação do arquivo (geralmente latin1 ou
utf-8)
#!/usr/bin/env python
#-*-coding:utf-8-*-
#!/usr/bin/env python
#-*-coding:utf-8-*-
Indica o caminho
para o
interpretador
usado em
sistemas UNIX
Indica o caminho
para o
interpretador
usado em
sistemas UNIX
22. Importando Módulos Externos
Existe duas Forma de Importar Módulos externos:
Pelo comando import:
Pelo comando from:
import <modulo>
from<modulo>import <moduloespecifico>
23. Exercício:
1.Faça um programa que leia da entrada padrão um
número, em seguida imprima ele na tela.
2.Agora faça um programa que leia dois números e em
seguida imprime o resultado da multiplicação deles
24. Controle de Fluxo
Nada de parênteses! Nada de chaves!
IF
if <condição>:
<bloco de código>
elif <condição>:
<bloco de código>
else:
<bloco de código>
if <condição>:
<bloco de código>
elif <condição>:
<bloco de código>
else:
<bloco de código>
25. Usando If
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-
x = input("Entre com um numero inteiro: ")
if x < 0:
print 'Numero negativo'
elif x == 0:
print 'Zero'
elif x == 1:
print 'Um'
else:
print 'Numero positivo'
#! /usr/bin/python
# -*- coding: iso-8859-1 -*-
x = input("Entre com um numero inteiro: ")
if x < 0:
print 'Numero negativo'
elif x == 0:
print 'Zero'
elif x == 1:
print 'Um'
else:
print 'Numero positivo'
26. Controle de Fluxo
O loop While, tem como função repetir um bloco de
comando ate que aconteça uma parada.
while expressão2:
Comando3
...
27. Controle de Fluxo
O for em Python podemos “varrer” uma sequencia que se difere
de outra linguagens por ser utilizado como iterador de progressão
aritmética.
for variavel in rage(ni,nf-1):
Cria uma lista a partir do
inteiro ni até o inteiro nf-1
Cria uma lista a partir do
inteiro ni até o inteiro nf-1
for variavel in lista
29. Estrutura de Dados: Listas [ ]
É uma sequência de valores indexadas por um inteiro. Uma lista
pode conter qualquer tipo de valor, incluindo valores de tipos
mistos.
numeros = [1, 2, 3]
nomes = [ 'alberto', 'carlos', 'simone' ]
misto = [ 1,2,'alberto',3.5,'simone' ]
listas = [ numeros, nomes, misto ]
30. Estrutura de Dados: Listas [ ]
Os elementos da lista podem ser acessados por meio de índices que
vão de 0 até o comprimento da lista-1
lista = [ ‘maria’,’paulo’,’jose’,’carlos’]
00 11 22 33
>>> lista [0]
maria
>>> lista [0]
maria
31. Estrutura de Dados: Listas [ ]
Fatias, ou slices, de uma lista podem ser geradas
facilmente com o “:”
Lista = [inicio:final]
>>> n = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ]
>>> n[2:4]
[3, 4]
33. Exercício:
1.Faça um programa que leia da entrada padrão um
número, em seguida adicione e imprima a lista .
2.Seguindo o exemplo anterior:
Crie uma nova lista e adicione na lista anterior;
Remova um elemento na Posição 4;
Imprima toda a lista;
35. Python: Orientado a Objeto
“Orientação a objetos, OO, é um termo que descreve uma série de
técnicas para estruturar soluções para problemas computacionais.
é um paradigma de programação no qual um programa e
estruturado em objetos, e que enfatiza os aspectos abstração,
encapsulamento, polimorfismo e herança.”
36. E tudo é um Objeto
Tudo em Python é no fim um objeto!
list3.append(‘a’)
Novos objetos (classes) podem ser facilmente adicionados
aos tipos de dados já existentes em Python!
De fato, programar em Python é normalmente feito de
forma orientado a objetos!
37. Definição de uma Classe
A forma mais simples de definição de uma classe pode ser
descrita dessa maneira:
>>> class NomeDaClasse:
<comando-1>
.
.
.
<comando-N>
>>> class NomeDaClasse:
<comando-1>
.
.
.
<comando-N>
38. Definição de um Metodo
Utiliza o comando def, para definir um método de uma
classe:
>>> class HelloMundo:
def alomundo(self):
print “Ola Mundo“
>>> class HelloMundo:
def alomundo(self):
print “Ola Mundo“
39. Instanciando uma Classe
Quando criamos a classe HelloMundo, criamos um novo
tipo de dado. Os membros deste novo tipo são chamados
instâncias deste tipo ou objetos. Criar uma nova instância
é instanciar. Para instanciar o objeto HelloMundo:
...
alo=HelloMundo()
alo.alomundo()
...
alo=HelloMundo()
alo.alomundo()
40. Definição de uma Classe
Exemplo:
class HelloMundo: #Definindo a Classe
def alomundo(self): #Definindo o Método
print “Ola Mundo“
alo=HelloMundo() #criando uma instância da classe
alo.alomundo()
41. Definição da Classe
Privados
Atributos e métodos que só podem ser acessados
dentro da classe, usa-se “__” no início do nome
Protected
Apenas convenção e usa-se apenas um “_” no
nome de métodos ou atributos, ex. _telefone
class musica:
_compositor=“Luiz Gonzaga”
__ritmo=“Baiao”
m=musica()
m._compositor
42. Definição da Classe
class Contador(object):
def __init__(this):
this.contagem = {}
def incluir(this, item):
qtd = this.contagem.get(item, 0) + 1
this.contagem[item] = qtd
def contar(this, item):
return this.contagem[item]
43. Definição da Classe
class Contador(object):
def __init__(this):
this.contagem = {}
def incluir(this, item):
qtd = this.contagem.get(item, 0) + 1
this.contagem[item] = qtd
def contar(this, item):
return this.contagem[item]
Em Python
Não Usamos
this
Em Python
Não Usamos
this
45. Argumento do Método self
• Em todos métodos associados à instância definido dentro
de uma classe devem ter o argumento self definido como
primeiro argumento.
• Maior flexibilidade na chamada de métodos.
• É a referência para a própria instância da classe
• Mesmo que você tem um método que não recebe nenhum
argumento, ainda assim você deve definir que este tenha o
argumento self.
46. Construtor __init__( )
é um método especial que é invocado automaticamente
quando um novo objeto é criado e que inicializa os
atributos deste objetos.
E opcional!
class Hello:
def _init_ (self,nome):
self.nome = nome
48. Herança
Uma classe pode herdar a definição de outra classe
Python não tem a palavra ‘extends’ como em Java
A Herança multipla é suportada
SuperClasse
SubClasse SubClasse
49. Exemplo Herança
Para definir uma subclasse, coloque o nome da superclasse entre
parênteses depois do nome da subclasse na primeira linha da
definição.
class Veiculo:
def andar(self):
print "Andei"
class Carro(Veiculo):
def andar(self):
_numRodas=4
gol = Carro()
gol.andar()
50. Sobrecarga
Redefinição de métodos já existente, com o
mesmo nome.
Quando um método da classe pai é redefinido na
classe filha
Diz-se que o método foi sobrecarregado
(overloaded)
51. Redefinindo Métodos
class Veiculo:
def andar(self):
print "Andei"
class Carro(Veiculo):
def andar(self):
print ' Andei de Carro'
gol = Carro()
gol.andar()
52. Redefinindo Métodos
class Veiculo:
def andar(self):
print "Andei"
class Carro(Veiculo):
def andar(self):
print ' Andei de Carro'
gol = Carro()
gol.andar()
53. Redefinindo Métodos
class Veiculo:
def andar(self):
print "Andei"
class Carro(Veiculo):
def andar(self):
print ' Andei de Carro'
gol = Carro()
gol.andar()
Andei de
Carro
Andei de
Carro
54. Redefinindo Métodos
class Veiculo:
def andar(self):
print "Andei"
class Carro(Veiculo):
def andar(self):
Veiculo.andar(self)
gol = Carro()
gol.andar()
Você pode chamar
o método da
superclasse
Você pode chamar
o método da
superclasse
55. Redefinindo Métodos
Você pode redefinir métodos declarados na superclasse
O mesmo vale para o método __init__ .
No método __init__ das subclasses:
parentClass.__init__(self,x,y)
onde parentClass é o nome da classe pai.
56. Redefinindo Métodos
class Veiculo:
def __init__(self,numPassageiros):
self.numPassageiros = numPassageiros
def andar(self):
print "Andei"
class Carro(Veiculo):
_numRodas= None
def __init__(self, _numRodas,numPassageiros):
Veiculo. __init__(self,numPassageiros)
self._numRodas= _numRodas
def qtdPassageiros(self):
print self.numPassageiros
gol = Carro(4,6)
gol.qtdPassageiros()
class Veiculo:
def __init__(self,numPassageiros):
self.numPassageiros = numPassageiros
def andar(self):
print "Andei"
class Carro(Veiculo):
_numRodas= None
def __init__(self, _numRodas,numPassageiros):
Veiculo. __init__(self,numPassageiros)
self._numRodas= _numRodas
def qtdPassageiros(self):
print self.numPassageiros
gol = Carro(4,6)
gol.qtdPassageiros()
Construtor da
classe filha tem
que chamar o
da
classe pai
58. Polimorfismo
Polimorfismo literalmente significa várias formas.
Em Python, um método é polimórfico se ele tem
diferentes implementações numa família de classes
Ex:
O operador ‘+’ é polimórfico !
se refere a diferentes operações quando usado, por exemplo, em
inteiros e strings
59. Exemplo Polimorfismo
class Mamifero:
def som(self):
print 'emitir um som'
class Homem(Mamifero):
def som(self):
print ' Oi'
class Cachorro(Mamifero):
def som(self):
print ' Wuff ! Wuff'
class Gato(Mamifero):
def som(self):
print ' Meaww'
mamifero = Mamifero()
mamifero.som()
animais = [ Homem(),Cachorro(),Gato()]
for animal in animais:
animal.som()
60. Exercício
Crie uma Classe Chamada Conta Corrente,
declarando o construtor com atributo numero e o
método creditar() e debitar()
Crie uma Classe Poupança tendo como atributo taxaDeJuros e
com o metodo renderJuros(), que herda de Conta Corrente e
64. Características
Uma simples e poderosa biblioteca do Python
Um framework Python orientada a objetos web.
Pacote auto-contido, só necessita do Python
Não intrusivo
Já vem com Servidor web
Separa o código do layout do HTML
É Gratis
65. Por que Cherrypy
Tem uma interface limpa;
É muito pythônico; ou seja, ele segue as convenções do
Python muito bem (código é escassa e não poluente);
Maturidade, tem muitas versões estáveis finais;
Tem uma comunidade dedicada que desenvolve
aplicativos implementados CherryPy;
66. Perfil do Desenvolvedor
Algum conhecimento da linguagem de
programação Python.
Alguma experiência com programação orientada a
objetos básica.
Alguns conhecimentos de HTML, que é necessária
a construção de páginas web.
67. Instalação Linux
Baixe a versão mais recente CherryPy do repositório .
Descompacte / untar os arquivos
Vá para o diretório criado pela extração do arquivo.
Tipo "python setup.py install" para instalar o módulo
CherryPy
68. Instalação Windows
Para instalar o CherryPy basta fazer um download da
biblioteca:
https://pypi.python.org/pypi/CherryPy
Selecione o arquivo que termina em "exe“ e next
69. Algumas Definições: Servidor Web
É uma interface que lida com o protocolo HTTP
Seu objetivo é transformar pedidos HTTP em entidades
que são passadas para o servidor de aplicação e então
transformar a informação retornada pelo servidor de
aplicação em uma resposta HTTP.
70. Algumas Definições
Aplicação:
É um pedaço de software que pega uma unidade de informação
e aplica nela a regra do negócio e retorna uma unidade
processada de informação.
Servidor de Aplicação:
É um componente que hospeda uma ou mais aplicações.
Servidor de Aplicação Web:
É simplesmente a junção de um servidor web com
um servidor de aplicação em um componente.
72. Objetos de Publicação
Qualquer objeto agregado ao objeto root é dito objeto publicado,
isto significa que o objeto é acessível via rotina interna de
mapeamento do objeto URL.
Entretanto, não significa que o objeto é diretamente acessível via
Web, para que isto ocorra o objeto deve ser exposto
73. Expondo Objetos
• A exposição de objetos em cherrypy são permitidos pelo atributo
exposed, que pode ser diretamente setados para objetos que são
chamados
• Existe duas formas:
class Root:
def index(self):
...
index.exposed = True
@cherrypy.expose
def index(self):
74. Minha Primeira Aplicação
# -*- coding: iso-8859-1 -*- # Alfabeto Latino
import cherrypy # carregando biblioteca
class HelloWorld:
def index(self):
return "Alô Mundo"
index.exposed = True # permite definir quais métodos serão expostos na Web
cherrypy.quickstart(HelloWorld(),’/’) #publica instância da classe e inicia servidor
URI-> http://localhost:8080
75. Minha Primeira Aplicação
# -*- coding: iso-8859-1 -*- # Alfabeto Latino
import cherrypy # carregando biblioteca
class HelloWorld:
def index(self):
return "Alô Mundo"
index.exposed = True # permite definir quais métodos serão expostos na Web
cherrypy.quickstart(HelloWorld(),’/ ’) #publica instância da classe e inicia servidor
URI-> http://localhost:8080
Neste caso particular o site
raiz é mapeado pelo método
index()
76. Arquivo de configuração do CherryPy
O CherryPy usa um simples arquivo de configuração para
customizar seu comportamento.
• Para executar este arquivo de configuração para o site use
cherrypy.config.update(arquivo_ou_dicionário)
#global.cfg
[global]
server.socket_port = 8000
server.thread_pool = 10 # quantas thread o servidor pode iniciar
tools.sessions.on = True # habilita sessão, usada sites complexos
tools.staticdir.root = "/home/site" # diretório onde estão aplic.
estáticas
[/static]
tools.staticdir.on = True
tools.staticdir.dir = "static"
77. Encontrando o objeto correto
Ao receber uma URI, o CherryPy reparte ela em componentes de
caminho(path) e procura um objeto no site que é a melhor resposta
para esta URI particular.
Para cada componente de caminho ele tenta encontrar um objeto de
mesmo nome, começando pela raiz(root) e vai descendo por cada
componente até encontrá-lo.
78. Recebendo dados de Formulários HTML
Qualquer método pode receber dados adicionais do formulário
HTML usando argumentos (keyword arguments).
<form action=“nomeMetodo " method="post">
campos do formulário
aqui dentro das tags
</form> GET é o método HTML padrão.
Para submeter um formulário
HTML usando POST é preciso
especificar no atributo “method”
o valor “POST”.
GET é o método HTML padrão.
Para submeter um formulário
HTML usando POST é preciso
especificar no atributo “method”
o valor “POST”.