Python cherrypy

17
Servidor de aplicação WEB Simples e Poderosa biblioteca Python para desenvolvedores WEB Pontos Fortes – simplicidade, auto- contido(só usa Python), não intrusivo (não precisamos ficar fazendo suposições de uso), software aberto a discussões Em windows basta instalar o software no diretório Python(versão 2.4 em diante) Servidor de aplicação WEB – Interface que lida com o protocolo HTTP + componente que hospeda uma ou mais aplicações (servidor WEB + servidor de aplicação)

description

CherryPy servidor web escrito em Python

Transcript of Python cherrypy

Page 1: Python cherrypy

Servidor de aplicação WEB

Simples e Poderosa biblioteca Python para desenvolvedores WEB

Pontos Fortes – simplicidade, auto-contido(só usa Python), não intrusivo (não precisamos ficar fazendo suposições de uso), software aberto a discussões

Em windows basta instalar o software no diretório Python(versão 2.4 em diante)

Servidor de aplicação WEB – Interface que lida com o protocolo HTTP + componente que hospeda uma ou mais aplicações (servidor WEB + servidor de aplicação)

Page 2: Python cherrypy

Servidor de aplicação WEB

Servidor WEB – Apache → CherryPy roda no Apache

Servidor de Aplicação → responsável pela infra-estrutura para rodar aplicação (middleware – segurança, balanceamento,tratamento de exceções)

J2EE, JBOSS – roda Java, IIS – windows CherryPy – roda no seu próprio servidor

Page 3: Python cherrypy

Servidor de aplicação WEB

1a. Aplicação WEB – Alô Mundo (alomundo.py)# -*- coding:iso-8859-1 -*-import cherrypyclass AloMundo: def index(self): return “Alô Mundo” index.exposed=True

cherrypy.quickstart(AloMundo()) Como executar: python alomundo.py Browser: http://localhost:8080/

Page 4: Python cherrypy

Servidor de aplicação WEB

Servidor é iniciado na porta: 8080 Método index() - mapeia o site raiz Classe AloMundo define um método index que

será exposto e o servidor chama AloMundo.index() - similar a página index.html para servidores normais

Objeto publicado – qualquer objeto agregado a página principal – significa que pode ser publicado

Expor Objetos – feito através do atributo exposed

Page 5: Python cherrypy

Servidor de aplicação WEB

Expondo o objeto corretoPara cada URI (identificador uniforme de recursos)

apenas um objeto pode ser chamado e o resultado é uma página que pode ser estática ou dinâmica (página dinâmica resultado do processamento de uma aplicação). Isso em CherryPy é habilitado através de:

- index.exposed- @cherrypy.expose # decorator- exposed=True (métodos especiais __call__)

Page 6: Python cherrypy

Servidor de aplicação WEB

Definindo o objeto correto – o mapeamento do CherryPy é simples.

root=AloMundo()root.PaginaUm=UmaPag()root.OutraPag=OutraPag()root.OutraPag.Pagina=Pagina()

Page 7: Python cherrypy

Servidor de aplicação WEB

#-*-coding:iso-8859-1-*-import cherrypy

class PaginaUm: def index(self): return "Página um" index.exposed=True def pagina(self): return "página" pagina.exposed=True

class OutraPag: @cherrypy.expose def index(self): return "Outra Página"

class PaginaDois: def index(self): return "Página dois" index.exposed=True

class AloMundo: paginaum=PaginaUm() outrapag=OutraPag() paginadois=PaginaDois() @cherrypy.expose def index(self): return "Alô Mundo"

cherrypy.quickstart(AloMundo()) #root

Page 8: Python cherrypy

Servidor de aplicação WEB - login

#-*-coding:iso-8859-1 -*-import cherrypy class PaginaUm(object): @cherrypy.expose def index(self): return "Página Um" class alomundo: def index(self): return """<form action="doLogin" method="post"> <p>Usuário</p> <input type="text" name="username" value="" size="15" maxlength="40"/> <p>Senha</p> <input type="password" name="password" value="" size="10" maxlength="40"/> <p><input type="submit" value="Login"/></p> <p><input type="reset" value="Clear"/></p> </form>""" index.exposed=True def doLogin(self,username=None,password=None): return "Olá "+username+" "+password doLogin.exposed=True

