Pyramid - O Framework Web para Todos

78
Pyramid O framework web para todos Rudá Porto Filgueiras - [email protected] Twitter: rudaporto Github: rudaporto 02/10/2013 - PytthonBrasil[9] / PloneConf 2013

description

Apresentação das características e exemplos do framework web Pyramid, realizada na PloneConf 2013 / PythonBrasil [9]

Transcript of Pyramid - O Framework Web para Todos

Page 1: Pyramid - O Framework Web para Todos

PyramidO framework web para todos

Rudá Porto Filgueiras - [email protected]

Twitter: rudaporto Github: rudaporto

02/10/2013 - PytthonBrasil[9] / PloneConf 2013

Page 2: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 3: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 4: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 5: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 6: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 7: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 8: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 9: Pyramid - O Framework Web para Todos

About Me

1 >>> import this2 The Zen of Python , by Tim Peters34 Beautiful is better than ugly .5 Expl ic i t is better than impl ic i t .6 Simple is better than complex.7 Complex is better than complicated .8 ...

I Usuário de Linux desde 1999

I Usuário de Zope desde 2001

I Usuário de Plone desde 2005

I Não sou desenvolvedor "full time"

I Membro Fundador da Associação Python Brasil

I Primeira PythonBrasil == 2

I Em busca de oportunidades e desafios!

Page 10: Pyramid - O Framework Web para Todos

Por que Pyramid?

I Simplicidade

I Desempenho

I Ambiente familiar : from Zope/Plone World

I Identificação com o projeto

I Mais detalhes adiante ...

Page 11: Pyramid - O Framework Web para Todos

Por que Pyramid?

I Simplicidade

I Desempenho

I Ambiente familiar : from Zope/Plone World

I Identificação com o projeto

I Mais detalhes adiante ...

Page 12: Pyramid - O Framework Web para Todos

Por que Pyramid?

I Simplicidade

I Desempenho

I Ambiente familiar : from Zope/Plone World

I Identificação com o projeto

I Mais detalhes adiante ...

Page 13: Pyramid - O Framework Web para Todos

Por que Pyramid?

I Simplicidade

I Desempenho

I Ambiente familiar : from Zope/Plone World

I Identificação com o projeto

I Mais detalhes adiante ...

Page 14: Pyramid - O Framework Web para Todos

Por que Pyramid?

I Simplicidade

I Desempenho

I Ambiente familiar : from Zope/Plone World

I Identificação com o projeto

I Mais detalhes adiante ...

Page 15: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 16: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 17: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 18: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 19: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 20: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 21: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 22: Pyramid - O Framework Web para Todos

História

I Projeto repoze.zope2: suporte WSGI Zope2 (reescritaZPublisher)

I Problemas de compatibilidade com Zope2 motivaram acriação de um novo framework

I Zope3 foi avaliado, porém percebeu-se que ele levava amais indireções que o Zope2

I Pylons e Django não possuíam recursos comuns do Zope:traversal, declarative security e extensibilidade

I Nasceu o repose.bfg que teve sua primeira versão emjulho 2008

I No final de 2010 o projeto repoze.bfg foi renomeado paraPyramid e se integrou ao Pylons

I Seu desenvolvimento foi influenciado pelo Zope2, Zope3,Pylons 1.0 e Django

Page 23: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 24: Pyramid - O Framework Web para Todos

Princípios de Projeto

Princípios que nortearam o desenvolvimento do Pyramid:

I Simplicidade

I Minimalismo

I Documentação

I Desempenho / Velocidade

I Confiabilidade

I Aberto (Openess)

Page 25: Pyramid - O Framework Web para Todos

Simplicidade

I "Pagar apenas por aquilo que se come"

I Permitir resultados práticos apenas com conhecimentoparcial do Pyramid

I Framework não deve forçar a utilização de umatecnologia específica

I Manutenção dos conceitos centrais ao mínimo necessário

I "Not build by aliens!"

Page 26: Pyramid - O Framework Web para Todos

Simplicidade

I "Pagar apenas por aquilo que se come"

