Slide 1

Slide 1 text

Gilson Filho e Bruno Barbosa Gilson Filho e Bruno Barbosa Desenvolvendo aplicações Desenvolvendo aplicações web com Python e Web2Py web com Python e Web2Py

Slide 2

Slide 2 text

Gilson Filho Gilson Filho ● Programador há 5 anos; Programador há 5 anos; ● Desenvolvimento web há 3 anos; Desenvolvimento web há 3 anos; ● Moderador do GruPy-DF; Moderador do GruPy-DF; ● Usuário linux há 3 anos; Usuário linux há 3 anos; ● Programador Java e Python; Programador Java e Python; ● Criador do FLISOL Inscriptions; Criador do FLISOL Inscriptions; ● Participante do web2py-developers e equipe de Participante do web2py-developers e equipe de tradução do web2py. tradução do web2py. @gilsonfilho @gilsonfilho http://gilsondev.com http://gilsondev.com http://github.com/contatogilsonsbf http://github.com/contatogilsonsbf

Slide 3

Slide 3 text

Bruno Barbosa Bruno Barbosa ● Graduando em Análise e Desenvolvimento de Graduando em Análise e Desenvolvimento de Sistemas; Sistemas; ● Programador Python, Desenvolvedor Web – Programador Python, Desenvolvedor Web – web2py, Plone; web2py, Plone; ● Criador do Quebra Link; Criador do Quebra Link; ● Criador do FLISOL Inscriptions; Criador do FLISOL Inscriptions; ● Moderador do GruPy-DF; Moderador do GruPy-DF; ● Membro da equipe de tradução do web2py; Membro da equipe de tradução do web2py; @bruninbsb @bruninbsb http://algoritmizando.com http://algoritmizando.com http://github.com/bruninbsb http://github.com/bruninbsb

Slide 4

Slide 4 text

Python Básico Python Básico

Slide 5

Slide 5 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 6

Slide 6 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 7

Slide 7 text

Criada por Guido Van Criada por Guido Van Rossum em 1989 Rossum em 1989

Slide 8

Slide 8 text

Multiplataforma Multiplataforma

Slide 9

Slide 9 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 10

Slide 10 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 11

Slide 11 text

Baterias incluídas!!! Baterias incluídas!!!

Slide 12

Slide 12 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 13

Slide 13 text

O que é Python? O que é Python? ● Interpretada Interpretada ● Very High Level Language Very High Level Language ● Criada por Guido Van Rossum em 1989 Criada por Guido Van Rossum em 1989 ● Multiplataforma Multiplataforma ● Orientada a Objetos, procedural e funcional Orientada a Objetos, procedural e funcional ● Software Livre Software Livre ● Baterias Incluídas Baterias Incluídas ● Sintaxe elegante simples e clara Sintaxe elegante simples e clara ● Tipagem dinâmica e forte Tipagem dinâmica e forte

Slide 14

Slide 14 text

Onde é usada? Onde é usada?

Slide 15

Slide 15 text

Exemplos Básicos Exemplos Básicos

Slide 16

Slide 16 text

Variáveis Variáveis # -*- coding: utf-8 -*- # Tipagem forte e dinâmica var_int = 11 var_float = 1.1 var_text = "Isso é uma String" print type(var_int) # int print type(var_float) # float print type(var_text) # str (String)

Slide 17

Slide 17 text

Lista, Tupla e Dicionários Lista, Tupla e Dicionários # -*- coding: utf-8 -*- # Lista pode ser alterado lista01 = [1,2,3] lista02 = ['a','b','c'] # Tupla não pode ser alterado tupla01 = (1,2,3) tupla02 = ('a','b','c') # Chaves e Valores pode ser de qualquer tipo dicionario01 = {'a':1,'b':2,'c':3} dicionario02 = {1:'a',2:'b',3:'c'}

Slide 18

Slide 18 text

Estrutura Condicional Estrutura Condicional # -*- coding: utf-8 -*- if : elif : # Mesma coisa que else if elif : else:

Slide 19

Slide 19 text

Laços - For Laços - For # -*- coding: utf-8 -*- for in : continue break

Slide 20

Slide 20 text

Laços - While Laços - While # -*- coding: utf-8 -*- while : continue break

Slide 21

Slide 21 text

Valores booleanos Valores booleanos # -*- coding: utf-8 -*- vai_passar = True if vai_passar: print 'Condicao aprovada' nao_passa = False if nao_passa: print 'Não pode passar!' else: print 'Não era para passar mesmo.'

Slide 22

Slide 22 text

Valores booleanos Valores booleanos # -*- coding: utf-8 -*- # Os valores abaixam também é do tipo False zero = 0 nulo = None string_vazia = '' if zero: # (...) elif nulo: # (...) elif string_vazia: # (...) else: print 'Todos os valores testados acima sao False.'

