Python cherrypy

1.357 visualizações

Publicada em

CherryPy servidor web escrito em Python

Publicada em: Educação
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.357
No SlideShare
0
A partir de incorporações
0
Número de incorporações
5
Ações
Compartilhamentos
0
Downloads
50
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Python cherrypy

  1. 1. Servidor de aplicação WEB <ul><li>Simples e Poderosa biblioteca Python para desenvolvedores WEB </li></ul><ul><li>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 </li></ul><ul><li>Em windows basta instalar o software no diretório Python(versão 2.4 em diante) </li></ul><ul><li>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) </li></ul>
  2. 2. Servidor de aplicação WEB <ul><li>Servidor WEB – Apache -> CherryPy roda no Apache </li></ul><ul><li>Servidor de Aplicação -> responsável pela infra-estrutura para rodar aplicação (middleware – segurança, balanceamento,tratamento de exceções) </li></ul><ul><li>J2EE, JBOSS – roda Java, IIS – windows </li></ul><ul><li>CherryPy – roda no seu próprio servidor </li></ul>
  3. 3. Servidor de aplicação WEB <ul><li>1a. Aplicação WEB – Alô Mundo (alomundo.py) </li></ul><ul><li># -*- coding:iso-8859-1 -*- </li></ul><ul><li>import cherrypy </li></ul><ul><li>class AloMundo: </li></ul><ul><li>def index(self): </li></ul><ul><li>return “Alô Mundo” </li></ul><ul><li>index.exposed=True </li></ul><ul><li>cherrypy.quickstart(AloMundo()) </li></ul><ul><li>Como executar: python alomundo.py </li></ul><ul><li>Browser: http://localhost:8080/ </li></ul>
  4. 4. Servidor de aplicação WEB <ul><li>Servidor é iniciado na porta: 8080 </li></ul><ul><li>Método index() - mapeia o site raiz </li></ul><ul><li>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 </li></ul><ul><li>Objeto publicad o – qualquer objeto agregado a página principal – significa que pode ser publicado </li></ul><ul><li>Expor Objetos – feito através do atributo exposed </li></ul>
  5. 5. Servidor de aplicação WEB <ul><li>Expondo o objeto correto </li></ul><ul><li>Para 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: </li></ul><ul><li>- index.exposed </li></ul><ul><li>- @cherrypy.expose # decorator </li></ul><ul><li>- exposed=True (métodos especiais __call__) </li></ul>
  6. 6. Servidor de aplicação WEB <ul><li>Definindo o objeto correto – o mapeamento do CherryPy é simples. </li></ul><ul><li>root=AloMundo() </li></ul><ul><li>root.PaginaUm=UmaPag() </li></ul><ul><li>root.OutraPag=OutraPag() </li></ul><ul><li>root.OutraPag.Pagina=Pagina() </li></ul>
  7. 7. Servidor de aplicação WEB #-*-coding:iso-8859-1-*- import cherrypy class PaginaUm: def index(self): return &quot;Página um&quot; index.exposed=True def pagina(self): return &quot;página&quot; pagina.exposed=True class OutraPag: @cherrypy.expose def index(self): return &quot;Outra Página&quot; class PaginaDois: def index(self): return &quot;Página dois&quot; index.exposed=True class AloMundo: paginaum=PaginaUm() outrapag=OutraPag() paginadois=PaginaDois() @cherrypy.expose def index(self): return &quot;Alô Mundo&quot; cherrypy.quickstart(AloMundo()) #root
  8. 8. Servidor de aplicação WEB - login #-*-coding:iso-8859-1 -*- import cherrypy class PaginaUm(object): @cherrypy.expose def index(self): return &quot;Página Um&quot; class alomundo: def index(self): return &quot;&quot;&quot;<form action=&quot;doLogin&quot; method=&quot;post&quot;> <p>Usuário</p> <input type=&quot;text&quot; name=&quot;username&quot; value=&quot;&quot; size=&quot;15&quot; maxlength=&quot;40&quot;/> <p>Senha</p> <input type=&quot;password&quot; name=&quot;password&quot; value=&quot;&quot; size=&quot;10&quot; maxlength=&quot;40&quot;/> <p><input type=&quot;submit&quot; value=&quot;Login&quot;/></p> <p><input type=&quot;reset&quot; value=&quot;Clear&quot;/></p> </form>&quot;&quot;&quot; index.exposed=True def doLogin(self,username=None,password=None): return &quot;Olá &quot;+username+&quot; &quot;+password doLogin.exposed=True paginaum=PaginaUm() cherrypy.quickstart(alomundo())
  9. 9. Servidor de aplicação WEB <ul><li>Passando parâmetros pela página </li></ul><ul><li># -*- coding: cp1252 -*- </li></ul><ul><li>import cherrypy </li></ul><ul><li>class Root(object): </li></ul><ul><li>def default(self,nome): </li></ul><ul><li>return &quot;Alô &quot;+nome </li></ul><ul><li>default.exposed=True </li></ul><ul><li>def index(self): </li></ul><ul><li>return &quot;Alô&quot; </li></ul><ul><li>index.exposed=True </li></ul><ul><li>cherrypy.quickstart(Root()) </li></ul>
  10. 10. Servidor de aplicação WEB <ul><li>Arquivo de configuração </li></ul><ul><li>Arquivo configuração Arquivo programa </li></ul><ul><li>#arquivo global.cfg </li></ul><ul><li>[global] </li></ul><ul><li>server.socket_port=8001 </li></ul><ul><li>server.thread_pool=10 </li></ul>#arquivo programa # -*- coding: cp1252 -*- import cherrypy class Root(object): def default(self,nome): return &quot;Alô &quot;+nome default.exposed=True def index(self): return &quot;Alô&quot; index.exposed=True cherrypy.config.update('global.cfg') cherrypy.quickstart(Root())
  11. 11. Servidor de aplicação WEB <ul><li>Estrutura do Cherrypy </li></ul><ul><li>cherrypy.engine – controle </li></ul><ul><li>cherrypy.server -servidor HTTP </li></ul><ul><li>cherrypy.request – requisição do HTTP </li></ul><ul><li>cherrypy.session - mapeamento </li></ul><ul><li>cherrypy.response – dados para construir resposta HTTP </li></ul>
  12. 12. Servidor de aplicação WEB <ul><li>Módulos da Biblioteca CHERRYPY </li></ul><ul><li>- Autocarga – carrega o servidor quando a aplicação é modificada – arquivo de configuração </li></ul><ul><li>[global] </li></ul><ul><li>server.environment=”production” </li></ul><ul><li>engine.autoreload_on=True </li></ul><ul><li>engine.autoreload_frequency=5 </li></ul><ul><li>-Caching – melhora desempenho guardando na memória dados da aplicação e do cliente </li></ul>
  13. 13. Servidor de aplicação WEB <ul><li>-Módulo de análise – mostra no browser o funcionamento do sistema, desta forma é possível evitar gargalos </li></ul><ul><li>-Módulo de codificação e decodificação – manipula diversos tipos de caracteres </li></ul><ul><li>- Módulo HTTP – classes e funções para manipular cabeçalhos e entidades HTTP </li></ul><ul><li>- Módulo Httpath – esquema de autenticação criptografado </li></ul><ul><li>- Profiler – interface checagem da performance </li></ul><ul><li>- Módulo Sessão – responsável pela persistência dos dados ( RAM, File System, Relational Database) </li></ul>
  14. 14. Servidor de aplicação WEB <ul><li>-Módulo estático – trabalha com arquivos tipo CSS e imagens </li></ul><ul><li>-Módulo Tidy – checar se o código gerado pela aplicação é válido. </li></ul><ul><li>-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) </li></ul><ul><li>- Módulo XML-RPC – permite transformar objeto publicado neste serviço.(RPC-remote procure call chamada de processo remoto) </li></ul>
  15. 15. Servidor de aplicação WEB <ul><li>-Tools – permite a execução de módulos de terceiros. </li></ul><ul><li>- Erros e exceções – erros e exceções geram mensagens HTTP 5XX- erros servidor 4XX-erros clientes </li></ul>import cherrypy class Root: @cherrypy.expose @cherrypy.tools.encode(encoding=&quot;iso-8859-1&quot;) def index(self): raise NotImplementedError,&quot;isto é erro...&quot; if __name__=='__main__': cherrypy.quickstart(Root(),'/') http://localhost:8080/ - erro servidor http://localhost:8080/pagina - erro cliente
  16. 16. Servidor de aplicação WEB <ul><li>Aplicação Arquivos Estáticos </li></ul># -*- coding: iso-8859-1 -*- import cherrypy import os.path class 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=&quot;imagem&quot; ><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)
  17. 17. Servidor de aplicação WEB <ul><li>Aplicação final apostila Cherrypy </li></ul><ul><li>OBRIGADO </li></ul>

×