O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

Entendendo Frameworks web com Python

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 31 Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Entendendo Frameworks web com Python (20)

Anúncio

Mais recentes (20)

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]

×