Entendendo Frameworks web com Python

31
Entendendo Frameworks Web com Python Luiz Guilherme F. Aldabalde Flisol 2009 - UERJ

description

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

Transcript of Entendendo Frameworks web com Python

Page 1: Entendendo Frameworks web com Python

Entendendo Frameworks Web com Python

Luiz Guilherme F. AldabaldeFlisol 2009 - UERJ

Page 2: Entendendo Frameworks web com Python

Apresentação

Page 3: Entendendo Frameworks web com Python

Conteúdo

Introdução

Python

Conceituando os Frameworks

Desafios da web

Dividir para conquistar -MVC

Camada de Controle

Camada de Apresentação

Camada de Persistência

Juntando tudo

Frameworks Python

Referências

Page 4: Entendendo Frameworks web com Python

Introdução

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.

Page 5: Entendendo Frameworks web com Python

Python

HistóricoPython 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.

Page 6: Entendendo Frameworks web com Python

Python - Introdução

 Por que usar Python ?

● Fácil Aprendizado ● Fácil Manutenção● Possui uma extensa Biblioteca Padrão● Possui uma poderosa Estruturas de Dados Nativas● Disponível com código aberto e livre● Interface para outras Linguagens ( Lua, Java, C) ● Multi­plataforma● É um canivete­suíço !!!

Page 7: Entendendo Frameworks web com Python

Python - Características

