Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Entendendo Frameworks Web com Python Luiz Guilherme F. Aldabalde Flisol 2009 - UERJ
Apresentação
Conteúdo <ul><li>Introdução </li></ul><ul><li>Python </li></ul><ul><li>Conceituando os Frameworks </li></ul><ul><li>Desafi...
Introdução <ul><ul><li>O objetivo desta palestra é decompor um modelo típico de framework web, implementado em Python, pro...
Python Histórico Python foi criada em 1990 por Guido Van Rossum.  O nome da linguagem é uma homenagem ao grupo inglês de h...
Python - Introdução <ul><li>Por que usar Python ? </li></ul><ul><li>Fácil Aprendizado  </li></ul><ul><li>Fácil Manutenção ...
Python - Características  <ul><li>Cada linha termina com ponto e vírgula (;) ou com um <enter > </li></ul><ul><li>Cada blo...
“ Framework é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Fr...
Desafios da Web <ul><li>Desafios do ambiente web : </li></ul><ul><li>Múltiplos ambientes a considerar ( browser, servidor)...
Dividir para conquistar - MVC <ul><li>Compreendendo cada elemento podemos passar a ter uma visão melhor do todo </li></ul>...
Camada de Controle <ul><li>É o núcleo da aplicação </li></ul><ul><li>Responsável por tratar os eventos, as solicitações e ...
Iniciando o uso do Python <ul><li>Resumo  : </li></ul><ul><li>Servidor Web em Python </li></ul><ul><li>Muito simples  </li...
Iniciando o uso do Python <ul><li>Exemplo : </li></ul><ul><li>import cherrypy </li></ul><ul><li>class HelloWorld(object): ...
Camada de Apresentação <ul><li>É a aparência do seu sistema  </li></ul><ul><li>Nesta camada são preparadas as páginas que ...
Template kid <ul><li><?xml version='1.0' encoding='utf-8'?> </li></ul><ul><li><html xmlns=&quot;http://www.w3.org/1999/xht...
Usando o Template #-*- encoding: utf-8 -*- from kid import Template template = Template(file='hello.kid', title=&quot;Hell...
Camada de Persistência <ul><li>Nesta camada temos a oportunidade de gravar as informações em um banco de dados. </li></ul>...
Iniciando o uso do Python <ul><li>Object-Relational Mappers </li></ul><ul><li>Exemplos : SQLObject, STORM, SQLALCHEMY </li...
SQLObject <ul><li>SQLObject é um ”wrapper” feito em python para um bancos de dados.  </li></ul><ul><li>O Objetivo é criar ...
SQLObject <ul><li>Cada tabela se transforma em uma classe </li></ul><ul><li>Cada linha da tabela é uma instância </li></ul...
<ul><li># -*- encode: latin -*- </li></ul><ul><li>from sqlobject import * </li></ul><ul><li>import os </li></ul><ul><li># ...
<ul><li># Tabela person do banco </li></ul><ul><li>class Person(SQLObject): </li></ul><ul><li>firstName = StringCol() </li...
Juntando tudo ... <ul><li>Automação </li></ul><ul><li>CRUD </li></ul><ul><li>Admin interface </li></ul><ul><li>Templates e...
Frameworks Python <ul><li>Zope/Plone </li></ul><ul><li>TurboGears </li></ul><ul><li>Django </li></ul><ul><li>Web2py </li><...
Iniciando o uso do Python <ul><li>Composto pelos seguintes módulos : </li></ul><ul><li>MochKit / Scriptaculous </li></ul><...
<ul><li>Estrutura monolítica  </li></ul><ul><li>Contém engine de templates e um ORM integrado </li></ul><ul><li>Interface ...
-  Site oficial :  www.python.org - Site oficial no Brasil :  www.pythonbrasil.com.br - Manual Referência :  http://docs.p...
<ul><li>Lista SL-RJ :  </li></ul><ul><li>groups.google.com/group/slrj </li></ul><ul><li>Lista PythonRio  :  </li></ul><ul>...
- Python in a Nutshell – Alex Martelli – O'Reilly - Python Cookbook – Alex Martelli e David Ascher  - O'Reilly - Dive Into...
Perguntas ?
Obrigado !!  Luiz Guilherme F. Aldabalde [email_address]
Upcoming SlideShare
Loading in …5
×