I Permitir resultados práticos apenas com conhecimentoparcial do Pyramid

I Framework não deve forçar a utilização de umatecnologia específica

I Manutenção dos conceitos centrais ao mínimo necessário

I "Not build by aliens!"

Page 27: Pyramid - O Framework Web para Todos

Simplicidade

I "Pagar apenas por aquilo que se come"

I Permitir resultados práticos apenas com conhecimentoparcial do Pyramid

I Framework não deve forçar a utilização de umatecnologia específica

I Manutenção dos conceitos centrais ao mínimo necessário

I "Not build by aliens!"

Page 28: Pyramid - O Framework Web para Todos

Simplicidade

I "Pagar apenas por aquilo que se come"

I Permitir resultados práticos apenas com conhecimentoparcial do Pyramid

I Framework não deve forçar a utilização de umatecnologia específica

I Manutenção dos conceitos centrais ao mínimo necessário

I "Not build by aliens!"

Page 29: Pyramid - O Framework Web para Todos

Simplicidade

I "Pagar apenas por aquilo que se come"

I Permitir resultados práticos apenas com conhecimentoparcial do Pyramid

I Framework não deve forçar a utilização de umatecnologia específica

I Manutenção dos conceitos centrais ao mínimo necessário

I "Not build by aliens!"

Page 30: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao códigoI Renderização de templates e viewsI Segurança / AutenticaçãoI Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 31: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao código

I Renderização de templates e viewsI Segurança / AutenticaçãoI Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 32: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao códigoI Renderização de templates e views

I Segurança / AutenticaçãoI Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 33: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao códigoI Renderização de templates e viewsI Segurança / Autenticação

I Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 34: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao códigoI Renderização de templates e viewsI Segurança / AutenticaçãoI Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 35: Pyramid - O Framework Web para Todos

Minimalismo

I O escopo do framewok limita-se ao desenvolvimento deaplicações Web

I Mapear as URLs ao códigoI Renderização de templates e viewsI Segurança / AutenticaçãoI Servir artefatos estáticos

I Obs: não contém ORM específico ou definição de umatecnologia de banco de dados "padrão"

Page 36: Pyramid - O Framework Web para Todos

Documentação

I Ser minimalista implica em maior facilidade para mantera documentação atualizada e completa

I O objetivo é que nenhum aspecto do Pyramid fique semdocumentação

Page 37: Pyramid - O Framework Web para Todos

Documentação

I Ser minimalista implica em maior facilidade para mantera documentação atualizada e completa

I O objetivo é que nenhum aspecto do Pyramid fique semdocumentação

Page 38: Pyramid - O Framework Web para Todos

Desempenho / Velocidade

I Projetado para prover alta velocidade de execução paraas tarefas comuns, tais como:

I Renderização de templates e viewsI E geração de respostas http para o browser: response

objects

Page 39: Pyramid - O Framework Web para Todos

Desempenho / Velocidade

I Projetado para prover alta velocidade de execução paraas tarefas comuns, tais como:

I Renderização de templates e views

I E geração de respostas http para o browser: responseobjects

Page 40: Pyramid - O Framework Web para Todos

Desempenho / Velocidade

I Projetado para prover alta velocidade de execução paraas tarefas comuns, tais como:

I Renderização de templates e viewsI E geração de respostas http para o browser: response

objects

Page 41: Pyramid - O Framework Web para Todos

Confiabilidade / Testes

I Pyramid é desenvolvido de forma conservadora e testadoexaustivamente

I Por definição: "Se não existe cobertura de testes o códigoestá quebrado"

Page 42: Pyramid - O Framework Web para Todos

Confiabilidade / Testes

I Pyramid é desenvolvido de forma conservadora e testadoexaustivamente

I Por definição: "Se não existe cobertura de testes o códigoestá quebrado"

Page 43: Pyramid - O Framework Web para Todos

Aberto (Openess)

I Como Python, o código fonte do Pyramid é distribuídosobre uma licença permissiva

Page 44: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 45: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 46: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 47: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 48: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 49: Pyramid - O Framework Web para Todos