● Cada linha termina com ponto e vírgula (;) ou com um <enter >● Cada bloco de instruções é definido pela identação  ● Comentário em uma linha é definido pelo símbolo tralha (#)● Comentário em mais e uma linha podemos usar aspas triplas para começar e terminar (“”” texto comentado “””)● Uma variável não é declarada, ela assume o tipo quando associada com um valor

Resumindo  ... 

Page 8: Entendendo Frameworks web com Python

“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

“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. ”

fonte : wiki.python.org

Page 9: Entendendo Frameworks web com Python

Desafios da Web

Desafios do ambiente web :● Múltiplos ambientes a considerar ( browser,

servidor) ● Mais de uma linguagem envolvida ● Separação design x aplicação● Novos paradigmas web 2.0 : Ajax e Rich

Internet Applications

Page 10: Entendendo Frameworks web com Python

Dividir para conquistar - MVC

Compreendendo cada elemento podemos passar a ter uma visão melhor do todo

Podemos usar partes destes elementos em soluções mais simples.

O framework deve ser o responsável pela integração destes elementos

Page 11: Entendendo Frameworks web com Python

Camada de Controle

● É o núcleo da aplicação● Responsável por tratar os eventos, as

solicitações e as respostas da aplicação● Representado por um servidor que aguarda

as informações provenientes do navegador e devolve uma resposta quando solicitado

Page 12: Entendendo Frameworks web com Python

Iniciando o uso do Python 12

Resumo :

● Servidor Web em Python

● Muito simples

● As páginas são métodos de classes python

● Atualmente existem duas versões em uso: 3.01 e 2.2

● O navegador passa, através da página HTML, as informações que são tratadas como parâmetros pelas funções.

● http://www.cherrypy.org/

CherryPy

Page 13: Entendendo Frameworks web com Python

Iniciando o uso do Python 13

Exemplo :

import cherrypy

class HelloWorld(object):

def index(self):

return "Hello World!"

index.exposed = True

# Cherrypy 2.2

#cherrypy.root = HelloWorld()

#cherrypy.server.start()

cherrypy.quickstart(HelloWorld())

CherryPy 3

CherryPy

Page 14: Entendendo Frameworks web com Python

Camada de Apresentação

● É a aparência do seu sistema

● 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.

● Quanto mais isolada das regras de negócio da aplicação mais confortável para os web designers.

● Existem vários módulos em python para resolver isso : zpt, kid, Genshi, ...

● Trabalha em conjunto com o HTML, com o Javascript e o CSS.

Page 15: Entendendo Frameworks web com Python

Template kid

<?xml version='1.0' encoding='utf-8'?>

<html xmlns="http://www.w3.org/1999/xhtml"

xmlns:py="http://purl.org/kid/ns#">

<head>

<title>${title.upper()}</title>

</head>

<body>

<h1 py:content="title">Title</h1>

<p> A message from Python: </p>

<blockquote py:content="message"> Message goes here. </blockquote>

</body>

</html>

Page 16: Entendendo Frameworks web com Python

Usando o Template

#-*- encoding: utf-8 -*-from kid import Templatetemplate = Template(file='hello.kid', title="Hello World", message=u"Python é simples !")print template.serialize()

Page 17: Entendendo Frameworks web com Python

Camada de Persistência

● Nesta camada temos a oportunidade de gravar as informações em um banco de dados.

● A escolha do BD é muito importante e pode ser um fator de sucesso ou não da solução

● A dificuldade surge pela manipulação do banco. Comandos específicos e em várias linhas.

● A flexibilidade é um fator decisivo para o surgimento de uma camada de interface entre o banco e a aplicação

Page 18: Entendendo Frameworks web com Python

Iniciando o uso do Python 18

● Object-Relational Mappers

● Exemplos : SQLObject, STORM, SQLALCHEMY

● 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.

● O uso do BD fica mais prático, porque você acessa os registros ”diretamente”

ORM

Page 19: Entendendo Frameworks web com Python

SQLObject

● SQLObject é um ”wrapper” feito em python para um bancos de dados.

● O Objetivo é criar um nível abstração para o pgrogramador, de forma a evitar os comandos SQL.

● Atualmente pode ser utilizado com os seguintes bancos : MySQL, PostgreSQL, SQLite, Firebird, Sybase, MSSQL Server e Oracle.

● http://www.sqlobject.org/

Page 20: Entendendo Frameworks web com Python

SQLObject

● Cada tabela se transforma em uma classe

● Cada linha da tabela é uma instância

● As colunas se tornam atributos

class Pessoa(SQLObject): nome = StringCol() sobrenome = StringCol() emails = MultipleJoin(”Email”)class Email(SQLOBject): pessoa = ForeignKey(”Pessoa”) tipo = EnumCol([”casa”, ”trabalho”]) correio = StringCol()

Page 21: Entendendo Frameworks web com Python

# -*- encode: latin -*-

from sqlobject import *

import os

# Inicializa o banco

db_filename = os.path.abspath("data.db")

connection_string = "sqlite:" + db_filename

connection = connectionForURI(connection_string)

sqlhub.processConnection = connection

# [continua]

SQLObject

Page 22: Entendendo Frameworks web com Python

# Tabela person do banco

class Person(SQLObject):

firstName = StringCol() middleInitial = StringCol(length = 1, default=None) lastName = StringCol()

# Criar a uma tabela nova

Person.createTable()

# Grava uma linha nova no BD

Person(firstName ="Romeu", lastName="silas")

SQLObject

Page 23: Entendendo Frameworks web com Python

Juntando tudo ...

● Automação

● CRUD

● Admin interface

● Templates e widgets

● Autenticação e controle de acesso

● Proteção contra Sql Injection

Page 24: Entendendo Frameworks web com Python

Frameworks Python

● Zope/Plone● TurboGears● Django● Web2py● Pylons● ...

Page 25: Entendendo Frameworks web com Python

Iniciando o uso do Python

Composto pelos seguintes módulos :● MochKit / Scriptaculous● Kid / Geshi● CherryPy● SQLObject / SQLAlchemy

TurboGears

Page 26: Entendendo Frameworks web com Python

● Estrutura monolítica

● Contém engine de templates e um ORM integrado

● Interface de administração

● URL elegantes

● Muito boa documentação

● Grande comunidade no Brasil

Django

Page 27: Entendendo Frameworks web com Python

­ 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

Page 28: Entendendo Frameworks web com Python

● Lista SL-RJ : groups.google.com/group/slrj

● Lista PythonRio : br.groups.yahoo.com/group/pythonrio/

Mais alguns endereços  : 

Referências

Page 29: Entendendo Frameworks web com Python

­ 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

Page 30: Entendendo Frameworks web com Python

Perguntas ?

Page 31: Entendendo Frameworks web com Python

Obrigado !!

Luiz Guilherme F. [email protected]