Slide 23

Slide 23 text

Comentários Comentários # Comentário de uma linha # Linha que seta a codificação do arquivo # -*- coding: utf-8 -*- """ Doc String """

Slide 24

Slide 24 text

Funções Funções # -*- coding: utf-8 -*- def func(parametro1, parametro2=padrao): """ Doc String """ return valor

Slide 25

Slide 25 text

O que é O que é

Slide 26

Slide 26 text

É um framework criado em É um framework criado em 2007 por Massimo Di Pierro 2007 por Massimo Di Pierro

Slide 27

Slide 27 text

Foi criado no intuito de ensinar os Foi criado no intuito de ensinar os seus alunos da faculdade seus alunos da faculdade

Slide 28

Slide 28 text

Baseado em vários Baseado em vários frameworks frameworks como como

Slide 29

Slide 29 text

No content

Slide 30

Slide 30 text

É um projeto open source (LGPL v3) É um projeto open source (LGPL v3)

Slide 31

Slide 31 text

Características Características

Slide 32

Slide 32 text

Framework Framework Full-Stack Full-Stack

Slide 33

Slide 33 text

Não é necessário instalar e Não é necessário instalar e configurar para desenvolver configurar para desenvolver

Slide 34

Slide 34 text

Multiplataforma Multiplataforma

Slide 35

Slide 35 text

Roda em vários servidores web Roda em vários servidores web

Slide 36

Slide 36 text

Garante a compatibilidade entre Garante a compatibilidade entre as versões as versões

Slide 37

Slide 37 text

Facilita a internacionalização da Facilita a internacionalização da sua aplicação sua aplicação

Slide 38

Slide 38 text

Suporta herança e inclusão de Suporta herança e inclusão de views views

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

Módulo de Autenticação e Módulo de Autenticação e permissão de acesso prontos permissão de acesso prontos

Slide 41

Slide 41 text

Segue o padrão MVC Segue o padrão MVC

Slide 42

Slide 42 text

Possui um Possui um Scaffolding App Scaffolding App

Slide 43

Slide 43 text

Possui um ambiente Possui um ambiente administrativo administrativo

Slide 44

Slide 44 text

Gerencia a aplicação Gerencia a aplicação

Slide 45

Slide 45 text

Modelos Modelos

Slide 46

Slide 46 text

Controladores (Controllers) Controladores (Controllers)

Slide 47

Slide 47 text

Visualizadores (Views) Visualizadores (Views)

Slide 48

Slide 48 text

Módulos (Modules) Módulos (Modules)

Slide 49

Slide 49 text

Plugins Plugins

Slide 50

Slide 50 text

Acesso ao shell do Python Acesso ao shell do Python

Slide 51

Slide 51 text

Possui uma administração de Possui uma administração de banco de dados banco de dados

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

No content

Slide 54

Slide 54 text

No content

Slide 55

Slide 55 text

Possível editar o projeto com um Possível editar o projeto com um editor editor web-based web-based

Slide 56

Slide 56 text

O uso da interface O uso da interface administrativa é opcional administrativa é opcional

Slide 57

Slide 57 text

Renderiza o conteúdo em vários Renderiza o conteúdo em vários formatos formatos

Slide 58

Slide 58 text

def hello(): message = "Hello World" return message Controller básico Controller básico hello/controllers/default.py hello/controllers/default.py

Slide 59

Slide 59 text

Resultado Resultado http://localhost:8000/hello/default/hello http://localhost:8000/hello/default/hello

Slide 60

Slide 60 text

Nomenclatura das URLs Nomenclatura das URLs http://localhost:8000/hello/default/hello http://
:/app/controller/action

Slide 61

Slide 61 text

http://localhost:8000/hello/default/hello/1/2 http://(...)/app/controller/action/arg1/arg2/argN

Slide 62

Slide 62 text

http://localhost:8000/hello/default/hello? id=1&rg=1234 http://(...)/app/controller/action?var=1&var=2&var=n

Slide 63

Slide 63 text

def hello(): message = "Hello World" return dict(msg=message) Enviando conteúdo para a view Enviando conteúdo para a view hello/controllers/default.py hello/controllers/default.py

Slide 64

Slide 64 text

{{=msg}}

View básica View básica hello/views/default/hello.html hello/views/default/hello.html

Slide 65

Slide 65 text

Resultado Resultado http://localhost:8000/hello/default/hello http://localhost:8000/hello/default/hello

Slide 66

Slide 66 text

{{ extend 'layout.html' }}

{{=msg}}

{{ include 'default/outra_msg.html' }} Adicionando herança e inclusão Adicionando herança e inclusão hello/views/default/hello.html hello/views/default/hello.html

