Desenvolvendo aplicações web com python e web2py

Desenvolvendo aplicações web com python e web2py

Palestra ministrada por mim e Bruno Barbosa, no FLISOL-DF de 2011

054d9fa364a9f7db6985df0645b21b42?s=128

Gilson Filho

April 09, 2011
Tweet

Transcript

  1. 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
  2. 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
  3. 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
  4. Python Básico Python Básico

  5. 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
  6. 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
  7. Criada por Guido Van Criada por Guido Van Rossum em

    1989 Rossum em 1989
  8. Multiplataforma Multiplataforma

  9. 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
  10. 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
  11. Baterias incluídas!!! Baterias incluídas!!!

  12. 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
  13. 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
  14. Onde é usada? Onde é usada?

  15. Exemplos Básicos Exemplos Básicos

  16. 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)
  17. 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'}
  18. Estrutura Condicional Estrutura Condicional # -*- coding: utf-8 -*- if

    <condicao>: <bloco de código> elif <condição>: # Mesma coisa que else if <bloco de código> elif <condição>: <bloco de código> else: <bloco de código>
  19. Laços - For Laços - For # -*- coding: utf-8

    -*- for <referência> in <sequência>: <bloco de código> continue break
  20. Laços - While Laços - While # -*- coding: utf-8

    -*- while <condição>: <bloco de código> continue break
  21. 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.'
  22. 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.'
  23. Comentários Comentários # Comentário de uma linha # Linha que

    seta a codificação do arquivo # -*- coding: utf-8 -*- """ Doc String """
  24. Funções Funções # -*- coding: utf-8 -*- def func(parametro1, parametro2=padrao):

    """ Doc String """ <bloco de código> return valor
  25. O que é O que é

  26. É um framework criado em É um framework criado em

    2007 por Massimo Di Pierro 2007 por Massimo Di Pierro
  27. Foi criado no intuito de ensinar os Foi criado no

    intuito de ensinar os seus alunos da faculdade seus alunos da faculdade
  28. Baseado em vários Baseado em vários frameworks frameworks como como

  29. None
  30. É um projeto open source (LGPL v3) É um projeto

    open source (LGPL v3)
  31. Características Características

  32. Framework Framework Full-Stack Full-Stack

  33. Não é necessário instalar e Não é necessário instalar e

    configurar para desenvolver configurar para desenvolver
  34. Multiplataforma Multiplataforma

  35. Roda em vários servidores web Roda em vários servidores web

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

    as versões
  37. Facilita a internacionalização da Facilita a internacionalização da sua aplicação

    sua aplicação
  38. Suporta herança e inclusão de Suporta herança e inclusão de

    views views
  39. None
  40. Módulo de Autenticação e Módulo de Autenticação e permissão de

    acesso prontos permissão de acesso prontos
  41. Segue o padrão MVC Segue o padrão MVC

  42. Possui um Possui um Scaffolding App Scaffolding App

  43. Possui um ambiente Possui um ambiente administrativo administrativo

  44. Gerencia a aplicação Gerencia a aplicação

  45. Modelos Modelos

  46. Controladores (Controllers) Controladores (Controllers)

  47. Visualizadores (Views) Visualizadores (Views)

  48. Módulos (Modules) Módulos (Modules)

  49. Plugins Plugins

  50. Acesso ao shell do Python Acesso ao shell do Python

  51. Possui uma administração de Possui uma administração de banco de

    dados banco de dados
  52. None
  53. None
  54. None
  55. Possível editar o projeto com um Possível editar o projeto

    com um editor editor web-based web-based
  56. O uso da interface O uso da interface administrativa é

    opcional administrativa é opcional
  57. Renderiza o conteúdo em vários Renderiza o conteúdo em vários

    formatos formatos
  58. def hello(): message = "Hello World" return message Controller básico

    Controller básico hello/controllers/default.py hello/controllers/default.py
  59. Resultado Resultado http://localhost:8000/hello/default/hello http://localhost:8000/hello/default/hello

  60. Nomenclatura das URLs Nomenclatura das URLs http://localhost:8000/hello/default/hello http://<address>:<port>/app/controller/action

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

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

  63. 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
  64. <h1>{{=msg}}</h1> View básica View básica hello/views/default/hello.html hello/views/default/hello.html

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

  66. {{ extend 'layout.html' }} <h1>{{=msg}}</h1> {{ 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
  67. Resultado Resultado http://localhost:8000/hello/default/hello http://localhost:8000/hello/default/hello

  68. Mas e a camada de dados? Mas e a camada

    de dados?
  69. DAL DAL Data Abstraction Layer Data Abstraction Layer

  70. “ “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
  71. Comunica com a maioria dos Comunica com a maioria dos

    bancos de dados bancos de dados
  72. Pode ser usado em outros Pode ser usado em outros

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

  74. 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')
  75. 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)

    )
  76. 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 <table> Referente <table> • List:string List:string • List:integer List:integer • List:referente <table> List:referente <table>
  77. 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) )
  78. 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) )
  79. Projetos desenvolvidos em Projetos desenvolvidos em web2py web2py

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

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

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

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

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

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

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

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

  88. 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
  89. Apresentação disponível no Apresentação disponível no http://algoritmizando.com http://blog.gilsondev.com http://flisoldf.blog.br

  90. Obrigado a todos! Obrigado a todos!