Post on 05-Jul-2015
description
Entendendo Frameworks Web com Python
Luiz Guilherme F. AldabaldeFlisol 2009 - UERJ
Apresentação
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
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.
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.
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) ● Multiplataforma● É um canivetesuíço !!!
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 ...
“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
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
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
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
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
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
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.
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>
Usando o Template
#-*- encoding: utf-8 -*-from kid import Templatetemplate = Template(file='hello.kid', title="Hello World", message=u"Python é simples !")print template.serialize()
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
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
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/
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()
# -*- 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
# 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
Juntando tudo ...
● Automação
● CRUD
● Admin interface
● Templates e widgets
● Autenticação e controle de acesso
● Proteção contra Sql Injection
Frameworks Python
● Zope/Plone● TurboGears● Django● Web2py● Pylons● ...
Iniciando o uso do Python
Composto pelos seguintes módulos :● MochKit / Scriptaculous● Kid / Geshi● CherryPy● SQLObject / SQLAlchemy
TurboGears
● 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
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
● Lista SL-RJ : groups.google.com/group/slrj
● Lista PythonRio : br.groups.yahoo.com/group/pythonrio/
Mais alguns endereços :
Referências
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
Perguntas ?
Obrigado !!
Luiz Guilherme F. Aldabaldelg.aldabalde@gmail.com