Slide 67

Slide 67 text

Resultado Resultado http://localhost:8000/hello/default/hello http://localhost:8000/hello/default/hello

Slide 68

Slide 68 text

Mas e a camada de dados? Mas e a camada de dados?

Slide 69

Slide 69 text

DAL DAL Data Abstraction Layer Data Abstraction Layer

Slide 70

Slide 70 text

“ “DAL é uma API que DAL é uma API que mapeia objetos Python mapeia objetos Python em objetos de banco de dados em objetos de banco de dados como como queries,tabelas e registros. A DAL gera queries,tabelas e registros. A DAL gera códigos SQL dinâmicamente em tempo real códigos SQL dinâmicamente em tempo real utilizando sempre o dialeto SQL referente ao utilizando sempre o dialeto SQL referente ao banco de dados em uso.” banco de dados em uso.” http://web2py.com/book http://web2py.com/book

Slide 71

Slide 71 text

Comunica com a maioria dos Comunica com a maioria dos bancos de dados bancos de dados

Slide 72

Slide 72 text

Pode ser usado em outros Pode ser usado em outros frameworks frameworks

Slide 73

Slide 73 text

Abrindo conexão Abrindo conexão db = DAL('sqlite://banco.sqlite')

Slide 74

Slide 74 text

db = DAL('mysql://username:password@localhost/test') db = DAL('postgres://username:password@localhost/test') db = DAL('mssql://username:password@localhost/test') db = DAL('firebird://username:password@localhost/test') db = DAL('oracle://username/password@test') db = DAL('db2://username:password@test') db = DAL('ingres://username:password@localhost/test') db = DAL('informix://username:password@test') db = DAL('gae')

Slide 75

Slide 75 text

Criando uma tabela Criando uma tabela db.define_table('contact', Field('first_name','string',length=50,notnull=True), Field('last_name',length=50), Field('age','integer',default=10) )

Slide 76

Slide 76 text

Tipos de dados Tipos de dados ● String String ● Text Text ● Blob Blob ● Boolean Boolean ● Integer Integer ● Double Double ● decimal(n,m) decimal(n,m) ● Date Date ● Time Time ● Datetime Datetime ● Password Password ● Upload Upload ● Referente Referente ● List:string List:string ● List:integer List:integer ● List:referente List:referente

Slide 77

Slide 77 text

Relacionamentos Relacionamentos Um para Muitos Um para Muitos db.define_table('group', Field('name','string',length=50) ) db.define_table('contact', Field('name'), Field('group',db.group) )

Slide 78

Slide 78 text

Relacionamentos Relacionamentos db.define_table('group', Field('name','string',length=50) ) db.define_table('contact', Field('name')) Muitos para Muitos Muitos para Muitos db.define_table('role', Field('group_id',db.group), Field('contact_id',db.contact) )

Slide 79

Slide 79 text

Projetos desenvolvidos em Projetos desenvolvidos em web2py web2py

Slide 80

Slide 80 text

Campus Online Campus Online http://campus.visie.com.br/ http://campus.visie.com.br/

Slide 81

Slide 81 text

Innovare IT Innovare IT http://innovareit.com http://innovareit.com

Slide 82

Slide 82 text

Instant Press Instant Press http://instantpress.com http://instantpress.com

Slide 83

Slide 83 text

Quebra Link Quebra Link http://quebralink.algoritmizando.com http://quebralink.algoritmizando.com

Slide 84

Slide 84 text

Radbox Radbox http://radbox.com http://radbox.com

Slide 85

Slide 85 text

Flisol Inscrições Flisol Inscrições http://inscricoes.flisoldf.blog.br http://inscricoes.flisoldf.blog.br

Slide 86

Slide 86 text

Flisol Tweets Flisol Tweets http://flisoltweets.appspot.com http://flisoltweets.appspot.com

Slide 87

Slide 87 text

Mais aplicações em web2py Mais aplicações em web2py http://web2py.com/poweredby http://web2py.com/appliances

Slide 88

Slide 88 text

Mais informações sobre web2py Mais informações sobre web2py Site Oficial http://web2py.com Web2Py Brasil http://web2pybrasil.appspot.com Web2Py Slices (Tutoriais,Artigos,Snippets) http://web2pyslices.com Web2Py Group http://groups.google.com/group/web2py Web2Py Users Brazil http://groups.google.com/group/web2py-users-brazil Web2Py Ebook http://web2py.com/book

Slide 89

Slide 89 text

Apresentação disponível no Apresentação disponível no http://algoritmizando.com http://blog.gilsondev.com http://flisoldf.blog.br

Slide 90

Slide 90 text

Obrigado a todos! Obrigado a todos!