Entendendo Frameworks web com Python

2,366 views

Published on

Apresentação feita no Flisol 2009 - UERJ
Apresentar os elementos que compõem um Framework para explicar o seu funcionamento

  • Be the first to comment

  • Be the first to like this

Entendendo Frameworks web com Python

  1. 1. Entendendo Frameworks Web com Python Luiz Guilherme F. Aldabalde Flisol 2009 - UERJ
  2. 2. Apresentação
  3. 3. Conteúdo <ul><li>Introdução </li></ul><ul><li>Python </li></ul><ul><li>Conceituando os Frameworks </li></ul><ul><li>Desafios da web </li></ul><ul><li>Dividir para conquistar -MVC </li></ul><ul><li>Camada de Controle </li></ul><ul><li>Camada de Apresentação </li></ul><ul><li>Camada de Persistência </li></ul><ul><li>Juntando tudo </li></ul><ul><li>Frameworks Python </li></ul><ul><li>Referências </li></ul>
  4. 4. Introdução <ul><ul><li>O objetivo desta palestra é decompor um modelo típico de framework web, implementado em Python, procurando mostrar as características básicas dos seus componentes e os desafios para usa-lo de forma adequada. </li></ul></ul>
  5. 5. Python Histórico Python foi criada em 1990 por Guido Van Rossum. O nome da linguagem é uma homenagem ao grupo inglês de humor Monty Python. Segundo Guido a linguagem foi concebida para ocupar o espaço que existia entre as linguagens C/C++ e o shell.
  6. 6. Python - Introdução <ul><li>Por que usar Python ? </li></ul><ul><li>Fácil Aprendizado </li></ul><ul><li>Fácil Manutenção </li></ul><ul><li>Possui uma extensa Biblioteca Padrão </li></ul><ul><li>Possui uma poderosa Estruturas de Dados Nativas </li></ul><ul><li>Disponível com código aberto e livre </li></ul><ul><li>Interface para outras Linguagens ( Lua, Java, C) </li></ul><ul><li>Multi-plataforma </li></ul><ul><li>É um canivete- suíço !!! </li></ul>
  7. 7. Python - Características <ul><li>Cada linha termina com ponto e vírgula (;) ou com um <enter > </li></ul><ul><li>Cada bloco de instruções é definido pela identação </li></ul><ul><li>Comentário em uma linha é definido pelo símbolo tralha (#) </li></ul><ul><li>Comentário em mais e uma linha podemos usar aspas triplas para começar e terminar (“”” texto comentado “””) </li></ul><ul><li>Uma variável não é declarada, ela assume o tipo quando associada com um valor </li></ul>Resumindo ...
  8. 8. “ Framework é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Frameworks são projetados com a intenção de facilitar o desenvolvimento de software, habilitando designers e programadores a gastarem mais tempo determinando nas exigências do software do que com detalhes tediosos de baixo nível do sistema.” fonte: wikipedia Framework <ul><ul><li>“ A Web framework is a collection of packages or modules which allow developers to write Web applications or services without having to handle such low-level details as protocols, sockets or process/thread management. ” </li></ul></ul><ul><ul><li>fonte : wiki.python.org </li></ul></ul>
  9. 9. Desafios da Web <ul><li>Desafios do ambiente web : </li></ul><ul><li>Múltiplos ambientes a considerar ( browser, servidor) </li></ul><ul><li>Mais de uma linguagem envolvida </li></ul><ul><li>Separação design x aplicação </li></ul><ul><li>Novos paradigmas web 2.0 : Ajax e Rich Internet Applications </li></ul>
  10. 10. Dividir para conquistar - MVC <ul><li>Compreendendo cada elemento podemos passar a ter uma visão melhor do todo </li></ul><ul><li>Podemos usar partes destes elementos em soluções mais simples. </li></ul><ul><li>O framework deve ser o responsável pela integração destes elementos </li></ul>
  11. 11. Camada de Controle <ul><li>É o núcleo da aplicação </li></ul><ul><li>Responsável por tratar os eventos, as solicitações e as respostas da aplicação </li></ul><ul><li>Representado por um servidor que aguarda as informações provenientes do navegador e devolve uma resposta quando solicitado </li></ul>
  12. 12. Iniciando o uso do Python <ul><li>Resumo : </li></ul><ul><li>Servidor Web em Python </li></ul><ul><li>Muito simples </li></ul><ul><li>As páginas são métodos de classes python </li></ul><ul><li>Atualmente existem duas versões em uso: 3.01 e 2.2 </li></ul><ul><li>O navegador passa, através da página HTML, as informações que são tratadas como parâmetros pelas funções. </li></ul><ul><li>http://www.cherrypy.org/ </li></ul>CherryPy
  13. 13. Iniciando o uso do Python <ul><li>Exemplo : </li></ul><ul><li>import cherrypy </li></ul><ul><li>class HelloWorld(object): </li></ul><ul><li>def index(self): </li></ul><ul><li>return &quot;Hello World!&quot; </li></ul><ul><li>index.exposed = True </li></ul><ul><li># Cherrypy 2.2 </li></ul><ul><li>#cherrypy.root = HelloWorld() </li></ul><ul><li>#cherrypy.server.start() </li></ul><ul><li>cherrypy.quickstart(HelloWorld()) </li></ul>CherryPy CherryPy 3
  14. 14. Camada de Apresentação <ul><li>É a aparência do seu sistema </li></ul><ul><li>Nesta camada são preparadas as páginas que serão exibidas através do uso de módulos de substituição que permitem gerar páginas a partir de modelos ( templates) utilizando tags específicas. </li></ul><ul><li>Quanto mais isolada das regras de negócio da aplicação mais confortável para os web designers. </li></ul><ul><li>Existem vários módulos em python para resolver isso : zpt, kid, Genshi, ... </li></ul><ul><li>Trabalha em conjunto com o HTML, com o Javascript e o CSS. </li></ul>
  15. 15. Template kid <ul><li><?xml version='1.0' encoding='utf-8'?> </li></ul><ul><li><html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; </li></ul><ul><li>xmlns:py=&quot;http://purl.org/kid/ns#&quot;> </li></ul><ul><li><head> </li></ul><ul><li><title>${title.upper()}</title> </li></ul><ul><li></head> </li></ul><ul><li><body> </li></ul><ul><li><h1 py:content=&quot;title&quot;>Title</h1> </li></ul><ul><li><p> A message from Python: </p> </li></ul><ul><li><blockquote py:content=&quot;message&quot;> Message goes here. </blockquote> </li></ul><ul><li></body> </li></ul><ul><li></html> </li></ul>
  16. 16. Usando o Template #-*- encoding: utf-8 -*- from kid import Template template = Template(file='hello.kid', title=&quot;Hello World&quot;, message=u&quot;Python é simples !&quot;) print template.serialize()
  17. 17. Camada de Persistência <ul><li>Nesta camada temos a oportunidade de gravar as informações em um banco de dados. </li></ul><ul><li>A escolha do BD é muito importante e pode ser um fator de sucesso ou não da solução </li></ul><ul><li>A dificuldade surge pela manipulação do banco. Comandos específicos e em várias linhas. </li></ul><ul><li>A flexibilidade é um fator decisivo para o surgimento de uma camada de interface entre o banco e a aplicação </li></ul>
  18. 18. Iniciando o uso do Python <ul><li>Object-Relational Mappers </li></ul><ul><li>Exemplos : SQLObject, STORM, SQLALCHEMY </li></ul><ul><li>Permite criar uma camada de abstração entre o programador e o banco de dados, simplificando o código e melhorando a sua compreensão. </li></ul><ul><li>O uso do BD fica mais prático, porque você acessa os registros ”diretamente” </li></ul>ORM
  19. 19. SQLObject <ul><li>SQLObject é um ”wrapper” feito em python para um bancos de dados. </li></ul><ul><li>O Objetivo é criar um nível abstração para o pgrogramador, de forma a evitar os comandos SQL. </li></ul><ul><li>Atualmente pode ser utilizado com os seguintes bancos : MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL Server e Oracle. </li></ul><ul><li>http://www.sqlobject.org/ </li></ul>
  20. 20. SQLObject <ul><li>Cada tabela se transforma em uma classe </li></ul><ul><li>Cada linha da tabela é uma instância </li></ul><ul><li>As colunas se tornam atributos </li></ul><ul><ul><li>class Pessoa(SQLObject): </li></ul></ul><ul><ul><li>nome = StringCol() </li></ul></ul><ul><ul><li>sobrenome = StringCol() </li></ul></ul><ul><ul><li>emails = MultipleJoin(”Email”) </li></ul></ul><ul><ul><li>class Email(SQLOBject): </li></ul></ul><ul><ul><li>pessoa = ForeignKey(”Pessoa”) </li></ul></ul><ul><ul><li>tipo = EnumCol([”casa”, ”trabalho”]) </li></ul></ul><ul><ul><li>correio = StringCol() </li></ul></ul>
  21. 21. <ul><li># -*- encode: latin -*- </li></ul><ul><li>from sqlobject import * </li></ul><ul><li>import os </li></ul><ul><li># Inicializa o banco </li></ul><ul><li>db_filename = os.path.abspath(&quot;data.db&quot;) </li></ul><ul><li>connection_string = &quot;sqlite:&quot; + db_filename </li></ul><ul><li>connection = connectionForURI(connection_string) </li></ul><ul><li>sqlhub.processConnection = connection </li></ul><ul><li># [continua] </li></ul>SQLObject
  22. 22. <ul><li># Tabela person do banco </li></ul><ul><li>class Person(SQLObject): </li></ul><ul><li>firstName = StringCol() </li></ul><ul><li>middleInitial = StringCol(length = 1, default=None) </li></ul><ul><li>lastName = StringCol() </li></ul><ul><li># Criar a uma tabela nova </li></ul><ul><li>Person.createTable() </li></ul><ul><li># Grava uma linha nova no BD </li></ul><ul><li>Person(firstName =&quot;Romeu&quot;, lastName=&quot;silas&quot;) </li></ul>SQLObject
  23. 23. Juntando tudo ... <ul><li>Automação </li></ul><ul><li>CRUD </li></ul><ul><li>Admin interface </li></ul><ul><li>Templates e widgets </li></ul><ul><li>Autenticação e controle de acesso </li></ul><ul><li>Proteção contra Sql Injection </li></ul>
  24. 24. Frameworks Python <ul><li>Zope/Plone </li></ul><ul><li>TurboGears </li></ul><ul><li>Django </li></ul><ul><li>Web2py </li></ul><ul><li>Pylons </li></ul><ul><li>... </li></ul>
  25. 25. Iniciando o uso do Python <ul><li>Composto pelos seguintes módulos : </li></ul><ul><li>MochKit / Scriptaculous </li></ul><ul><li>Kid / Geshi </li></ul><ul><li>CherryPy </li></ul><ul><li>SQLObject / SQLAlchemy </li></ul>TurboGears
  26. 26. <ul><li>Estrutura monolítica </li></ul><ul><li>Contém engine de templates e um ORM integrado </li></ul><ul><li>Interface de administração </li></ul><ul><li>URL elegantes </li></ul><ul><li>Muito boa documentação </li></ul><ul><li>Grande comunidade no Brasil </li></ul>Django
  27. 27. - Site oficial : www.python.org - Site oficial no Brasil : www.pythonbrasil.com.br - Manual Referência : http://docs.python.org/ref/ref.html - Tutorial ( Português) : http://www.python.org/doc/current/tut/tut.html Alguns endereços : Referências
  28. 28. <ul><li>Lista SL-RJ : </li></ul><ul><li>groups.google.com/group/slrj </li></ul><ul><li>Lista PythonRio : </li></ul><ul><li>br.groups.yahoo.com/group/pythonrio/ </li></ul>Mais alguns endereços : Referências
  29. 29. - Python in a Nutshell – Alex Martelli – O'Reilly - Python Cookbook – Alex Martelli e David Ascher - O'Reilly - Dive Into Python – Mark Pilgrim ( http://www.diveintopython.org/ ) - Aprendendo Python - Mark Lutz e David Ascher Livros : Referências
  30. 30. Perguntas ?
  31. 31. Obrigado !! Luiz Guilherme F. Aldabalde [email_address]

×