Diferenciais Pyramid

I Gerenciador de transações

I Modelo de Configuração

I Traversal

I Flexibilidade das Views

I Tweens (plugins)

I Scaffolds

Page 50: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 51: Pyramid - O Framework Web para Todos

Hello World! - Aplicação em apenas um arquivo

1 from wsgiref . simple_server import make_server2 from pyramid . config import Configurator3 from pyramid . response import Response45 def hello_world ( request ) :6 return Response( ' Hello %(name)s! ' % request . matchdict )78 i f __name__ == '__main__ ' :9 config = Configurator ( )

10 config . add_route( ' hello ' , ' / hello /{name} ' )11 config .add_view( hello_world , route_name=' hello ' )12 app = config .make_wsgi_app( )13 server = make_server( '0 .0.0.0 ' , 8080, app)14 server . serve_forever ( )

Page 52: Pyramid - O Framework Web para Todos

Deploy

1 virtualenv −−no−site−packages deploy2 cd deploy3 source bin / activate4 easy_instal l i n s ta l l pyramid==1.4.5

Page 53: Pyramid - O Framework Web para Todos

Criando um projeto com Scaffold : template alchemy

1 # criando um novo pacote usando scaffold2 mkdir src3 pcreate −s alchemy src / PyBR9Project

1 # visualizando a estrutura do pacote :2 ls src / PyBR9Project / pybr9project34 __ in i t __ .py5 models .py6 scripts7 stat ic8 templates9 tests .py

10 views .py1112 # executando testes :13 python src / PyBR9Project / setup .py test

Page 54: Pyramid - O Framework Web para Todos

Instalando o pacote e inicializando a aplicação

1 # instalando pacotes para desenvolvimento :2 cd src / PyBR9Project3 python setup .py develop45 # in i t database6 initialize_PyBR9Project_db development . i n i78 # in i t web server9 pserve development . i n i

Abrir: http://localhost:6543/

Page 55: Pyramid - O Framework Web para Todos

Configuração utilizando Decorators

Os view decorators no Pyramid são inertes, apenasdetectados e ativados explicitamente.No __init__.py da raiz do pacotes: config.scan()

1 from pyramid . view import view_config2 from pyramid . response import Response34 @view_config(route_name=' turismo ' )5 def turismo_view( request ) :6 return Response( 'Pontos Turist icos ' )

Page 56: Pyramid - O Framework Web para Todos

Configuração de rotas e API para URL / PATH

Definição da rota:

1 # "config " instance of pyramid . config . Configurator2 config . add_route( ' turismo ' , ' / turismo ' , view=turismo_view)

Helpers para geração de URL ou PATH para um determinadarota:

1 url = request . route_url ( ' foo ' , one='1 ' , two='2 ' )2 # url : http : / / dominio / prefix /1/23 path = request . route_path ( ' foo ' , one='1 ' , two='2 ' )4 # path : prefix /1/2

Referência: urldispatch

Page 57: Pyramid - O Framework Web para Todos

Arquivos estáticos (static files)

I É possível servir mais de um conjunto de arquivosestáticos: /static e /static2

I Caminhos estáticos pode ser serrvidos diretamente deum webserver e o Pyramid gera URLs para esses arquivos

I Ambiente de desenvolvimento ou produção controladopelo arquivo .ini

1 # config is an instance of pyramid . config . Configurator2 config . add_static_view (name=' stat ic ' , path=' / var /www/ stat ic ' )3 # another way stat ic directory relat ive from package root4 config . add_static_view ( ' static_myapp ' , 'myapp: stat ic ' )

Page 58: Pyramid - O Framework Web para Todos

Barra de Debug: recursos

Scaffolds em geral habilitam debug toolbar emdevelopment.ini:

I rotas configuradas e ultimas renderizações executadas

I visualizar o conjunto atual de pacotes instalados

I acompanhar as consultas executadas no sqlalchemy

I visualizar os logs e várias outras informações darequisição

I add-on pyramid_debugtoolbar_mongo para visualizarinformações do MongoDB