paginaum=PaginaUm() cherrypy.quickstart(alomundo())

Page 9: Python cherrypy

Servidor de aplicação WEB

Passando parâmetros pela página# -*- coding: cp1252 -*-import cherrypyclass Root(object): def default(self,nome): return "Alô "+nome default.exposed=True

def index(self): return "Alô" index.exposed=Truecherrypy.quickstart(Root())

Page 10: Python cherrypy

Servidor de aplicação WEB

Arquivo de configuração

Arquivo configuração Arquivo programa #arquivo global.cfg[global]server.socket_port=8001 server.thread_pool=10

#arquivo programa# -*- coding: cp1252 -*-import cherrypyclass Root(object):

def default(self,nome): return "Alô "+nome default.exposed=True

def index(self): return "Alô" index.exposed=True

cherrypy.config.update('global.cfg') cherrypy.quickstart(Root())

Page 11: Python cherrypy

Servidor de aplicação WEB

Estrutura do Cherrypycherrypy.engine – controlecherrypy.server -servidor HTTPcherrypy.request – requisição do HTTPcherrypy.session - mapeamentocherrypy.response – dados para construir resposta

HTTP

Page 12: Python cherrypy

Servidor de aplicação WEB

Módulos da Biblioteca CHERRYPY- Autocarga – carrega o servidor quando a

aplicação é modificada – arquivo de configuração[global]server.environment=”production”engine.autoreload_on=Trueengine.autoreload_frequency=5

-Caching – melhora desempenho guardando na memória dados da aplicação e do cliente

Page 13: Python cherrypy

Servidor de aplicação WEB

-Módulo de análise – mostra no browser o funcionamento do sistema, desta forma é possível evitar gargalos

-Módulo de codificação e decodificação – manipula diversos tipos de caracteres

- Módulo HTTP – classes e funções para manipular cabeçalhos e entidades HTTP

- Módulo Httpath – esquema de autenticação criptografado

- Profiler – interface checagem da performance- Módulo Sessão – responsável pela persistência

dos dados (RAM, File System, Relational Database)

Page 14: Python cherrypy

Servidor de aplicação WEB

-Módulo estático – trabalha com arquivos tipo CSS e imagens

-Módulo Tidy – checar se o código gerado pela aplicação é válido.

-Módulo Wsgiapp- permite que qualquer aplicação WSGI use cherrypy.(Web Server Gateway Interface – define uma simples e universal interface entre servidor web e aplicação web para linguagem Python)

- Módulo XML-RPC – permite transformar objeto publicado neste serviço.(RPC-remote procure call chamada de processo remoto)

Page 15: Python cherrypy

Servidor de aplicação WEB

-Tools – permite a execução de módulos de terceiros.

- Erros e exceções – erros e exceções geram mensagens HTTP 5XX- erros servidor 4XX-erros clientes

import cherrypyclass Root: @cherrypy.expose @cherrypy.tools.encode(encoding="iso-8859-1") def index(self): raise NotImplementedError,"isto é erro..."

if __name__=='__main__': cherrypy.quickstart(Root(),'/')

http://localhost:8080/ - erro servidorhttp://localhost:8080/pagina - erro cliente

Page 16: Python cherrypy

Servidor de aplicação WEB

Aplicação Arquivos Estáticos# -*- coding: iso-8859-1 -*- import cherrypyimport os.pathclass HelloWorld: def index(self): return '''<html><head><title>Alinhando Imagens</title></head><body><h1>Alinhamento de Imagens</h1><p>Alinhamento a Esquerda<br><img src="imagem" ><br></body></html> ''' index.exposed = True

current_dir = os.path.dirname(os.path.abspath(__file__))

conf = {'/': {'tools.staticfile.root': current_dir},'/imagem': {'tools.staticfile.on': True,'tools.staticfile.filename':'ninfeias.jpg'}}cherrypy.quickstart(HelloWorld(), config=conf)

Page 17: Python cherrypy

Servidor de aplicação WEB

Aplicação final apostila Cherrypy

OBRIGADO