Python cherrypy
-
Upload
antonio-sergio-nogueira -
Category
Education
-
view
1.126 -
download
2
description
Transcript of 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)
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
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/
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
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__)
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()
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
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())
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())
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())
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
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
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)
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)
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
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)
Servidor de aplicação WEB
Aplicação final apostila Cherrypy
OBRIGADO