Page 59: Pyramid - O Framework Web para Todos

Barra de Debug: notfound, authorization

Em caso de exceção, debugger interativo permie analisar oproblema diretamente no navegador;

I É possível habilitar um debug para exceções do tipoNotFound "debug_notfound"

I E também para debuggar a camada de autenticação"debug_authorization"

Page 60: Pyramid - O Framework Web para Todos

Commnad line: pviews e proute

Comandos disponíveis para visualização da configuração doprojeto:

1 pviews development . i n i /2 URL = /3 context : <pyramid . traversal . DefaultRootFactory instance . .4 view name:5 Route :6 −−−−−−7 route name: home8 route pattern : /9 route path : /

10 subpath :11 View:12 −−−−−13 pybr9project . views .my_view

Page 61: Pyramid - O Framework Web para Todos

Add-ons

Alguns exemplos de add-ons disponíveis para o Pyramid:

I Enviar email, autenticação LDAP

I Gerador de formulários: FormAlchemy, Deform

I Usar XML-RPC ou JSON-RPC

I Integração com jQuery Mobile

I Integração Beaker, Redis, MongoDB, etc.

Page 62: Pyramid - O Framework Web para Todos

Class based e Function based views

I Pyramid tem o conceito unificado de view callable

I Funções, métodos de classe e instâncias (__call__)

Exemplo de class view:

1 from pyramid . response import Response2 from pyramid . view import view_config34 class AView(object ) :5 def __init__ ( self , request ) :6 se l f . request = request78 @view_config(route_name='view_one ' )9 def view_one( se l f ) :

10 return Response( 'one ' )1112 @view_config(route_name='view_two ' )13 def view_two( se l f ) :14 return Response( 'two ' )

Page 63: Pyramid - O Framework Web para Todos

Asset specifications

Asset specifications: são strings que contém o nome de umpacote python e um arquivo ou diretório.

1 MyPackage: stat ic / index . html

I Extensível: não precisa depender de um global "staticdirectory"

I Override: permite substituir a definição de um Assetconfigurado em outro pacote

I Para modificar um template específico basta sobrescrevero asset specification com a versão customizada

Page 64: Pyramid - O Framework Web para Todos

Extensible templating

I Pyramid possui uma API preparada para plugar novos"renderers"

I Cada sistema de template é tratado como um renderer,tais como: Mako, Genshi, Chameleon e Jinja2

I Você pode usar qualquer um desses templates da mesmaforma que você usaria os template padrão

I É possível usar diferentes sistemas de template em ummesmo projeto

Page 65: Pyramid - O Framework Web para Todos

Views com templates podem retornar dicionários

I Se você usa um template "renderer", sua view nãoprecisa retornar um tipo especial de Response object

I Basta retornar um dicionário e o Pyramid vai cuidar degerar um Response com o template escolhido

1 from pyramid . renderers import render_to_response23 def myview( request ) :4 return render_to_response ( 'myapp: templates /mytemplate . pt ' ,5 { 'a ' :1} , request=request )

1 from pyramid . view import view_config23 @view_config( renderer='myapp: templates /mytemplate . pt ' )4 def myview( request ) :5 return { 'a ' :1}

Page 66: Pyramid - O Framework Web para Todos

Sistema de Eventos

I Pyramid emite determinados eventos durante o ciclo devida de cada Request

I Você pode registrar a quantidade necessária de listenerspara caputurar esses eventos

I Por exemplo, se registrar um listener para o evento dotipo NewRequest, a cada novo request o listener seráinvocado

I O mesmo vale para o tipo de evento BeforeRender, queinforma quando um template será renderizado

I A utilização de um sistema de eventos integrado aoPyramid minimiza o uso de "hardcoded hooks"

I Você pode usar o sistema de eventos do Pyramid paragerar seus próprios eventos, os quais outras aplicaçõespoderão capturar

Page 67: Pyramid - O Framework Web para Todos

HTTP caching

