associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Diferenças para "TemplatesGenericos"

Diferenças entre as versões de 1 e 2
Revisão 1e 2004-10-07 13:38:42
Tamanho: 1389
Editor: sub-redes-225-194-049
Comentário:
Revisão 2e 2004-10-07 13:45:44
Tamanho: 3623
Editor: sub-redes-225-194-049
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 21: Linha 21:

== Aplicações ==

O sistema foi criado a partir de uma idéia ambiciosa: um ambiente de desenvolvimento de aplicações comerciais, capaz de converter definições de telas de entrada em múltiplos formatos de saída. Para viabilizar o desenvolvimento, optamos pelo crescimento gradual. A biblioteca de templates está sendo focada em duas aplicações até o momento:

 * '''Templates para Web''': permite a especificação de páginas com layouts complexos, incluindo forms de entrada de dados. A descrição final é facilmente legível, e o uso de objetos facilita a composição de telas complexas, com vários elementos, em tempo de execução.
 Exemplos:
 {{{
 class Page(htmlcontainer.HtmlPage):
     class head(htmlcontainer.HtmlPage.head):
         stylesheet = CSSStyleSheet
     class body(htmlcontainer.HtmlPage.body):
         contents = """
         Hello World!
         """

 class FormEdicaoUsuario(Form):
     title = 'Dados do usuário'
     class dadosbasicos(Panel):
         style = 'form-section'
         apelido = EditBox(caption = 'Identificação', size = 15)
         senha = EditBox(caption = 'Senha', size = 10, password = True)
         nome = EditBox(caption = 'Nome completo', size = 40)
     class endereco(Panel):
         style = 'form-section'
         endereco = EditBox(caption = 'Endereço', size = 40)
         bairro = EditBox(caption = 'Bairro', size = 40)
         cidade = EditBox(caption = 'Cidade', size = 40)
     class extras(Panel):
         style = 'form-section'
         observacao= EditBox(caption = 'Observações',
                             multiline= True, rows = 10, cols = 40)
 }}}
 * '''Arquivos de inicialização (.ini)''': permite a especificação de uma estrutura de arquivo de inicialização .ini, com a divisão em seções. Cada atributo pode ter seu tipo e um valor default definido de forma simples e legível:
 {{{
 class CherryPyIni(IniFile):
    class server(IniSection):
        socketPort = TypedAttribute(8080)
        threadPool = TypedAttribute(10)
    class staticContent(IniSection):
        bitmaps = TypedAttribute('c:/work/sidercom/bitmaps')
    class session(IniSection):
        storageType = TypedAttribute('ram')
 }}}

Introdução

O projeto TemplatesGenéricos visa disponibilizar uma biblioteca geral para expressar estruturas de dados complexas em código Python. Trata-se ainda de uma abordagem experimental. O conceito básico é simples:

class Pessoa(GenericTemplate):
    nome = 'José da Silva'
    class endereco(GenericTemplate):
        rua = 'Rua das Bobos, 0'
        cidade = 'Patópolis'
    class documentos(GenericTemplate):
        cpf = '00.000.000-00'
        rg  = '0.000.000'

A princípio, o template acima é bastante similar a qualquer outro escrito em XML, ou em um dicionário Python. Qual seriam as vantagens, então?

  • Legibilidade: o código em Python é bem estruturado e legível. Já o código em XML não é tão legível, e é mais difícil de editar manualmente. O dicionário também se torna confuso, porque muitas definições ficam dentro de strings, o que polui o código com aspas e chaves que não são nada 'pitônicas';

  • Integração: o código pode residir dentro de um arquivo convencional Python. Não há necessidade de ler a descrição de outro lugar.

  • Orientação a objeto: é muito fácil criar novas classes e construir estruturas dinâmicas e inteligentes, que processam os atributos de forma automatizada. Estas estruturas podem ser herdadas e reutilizadas dentro do ambiente normal de programação Python.

Aplicações

O sistema foi criado a partir de uma idéia ambiciosa: um ambiente de desenvolvimento de aplicações comerciais, capaz de converter definições de telas de entrada em múltiplos formatos de saída. Para viabilizar o desenvolvimento, optamos pelo crescimento gradual. A biblioteca de templates está sendo focada em duas aplicações até o momento:

  • Templates para Web: permite a especificação de páginas com layouts complexos, incluindo forms de entrada de dados. A descrição final é facilmente legível, e o uso de objetos facilita a composição de telas complexas, com vários elementos, em tempo de execução. Exemplos:

     class Page(htmlcontainer.HtmlPage):
         class head(htmlcontainer.HtmlPage.head):
             stylesheet = CSSStyleSheet
         class body(htmlcontainer.HtmlPage.body):
             contents = """
             Hello World!
             """
    
     class FormEdicaoUsuario(Form):
         title = 'Dados do usuário'
         class dadosbasicos(Panel):
             style    = 'form-section'
             apelido  = EditBox(caption = 'Identificação', size = 15)
             senha    = EditBox(caption = 'Senha', size = 10, password = True)
             nome     = EditBox(caption = 'Nome completo', size = 40)
         class endereco(Panel):
             style    = 'form-section'
             endereco = EditBox(caption = 'Endereço', size = 40)
             bairro   = EditBox(caption = 'Bairro', size = 40)
             cidade   = EditBox(caption = 'Cidade', size = 40)
         class extras(Panel):
             style    = 'form-section'
             observacao= EditBox(caption = 'Observações',
                                 multiline= True, rows = 10, cols = 40)
  • Arquivos de inicialização (.ini): permite a especificação de uma estrutura de arquivo de inicialização .ini, com a divisão em seções. Cada atributo pode ter seu tipo e um valor default definido de forma simples e legível:

     class CherryPyIni(IniFile):
        class server(IniSection):
            socketPort = TypedAttribute(8080)
            threadPool = TypedAttribute(10)
        class staticContent(IniSection):
            bitmaps = TypedAttribute('c:/work/sidercom/bitmaps')
        class session(IniSection):
            storageType = TypedAttribute('ram')