O Pyramid pode gerar os headers Cache-Control e Expiresautomaticamente para fazer cache de qualquer viewfacilmente.Basta fornecer o parâmetro http_cache para o decoradorview_config, informando o tempo de cache em segundos

1 @view_config(http_cache=3600) # 60 minutes2 def myview( request ) : ... .

Page 68: Pyramid - O Framework Web para Todos

Controle de sessão

I Pyramid tem o recurso de sessão HTTP integrado

I E ao mesmo tempo ele permite que você use seu própriositema de sessão se você precisar

I Já existe um pacote que permite integrar e substituir ositema de sessão padrão pelo Beaker

I Você pode trocar os sitemas de sessão sem necessitarqualquer modificação no seu código

Page 69: Pyramid - O Framework Web para Todos

Desempenho e Velocidade

I O núcleo do Pyramid é marginalmente tão rápido quantoqualquer outro framework web em Python

I Ele foi desenvolvido desde seu princípio com foco emdesemepenho

I Apenas o trabalho absolutamente necessário é realizadopara desempenhar uma dada tarefa

I Chamda de funões desenecessárias e algoritimos subotimizados são evitados

I É normal conseguir entre 3500 e 4000 requests porsegundo em uma aplicação Pyramid simples + mod_wsgiou gunicorn

I Referência de comparação:the-great-web-framework-shootout

Page 70: Pyramid - O Framework Web para Todos

Exception views

I Pyramid permite que você registre uma ou mais"exception view"

I A view é invocadas quando ocorre uma exceção nãotratada pela aplicação

I É possível registrar uma exception view para a execeçãodo tipo Exception (log e generic message)

I Ou para a Exception NotFound por exemplo, apenas paralogar recursos não existentes

1 from pyramid . response import Response23 @view_config( context=Exception)4 def error_view(exc , request ) :5 #log or do other stuf f to exc ...6 return Response( "Sorry there was an error " )

Page 71: Pyramid - O Framework Web para Todos

No Singletons

I Não requer a construção de um “mutable globals”

I import de uma aplicação Pyramid não deve gerarqualquer “import-time side effects”

I Diferencial em relação aos app Flask e Django

Page 72: Pyramid - O Framework Web para Todos

View predicates

O decorator view_config possui uma série de predicados quepodem ser usados para controlar a situação no qual a viewestará disponível.No exemplo abaixo, tempo request_methos, context e name:

1 from resources import MyResource2 from pyramid . view import view_config3 from pyramid . response import Response45 @view_config(name='my_view ' , request_method='POST ' , context=MyResource,6 permission='read ' )7 def my_view( request ) :8 return Response( 'OK ' )

Referência: viewconfig

Page 73: Pyramid - O Framework Web para Todos

Transaction Management

Pyramid scaffold configura o gerenciador de transaçõesbaseado no Zope

I Usando o gerenciador de transações não é preciso maiscontrolar o commit

I Ele cuida do committ: efetiva a transação no final doreguest ou aborta se uma exceção for levantada

I Ter um local central de para controlar as transaçõesnormalmente é muito útil

I É possível também sincronizar o commit entre múltiplosbancos de dados e realizar tarefas condicionalmente,como enviar email apenas se houver commit

Page 74: Pyramid - O Framework Web para Todos

Outros recursos disponíveisSegue outros recursos importante que não serão vistos emdetalhes:

I Internationalization integrada

I Detecção de conflitos de configuração

I Extensibilidade da Configuração

I Authentication and Authorization

I Traversal

I Tweens (plugins)

I View response adapters

I "Global"response object

I Automatizar configuração repetitiva

I Testes

I Suporte

I Documentação

Page 75: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 76: Pyramid - O Framework Web para Todos

Perguntas?

Page 77: Pyramid - O Framework Web para Todos

Tópicos

Introdução

História

Princípios de Projeto

Exemplos

Perguntas

Obrigado

Page 78: Pyramid - O Framework Web para Todos

PyramidO framework web para todos

Rudá Porto Filgueiras - [email protected]

Twitter: rudaporto Github: rudaporto

02/10/2013 - PytthonBrasil[9] / PloneConf 2013