SlideShare a Scribd company logo
1 of 49
Download to read offline
Grok - mais um framework web       Programando com o Grok     M´dulos externos
                                                               o                 Considera¸˜es Finais
                                                                                          co




                               Diego Manh˜es Pinheiro
                                         a
                              N´cleo de Pesquisa em Sistemas de Informa¸˜o
                                u                                      ca
                         Instituto Federal Fluminense - Campus Campos Centro
                                          me@dmpinheiro.net


                               27 de Setembro de 2010
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                   ZODB
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                          Componentes
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      wget http://python-distribute.org/distribute_setup.py
      python2.6 distribute_setup.py
      easy_install pip
      pip install virtualenv
      virtualenv ~/grokenv
      source ~/grokenv/bin/activate
      easy_install pip
      pip install grokproject
      grokproject example
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      import grok

      class Example(grok.Application, grok.Container):
          pass

      class Index(grok.View):
          pass # see app_templates/index.pt
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      <html>
      <head>
      </head>
      <body>
        <h1>Congratulations!</h1>

        <p>Your Grok application is up and running.
        Edit <code>example/app_templates/index.pt</code> to change
        this page.</p>
      </body>
      </html>
Grok - mais um framework web    Programando com o Grok   M´dulos externos
                                                          o                 Considera¸˜es Finais
                                                                                     co




                               Conceitos b´sicos
                                          a


           • Application - Representa o sistema.
           • View - Descreve um endere¸o para acesso web.
                                      c
           • Model - Descreve um conceito de neg´cio
                                                o
             simples.
           • Container - Descreve um objeto de neg´cio que
                                                  o
             pode conter outros objetos.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                       Criando duas Applica¸˜es
                                           co


      bin/paster serve parts/etc/debug.ini
      Traceback (most recent call last):
        File ".../scan.py", line 40, in check_module_component
         File ".../etc/site.zcml", line 4.2-4.31
         File ".../src/example/configure.zcml", line 5.2-5.27
      GrokError: Multiple possible contexts for <class ’example.app.Index’>,
      please use the ’context’ directive.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                           View

           • Associada a um objeto de neg´cio.
                                         o
           • M´todo render ´ chamado toda vez que a
              e            e
             p´gina ´ acessada.
              a       e
           • Nome da classe ´ torna-se parte do endere¸o
                                e                         c
             URL.
             ´
           • E poss´ ıvel adicionar images atrav´s da vari´vel
                                                e         a
             static.
           • View ´ associada automaticamente com a
                   e
             classe.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




  Entendendo o esquema de publica¸˜o de
                                 ca
                 objetos

      http://localhost:8080/app01/1/editar
           • http://localhost:8080 - Endere¸o onde o
                                           c
             servidor onde o framework est´ funcionando.
                                          a
           • app01 - Nome da Aplica¸˜o
                                    ca
           • 1 - nome de um objeto
           • editar - nome da view
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                         Model
      import grok
      from persistent.list import PersistentList
      class Carro(grok.Model):

                def __init__(self,nome, modelo=None,ano=No
                    self.nome
                    self.modelo=None
                    self.ano=None
                    self.opcionais = PersistentList(opcion

                def say_greetings(self):
                    print "Hello, my friend! Stay awhile a
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                     Container



           • Objetos que cont´m outros objetos.
                             e
           • Usa a API de dicion´rio.
                                a
           • identificador utilizado torna-se parte da URL.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                  C´digo criando um Container
                   o


      import grok

      class Example(grok.Application, grok.Container):
          pass

      class Content(grok.Model):
          pass
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                  C´digo usando um Container
                   o
      :Test-Layer: functional

            >>> from example.app import Example, Content
            >>> root = getRootFolder()
            >>> root[’app’] = app = Example()
            >>> first_content = Content()
            >>> app[’first’] = first_content
            >>> app[’second’] = Content()
            >>> list(app.keys())
            [u’first’, u’second’]
            >>> list(app.values()) #doctest: +ELLIPSIS
            [<example.app.Content object at ... >, <example.app.Content object at ... >
            >>> app.has_key(2)
            True
            >>> app.items()
            [(’first’,<>),(2,<>)]
            >>> len(app)
            2
            >>> app.get(’first’)
            <>
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                     Container



           • Usa a API de dicion´rio.
                                a
           • identificador utilizado torna-se parte da URL.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                         Forms


           • Mecanismo para a defini¸˜o de formul´rios.
                                   ca           a
           • Utiliza o conceito de widgets.
             ´
           • E poss´
                   ıvel criar sua pr´prias widgets.
                                    o
           • DisplayForm, EditForm, AddForm
Grok - mais um framework web       Programando com o Grok            M´dulos externos
                                                                      o                    Considera¸˜es Finais
                                                                                                    co




                                              Forms
      import grok
      from models import Person
      from example.app import Example
      from zope.formlib.widgets import RadioWidget as _RadioWidget
      from zope.schema import Bool, TextLine, Datetime, Choice
      import uuid


      class Index(grok.View):
          grok.context(Example)

          def list_of_persons(self):
              return self.context.keys()


      def RadioWidget(field, request):
           vocabulary = field.vocabulary
           widget = _RadioWidget(field, vocabulary, request)
           return widget

      PERSON_FIELDS = {’name’: TextLine(title=u’Nome’,description=u’Informe o teu nome:’),
                       ’date_of_birth’: Datetime(title=u’Data de Nascimento’,
                                description=u’Informe sua data de nascimento’),
                       ’gender’: Choice(title=u’Sexo’,description=u’’,values=(u’Masculino’,u’Feminino’,))}

      class ViewPerson(grok.DisplayForm):

          grok.name(’index’)
          grok.context(Person)

          form_fields = grok.Fields(**PERSON_FIELDS)
Grok - mais um framework web       Programando com o Grok   M´dulos externos
                                                             o                 Considera¸˜es Finais
                                                                                        co




                                              Forms



      import grok

      class Example(grok.Application, grok.Container):
          pass
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                        Viewlet


           • Define uma ´rea que pode ser compartilhada
                       a
             entre v´rias vis˜es.
                    a        o
             ´
           • E associada a um viewletmanager, que ´ a
                                                  e
             respons´vel por
                    a
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                               ViewletManager
      import grok

      class Example(grok.Application, grok.Container
          pass

      class Index(grok.View):
          pass


      class AreadoUsuario(grok.ViewletManager):
          grok.view(Index)
          grok.name(’example.main’)
Grok - mais um framework web    Programando com o Grok   M´dulos externos
                                                          o                 Considera¸˜es Finais
                                                                                     co




                               Princ´
                                    ıpios de O.O.


      Program to a interface, not to a implementation.
      Composition over inheritance.
      Depend upon abstractions (interfaces), not upon
      concrete classes.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




             Definindo Interfaces com Python

      Esque¸a sobre classes e sobre conceitos
           c
      complicados. Interfaces permitem:
        • Permite expor uma API.
        • Permite que mecanismos consultem uma
          interface.
        • Interfaces precisam ser declaradas como
          implementadas na defini¸˜o da sua classe.
                                   ca
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                         Utility

      Conhecido tamb´m como Service Pattern.
                       e
        • Funciona utilizando uma interface como
          consulta.
        • O m´dulo zope.component ´ o teu amigo.
               o                     e
        • Usando uma interface como base pode-se ter
          v´rias Utility.
           a
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      import grok
      from datetime import datetime

      from example.interfaces import IDateUtility, I

      class Example(grok.Application, grok.Container
          pass

      class Index(grok.View):
          grok.context(Example)

      class ComicQuizUtility(grok.LocalUtility):

                grok.name("comic")
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      :Test-Layer: functional

              >>> from example.app import Example
              >>> from example.interfaces import IDateUti
              >>> root = getRootFolder()
              >>> root[’app’] = Example()
              >>> import zope.component
              >>> date_utility = zope.component.getUtilit
              >>> date_utility.now().strftime(’%d/%m/%Y’)
              ’27/09/2010’
              >>> quiz_utility = zope.component.getUtilit
              Traceback (most recent call last):
              ...
              ComponentLookupError: (<InterfaceClass exam
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                 GlobalUtility



      Funciona como o Service s´ que ´ valido para
                               o     e
      qualquer aplica¸˜o.
                     ca
Grok - mais um framework web        Programando com o Grok         M´dulos externos
                                                                    o                 Considera¸˜es Finais
                                                                                               co




                                               Adapter
      #!/usr/bin/env python
      # -*- coding: UTF-8 -*-

      import grok
      from interfaces import IPortaVGA, IPortaMiniDVI

      class Example(grok.Application, grok.Container):
          pass

      class Index(grok.View):
          pass # see app_templates/index.pt


      class AdaptadorDVItoVGA(grok.Adapter):
          grok.implements(IPortaVGA)
          grok.context(IPortaMiniDVI)

          def conectar_entrada_vga(self,cable):
              self.context.conectar_entrada_minidvi(self)
              print "Conectando o adaptador VGA."

      class Macbook(object):
          grok.implements(IPortaMiniDVI)

          def conectar_entrada_minidvi(self, cable):
              print "Conectando na Porta MiniDVI em um Macbook."


      class NotebookHP(object):
          grok.implements(IPortaVGA)
Grok - mais um framework web        Programando com o Grok         M´dulos externos
                                                                    o                       Considera¸˜es Finais
                                                                                                     co




                                     MultiAdapter
      :Test-Layer: functional

         >>> from example.app import Macbook, NotebookHP, Projetor
         >>> from example.app import plugar_laptop_em_um_projetor
         >>> meu_notebook = Macbook()
         >>> projetor_da_apresentacao = Projetor()
         >>> plugar_laptop_em_um_projetor(meu_notebook,projetor_da_apresentacao)
         Conectando na Porta MiniDVI em um Macbook.
         Conectando o adaptador VGA.
         >>> notebook_do_elesbom = NotebookHP()
         >>> plugar_laptop_em_um_projetor(notebook_do_elesbom,projetor_da_apresentacao)
         Conectando na porta VGA de um notebook HP.
         >>> from zope.component import getAdapter,queryAdapter
         >>> from example.interfaces import IPortaVGA
         >>> adaptador = queryAdapter(meu_notebook,IPortaVGA)
         >>> type(adaptador)
         <class ’example.app.AdaptadorDVItoVGA’>
         >>> outro_adaptador = getAdapter(notebook_do_elesbom,IPortaVGA)
         Traceback (most recent call last):
         ...
         ComponentLookupError: (<example.app.NotebookHP object at ... <InterfaceClass example.interfaces.IPortaVG
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                MultiAdapter
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                           Definindo a Seguran¸a
                                             c

      import grok


      class UmaPermissao(grok.Permission):
          grok.name("example.register")

      class VerHome(grok.Permission):
          grok.name("example.homeaccess")
Grok - mais um framework web       Programando com o Grok          M´dulos externos
                                                                    o                 Considera¸˜es Finais
                                                                                               co




                           Definindo a Seguran¸a
                                             c


      import grok
      from permissions import VerHome, UmaPermissao


      class Membro(grok.Role):
          grok.name("example.Membro")
          grok.permissions( ’example.ViewHome’, ’example.register’,)
      #    grok.permissions( ViewHome, UmaPermissao,)
Grok - mais um framework web       Programando com o Grok          M´dulos externos
                                                                    o                 Considera¸˜es Finais
                                                                                               co




      #!/usr/bin/env python
      # -*- coding: UTF-8 -*-

      import grok
      import permissions

      class Example(grok.Application, grok.Container):
          pass

      class Segredo(grok.View):
          grok.require("example.homeaccess")

          def render(self,**kwargs):
              return """<html>
                       <body>
                       <img src="" tal:attributes="static/malandro.jpg"/>
                       </body>
                       </html>
                       """

      class Index(grok.View):
          grok.require(permissions.VerHome)

          @grok.require("example.register")
          def available_users(self):
              return u"Greetings Stranger!"
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                  Conectando a DB Relacional
      Existem dois mecanismos para utilizar mapeamento
      objeto relacional transparente com o Grok: o
      megrok.rdb e o stormcontainer. O primeiro ´ uma
                                                 e
      camada que segue o conjunto de opera¸˜es do
                                            co
      objetos Grok s´ que ao inv´s de Armazenar os
                     o           e
      dados no ZODB. ele usa o SQlAlchemy para efetuar
      o mapeamento. O nva.stormcontainer utiliza um
      outro mecanismo de .
        • megrok.rdb
        • nva.stormcontainer
Grok - mais um framework web         Programando com o Grok        M´dulos externos
                                                                    o                 Considera¸˜es Finais
                                                                                               co




           Definindo as classes o megrok.rdb
      import grok
      from sqlalchemy import Column, ForeignKey
      from sqlalchemy.types import Integer, String
      from sqlalchemy.orm import relation
      from megrok import rdb
      from z3c.saconfig import EngineFactory, GloballyScopedSession
      from z3c.saconfig.interfaces import (IEngineFactory, IScopedSession,
              IEngineCreatedEvent)


      TEST_DSN = ’sqlite:///:memory:’
      metadata = rdb.MetaData()
      engine_factory = EngineFactory(TEST_DSN)
      scoped_session = GloballyScopedSession()

      grok.global_utility(engine_factory, provides=IEngineFactory, direct=True)
      grok.global_utility(scoped_session, provides=IScopedSession, direct=True)

      class Example(grok.Application, grok.Container):
          pass

      class Index(grok.View):
          grok.context(Example)
          pass # see app_templates/index.pt


      class Cursos(rdb.Container):
          pass

      class Departamento(rdb.Model):
          rdb.metadata(metadata)
Grok - mais um framework web       Programando com o Grok           M´dulos externos
                                                                     o                 Considera¸˜es Finais
                                                                                                co




          Criando as classes de mapeamento
      :Test-Layer: functional

          >>> from example.app import Example
          >>> from megrok import rdb
          >>> root = getRootFolder()
          >>> root[’app’] = Example()
          >>> from example.app import Curso, Departamento
          >>> session = rdb.Session()
          >>> filosofia = Departamento(nome="Filosofia")
          >>> session.add(filosofia)
          >>> logica = Curso(nome="L´gica")
                                    o
          >>> etica = Curso(nome="´tica")
                                  E
          >>> metafisica = Curso(nome="Metaf´sica")
                                            ı
          >>> session.add_all([logica, etica, metafisica])
          >>> filosofia.cursos.set(logica)
          >>> filosofia.cursos.set(etica)
          >>> filosofia.cursos.set(metafisica)
          >>> for key, value in sorted(filosofia.cursos.items()):
          ...     print key, value.nome, value.departmento.nome
          1 L´gica Filosofia
              o
            ´
          2 Etica Filosofia
          3 Metaf´sica Filosofia
                 ı
Grok - mais um framework web       Programando com o Grok       M´dulos externos
                                                                 o                 Considera¸˜es Finais
                                                                                            co




                 Definindo as classes usando o
                     nva.stormcontainer
      import grok
      from nva.stormcontainer import StormContainer
      from storm.locals import Storm, Int, Unicode, Reference

      class Example(grok.Application, grok.Container):
          pass

      class Grupo(StormContainer, grok.Container):

          def __init__(self):
              super(Grupo,self).__init__()
              self.setClassName(’example.app.Pessoa’)
              self.setStoreUtilityName(’test’)

      class Compania(StormContainer, grok.Container):

          def __init__(self):
              super(Compania,self).__init__()
              self.setClassName(’example.app.Departamento’)
              self.setStoreUtilityName(’test’)

      class Departamento(grok.Model,Storm):
          __storm_table__ = "departamento"
          id_departamento = Int(primary=True)
          nome = Unicode()

      class Pessoa(grok.Model,Storm):
          __storm_table__ = "pessoa"
Grok - mais um framework web       Programando com o Grok           M´dulos externos
                                                                     o                 Considera¸˜es Finais
                                                                                                co




      Do a functional doctest test on the app.
      ========================================

      :Test-Layer: functional

      Let’s first create an instance of Example at the top level:

         >>> from example.app import Example,Grupo, Compania, Pessoa, Departamento
         >>> root = getRootFolder()
         >>> root[’app’] = app = Example()
         >>> app[’pessoas’] = pessoas = Grupo()
         >>> app[’departamentos’] = iff = Compania()
         >>> print iff.id, pessoas.id
         None, None
         >>> import transaction
         >>> transaction.commit()
         >>> print iff.id, pessoas.id
         None, None
         >>> nsi = Departamento()
         >>> nsi.nome = "N´cleo de Pesquisa em Sistemas de Informa¸ao"
                          u                                       c~
         >>> iff[’id’] = Com
         >>> app[’departamentos’]
         >>> pessoa = Pessoa()
         >>> pessoa.nome = "Diego"
         >>>
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                          Usando o megrok.login



      Permite definir rapidamente um sistema de usu´rio
                                                  a
      e p´ginas de login e logout.
         a
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                 Usando o megrok.strictrequire



      For¸a a defini¸˜o de seguran¸a para todas as Views.
         c         ca            c
      Procedimentos simples de uso : Inclua como
      dependˆncia.
             e
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                               Outros m´dulos
                                       o
           • megrok.navigation - Permite criar menus e
                associ´-los com classes Views.
                       a
           •    megrok.jinja - Usar a sintaxe Jinja para a
                cria¸˜o de modelos de p´ginas.
                    ca                   a
           •    megrok.genshi - Usar a sintaxe Genshi para a
                cria¸˜o de modelos de p´ginas.
                    ca                   a
           •    megrok.z3ctable - Permite criar tabula¸oes em
                                                       c˜
                html facilmente a partir de item de containers.
           •    megrok.traject - Permite criar mecanismo f´cil
                                                           a
                de ”atravessamento”de URLS.
           •    megrok.chameleon - Permite aumentar a
                performance dos modelos de p´ginas.
                                               a
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                   Conclus˜es
                                          o


           • Possui uma gama gigante de componentes.
           • Agora ´ poss´
                   e     ıvel fazer coisas simples.
           • OO rulez!
           • Flexibilidade infinita.
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                               Documenta¸˜o
                                        ca

           • http://grok.zope.org
           • http://github.com/dmpinheiro/Tutorial-Grok-
             pt-br
           • http://apidoc.zope.org
           • http://wiki.zope.org/zope3/book.pdf
           • http://nsi.iff.edu.br/dicas-e-tutoriais/zca
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




                                          Livros
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




  Enrique¸a sua cultura in´til: a origem da
         c                u
                palavra grok
      A palavra grok vem do livro strange in strange land
      por robert a. heinlein.




      Referˆncia : http://en.wikipedia.org/wiki/grok
           e
Grok - mais um framework web   Programando com o Grok   M´dulos externos
                                                         o                 Considera¸˜es Finais
                                                                                    co




      Obrigado!!!
           •    me@dmpinheiro.net
           •    github.com/dmpinheiro
           •    slideshare.com/dmpinheiro
           •    launchpad.net/dmpinheiro

More Related Content

Similar to Grok!

Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Danilo Pinotti
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...Erick Bonnemasou Jaccoud
 
Palestra Zend Framework FISL XI
Palestra Zend Framework FISL XIPalestra Zend Framework FISL XI
Palestra Zend Framework FISL XIFlávio Lisboa
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterEdlaine Zamora
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoIgor Sobreira
 
RubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosRubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosFelipe Gadelha Ruoso
 
PHP e componentes reutilizáveis
PHP e componentes reutilizáveisPHP e componentes reutilizáveis
PHP e componentes reutilizáveiselliando dias
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkJaime Neto
 
O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3Danilo Pinotti
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11William Colen
 
Apresentação realidade aumentada para aplicações web e mobile
Apresentação   realidade aumentada para aplicações web e mobileApresentação   realidade aumentada para aplicações web e mobile
Apresentação realidade aumentada para aplicações web e mobileRWTH Aachen University
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourcetdc-globalcode
 
Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfDanilo Pinotti
 
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiComponentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiFábio Luiz Esperati Pagoti
 
Ret Barbosa
Ret BarbosaRet Barbosa
Ret Barbosakacdown
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Ryan Padilha
 
Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Patrick Kaminski
 

Similar to Grok! (20)

Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]Vue - Básico sobre Vue [1 de 2 - 2020]
Vue - Básico sobre Vue [1 de 2 - 2020]
 
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
DrupalCamp Campinas 2016 - Auditando performance, conteúdo e boas práticas em...
 
Palestra Zend Framework FISL XI
Palestra Zend Framework FISL XIPalestra Zend Framework FISL XI
Palestra Zend Framework FISL XI
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
Desenvolvimento web ágil com Django
Desenvolvimento web ágil com DjangoDesenvolvimento web ágil com Django
Desenvolvimento web ágil com Django
 
RubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhosRubyConf 17 - Colocando sua aplicação vue nos trilhos
RubyConf 17 - Colocando sua aplicação vue nos trilhos
 
PHP e componentes reutilizáveis
PHP e componentes reutilizáveisPHP e componentes reutilizáveis
PHP e componentes reutilizáveis
 
Performance de verdade com Phalcon Framework
Performance de verdade com Phalcon FrameworkPerformance de verdade com Phalcon Framework
Performance de verdade com Phalcon Framework
 
O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3O básico sobre Vue 2. Talk Vue Básico 1/3
O básico sobre Vue 2. Talk Vue Básico 1/3
 
Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11Programabilida de BrOffice.org - Fisl 11
Programabilida de BrOffice.org - Fisl 11
 
Apresentação realidade aumentada para aplicações web e mobile
Apresentação   realidade aumentada para aplicações web e mobileApresentação   realidade aumentada para aplicações web e mobile
Apresentação realidade aumentada para aplicações web e mobile
 
Spring data
Spring dataSpring data
Spring data
 
Open4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSourceOpen4Education | MC122 - Introdução a ALM OpenSource
Open4Education | MC122 - Introdução a ALM OpenSource
 
Site estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdfSite estático + Hospedagem Gratuita.pdf
Site estático + Hospedagem Gratuita.pdf
 
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio PagotiComponentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
Componentes UI5 - SAP Inside Track Joinville 2015 - Fábio Pagoti
 
Desenvolvimento Web
Desenvolvimento WebDesenvolvimento Web
Desenvolvimento Web
 
Ret Barbosa
Ret BarbosaRet Barbosa
Ret Barbosa
 
Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!Flask e Docker - rumo a AWS!
Flask e Docker - rumo a AWS!
 
Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)Apresentação do Oraculum Framework (PHP)
Apresentação do Oraculum Framework (PHP)
 

Grok!

  • 1. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Diego Manh˜es Pinheiro a N´cleo de Pesquisa em Sistemas de Informa¸˜o u ca Instituto Federal Fluminense - Campus Campos Centro me@dmpinheiro.net 27 de Setembro de 2010
  • 2. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co
  • 3. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co ZODB
  • 4. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co
  • 5. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Componentes
  • 6. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co
  • 7. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co wget http://python-distribute.org/distribute_setup.py python2.6 distribute_setup.py easy_install pip pip install virtualenv virtualenv ~/grokenv source ~/grokenv/bin/activate easy_install pip pip install grokproject grokproject example
  • 8. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co import grok class Example(grok.Application, grok.Container): pass class Index(grok.View): pass # see app_templates/index.pt
  • 9. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co <html> <head> </head> <body> <h1>Congratulations!</h1> <p>Your Grok application is up and running. Edit <code>example/app_templates/index.pt</code> to change this page.</p> </body> </html>
  • 10. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Conceitos b´sicos a • Application - Representa o sistema. • View - Descreve um endere¸o para acesso web. c • Model - Descreve um conceito de neg´cio o simples. • Container - Descreve um objeto de neg´cio que o pode conter outros objetos.
  • 11. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Criando duas Applica¸˜es co bin/paster serve parts/etc/debug.ini Traceback (most recent call last): File ".../scan.py", line 40, in check_module_component File ".../etc/site.zcml", line 4.2-4.31 File ".../src/example/configure.zcml", line 5.2-5.27 GrokError: Multiple possible contexts for <class ’example.app.Index’>, please use the ’context’ directive.
  • 12. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co View • Associada a um objeto de neg´cio. o • M´todo render ´ chamado toda vez que a e e p´gina ´ acessada. a e • Nome da classe ´ torna-se parte do endere¸o e c URL. ´ • E poss´ ıvel adicionar images atrav´s da vari´vel e a static. • View ´ associada automaticamente com a e classe.
  • 13. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Entendendo o esquema de publica¸˜o de ca objetos http://localhost:8080/app01/1/editar • http://localhost:8080 - Endere¸o onde o c servidor onde o framework est´ funcionando. a • app01 - Nome da Aplica¸˜o ca • 1 - nome de um objeto • editar - nome da view
  • 14. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Model import grok from persistent.list import PersistentList class Carro(grok.Model): def __init__(self,nome, modelo=None,ano=No self.nome self.modelo=None self.ano=None self.opcionais = PersistentList(opcion def say_greetings(self): print "Hello, my friend! Stay awhile a
  • 15. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Container • Objetos que cont´m outros objetos. e • Usa a API de dicion´rio. a • identificador utilizado torna-se parte da URL.
  • 16. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co C´digo criando um Container o import grok class Example(grok.Application, grok.Container): pass class Content(grok.Model): pass
  • 17. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co C´digo usando um Container o :Test-Layer: functional >>> from example.app import Example, Content >>> root = getRootFolder() >>> root[’app’] = app = Example() >>> first_content = Content() >>> app[’first’] = first_content >>> app[’second’] = Content() >>> list(app.keys()) [u’first’, u’second’] >>> list(app.values()) #doctest: +ELLIPSIS [<example.app.Content object at ... >, <example.app.Content object at ... > >>> app.has_key(2) True >>> app.items() [(’first’,<>),(2,<>)] >>> len(app) 2 >>> app.get(’first’) <>
  • 18. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Container • Usa a API de dicion´rio. a • identificador utilizado torna-se parte da URL.
  • 19. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Forms • Mecanismo para a defini¸˜o de formul´rios. ca a • Utiliza o conceito de widgets. ´ • E poss´ ıvel criar sua pr´prias widgets. o • DisplayForm, EditForm, AddForm
  • 20. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Forms import grok from models import Person from example.app import Example from zope.formlib.widgets import RadioWidget as _RadioWidget from zope.schema import Bool, TextLine, Datetime, Choice import uuid class Index(grok.View): grok.context(Example) def list_of_persons(self): return self.context.keys() def RadioWidget(field, request): vocabulary = field.vocabulary widget = _RadioWidget(field, vocabulary, request) return widget PERSON_FIELDS = {’name’: TextLine(title=u’Nome’,description=u’Informe o teu nome:’), ’date_of_birth’: Datetime(title=u’Data de Nascimento’, description=u’Informe sua data de nascimento’), ’gender’: Choice(title=u’Sexo’,description=u’’,values=(u’Masculino’,u’Feminino’,))} class ViewPerson(grok.DisplayForm): grok.name(’index’) grok.context(Person) form_fields = grok.Fields(**PERSON_FIELDS)
  • 21. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Forms import grok class Example(grok.Application, grok.Container): pass
  • 22. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Viewlet • Define uma ´rea que pode ser compartilhada a entre v´rias vis˜es. a o ´ • E associada a um viewletmanager, que ´ a e respons´vel por a
  • 23. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co ViewletManager import grok class Example(grok.Application, grok.Container pass class Index(grok.View): pass class AreadoUsuario(grok.ViewletManager): grok.view(Index) grok.name(’example.main’)
  • 24. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Princ´ ıpios de O.O. Program to a interface, not to a implementation. Composition over inheritance. Depend upon abstractions (interfaces), not upon concrete classes.
  • 25. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Definindo Interfaces com Python Esque¸a sobre classes e sobre conceitos c complicados. Interfaces permitem: • Permite expor uma API. • Permite que mecanismos consultem uma interface. • Interfaces precisam ser declaradas como implementadas na defini¸˜o da sua classe. ca
  • 26. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Utility Conhecido tamb´m como Service Pattern. e • Funciona utilizando uma interface como consulta. • O m´dulo zope.component ´ o teu amigo. o e • Usando uma interface como base pode-se ter v´rias Utility. a
  • 27. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co import grok from datetime import datetime from example.interfaces import IDateUtility, I class Example(grok.Application, grok.Container pass class Index(grok.View): grok.context(Example) class ComicQuizUtility(grok.LocalUtility): grok.name("comic")
  • 28. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co :Test-Layer: functional >>> from example.app import Example >>> from example.interfaces import IDateUti >>> root = getRootFolder() >>> root[’app’] = Example() >>> import zope.component >>> date_utility = zope.component.getUtilit >>> date_utility.now().strftime(’%d/%m/%Y’) ’27/09/2010’ >>> quiz_utility = zope.component.getUtilit Traceback (most recent call last): ... ComponentLookupError: (<InterfaceClass exam
  • 29. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co GlobalUtility Funciona como o Service s´ que ´ valido para o e qualquer aplica¸˜o. ca
  • 30. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Adapter #!/usr/bin/env python # -*- coding: UTF-8 -*- import grok from interfaces import IPortaVGA, IPortaMiniDVI class Example(grok.Application, grok.Container): pass class Index(grok.View): pass # see app_templates/index.pt class AdaptadorDVItoVGA(grok.Adapter): grok.implements(IPortaVGA) grok.context(IPortaMiniDVI) def conectar_entrada_vga(self,cable): self.context.conectar_entrada_minidvi(self) print "Conectando o adaptador VGA." class Macbook(object): grok.implements(IPortaMiniDVI) def conectar_entrada_minidvi(self, cable): print "Conectando na Porta MiniDVI em um Macbook." class NotebookHP(object): grok.implements(IPortaVGA)
  • 31. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co MultiAdapter :Test-Layer: functional >>> from example.app import Macbook, NotebookHP, Projetor >>> from example.app import plugar_laptop_em_um_projetor >>> meu_notebook = Macbook() >>> projetor_da_apresentacao = Projetor() >>> plugar_laptop_em_um_projetor(meu_notebook,projetor_da_apresentacao) Conectando na Porta MiniDVI em um Macbook. Conectando o adaptador VGA. >>> notebook_do_elesbom = NotebookHP() >>> plugar_laptop_em_um_projetor(notebook_do_elesbom,projetor_da_apresentacao) Conectando na porta VGA de um notebook HP. >>> from zope.component import getAdapter,queryAdapter >>> from example.interfaces import IPortaVGA >>> adaptador = queryAdapter(meu_notebook,IPortaVGA) >>> type(adaptador) <class ’example.app.AdaptadorDVItoVGA’> >>> outro_adaptador = getAdapter(notebook_do_elesbom,IPortaVGA) Traceback (most recent call last): ... ComponentLookupError: (<example.app.NotebookHP object at ... <InterfaceClass example.interfaces.IPortaVG
  • 32. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co MultiAdapter
  • 33. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co
  • 34. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Definindo a Seguran¸a c import grok class UmaPermissao(grok.Permission): grok.name("example.register") class VerHome(grok.Permission): grok.name("example.homeaccess")
  • 35. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Definindo a Seguran¸a c import grok from permissions import VerHome, UmaPermissao class Membro(grok.Role): grok.name("example.Membro") grok.permissions( ’example.ViewHome’, ’example.register’,) # grok.permissions( ViewHome, UmaPermissao,)
  • 36. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co #!/usr/bin/env python # -*- coding: UTF-8 -*- import grok import permissions class Example(grok.Application, grok.Container): pass class Segredo(grok.View): grok.require("example.homeaccess") def render(self,**kwargs): return """<html> <body> <img src="" tal:attributes="static/malandro.jpg"/> </body> </html> """ class Index(grok.View): grok.require(permissions.VerHome) @grok.require("example.register") def available_users(self): return u"Greetings Stranger!"
  • 37. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Conectando a DB Relacional Existem dois mecanismos para utilizar mapeamento objeto relacional transparente com o Grok: o megrok.rdb e o stormcontainer. O primeiro ´ uma e camada que segue o conjunto de opera¸˜es do co objetos Grok s´ que ao inv´s de Armazenar os o e dados no ZODB. ele usa o SQlAlchemy para efetuar o mapeamento. O nva.stormcontainer utiliza um outro mecanismo de . • megrok.rdb • nva.stormcontainer
  • 38. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Definindo as classes o megrok.rdb import grok from sqlalchemy import Column, ForeignKey from sqlalchemy.types import Integer, String from sqlalchemy.orm import relation from megrok import rdb from z3c.saconfig import EngineFactory, GloballyScopedSession from z3c.saconfig.interfaces import (IEngineFactory, IScopedSession, IEngineCreatedEvent) TEST_DSN = ’sqlite:///:memory:’ metadata = rdb.MetaData() engine_factory = EngineFactory(TEST_DSN) scoped_session = GloballyScopedSession() grok.global_utility(engine_factory, provides=IEngineFactory, direct=True) grok.global_utility(scoped_session, provides=IScopedSession, direct=True) class Example(grok.Application, grok.Container): pass class Index(grok.View): grok.context(Example) pass # see app_templates/index.pt class Cursos(rdb.Container): pass class Departamento(rdb.Model): rdb.metadata(metadata)
  • 39. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Criando as classes de mapeamento :Test-Layer: functional >>> from example.app import Example >>> from megrok import rdb >>> root = getRootFolder() >>> root[’app’] = Example() >>> from example.app import Curso, Departamento >>> session = rdb.Session() >>> filosofia = Departamento(nome="Filosofia") >>> session.add(filosofia) >>> logica = Curso(nome="L´gica") o >>> etica = Curso(nome="´tica") E >>> metafisica = Curso(nome="Metaf´sica") ı >>> session.add_all([logica, etica, metafisica]) >>> filosofia.cursos.set(logica) >>> filosofia.cursos.set(etica) >>> filosofia.cursos.set(metafisica) >>> for key, value in sorted(filosofia.cursos.items()): ... print key, value.nome, value.departmento.nome 1 L´gica Filosofia o ´ 2 Etica Filosofia 3 Metaf´sica Filosofia ı
  • 40. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Definindo as classes usando o nva.stormcontainer import grok from nva.stormcontainer import StormContainer from storm.locals import Storm, Int, Unicode, Reference class Example(grok.Application, grok.Container): pass class Grupo(StormContainer, grok.Container): def __init__(self): super(Grupo,self).__init__() self.setClassName(’example.app.Pessoa’) self.setStoreUtilityName(’test’) class Compania(StormContainer, grok.Container): def __init__(self): super(Compania,self).__init__() self.setClassName(’example.app.Departamento’) self.setStoreUtilityName(’test’) class Departamento(grok.Model,Storm): __storm_table__ = "departamento" id_departamento = Int(primary=True) nome = Unicode() class Pessoa(grok.Model,Storm): __storm_table__ = "pessoa"
  • 41. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Do a functional doctest test on the app. ======================================== :Test-Layer: functional Let’s first create an instance of Example at the top level: >>> from example.app import Example,Grupo, Compania, Pessoa, Departamento >>> root = getRootFolder() >>> root[’app’] = app = Example() >>> app[’pessoas’] = pessoas = Grupo() >>> app[’departamentos’] = iff = Compania() >>> print iff.id, pessoas.id None, None >>> import transaction >>> transaction.commit() >>> print iff.id, pessoas.id None, None >>> nsi = Departamento() >>> nsi.nome = "N´cleo de Pesquisa em Sistemas de Informa¸ao" u c~ >>> iff[’id’] = Com >>> app[’departamentos’] >>> pessoa = Pessoa() >>> pessoa.nome = "Diego" >>>
  • 42. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Usando o megrok.login Permite definir rapidamente um sistema de usu´rio a e p´ginas de login e logout. a
  • 43. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Usando o megrok.strictrequire For¸a a defini¸˜o de seguran¸a para todas as Views. c ca c Procedimentos simples de uso : Inclua como dependˆncia. e
  • 44. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Outros m´dulos o • megrok.navigation - Permite criar menus e associ´-los com classes Views. a • megrok.jinja - Usar a sintaxe Jinja para a cria¸˜o de modelos de p´ginas. ca a • megrok.genshi - Usar a sintaxe Genshi para a cria¸˜o de modelos de p´ginas. ca a • megrok.z3ctable - Permite criar tabula¸oes em c˜ html facilmente a partir de item de containers. • megrok.traject - Permite criar mecanismo f´cil a de ”atravessamento”de URLS. • megrok.chameleon - Permite aumentar a performance dos modelos de p´ginas. a
  • 45. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Conclus˜es o • Possui uma gama gigante de componentes. • Agora ´ poss´ e ıvel fazer coisas simples. • OO rulez! • Flexibilidade infinita.
  • 46. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Documenta¸˜o ca • http://grok.zope.org • http://github.com/dmpinheiro/Tutorial-Grok- pt-br • http://apidoc.zope.org • http://wiki.zope.org/zope3/book.pdf • http://nsi.iff.edu.br/dicas-e-tutoriais/zca
  • 47. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Livros
  • 48. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Enrique¸a sua cultura in´til: a origem da c u palavra grok A palavra grok vem do livro strange in strange land por robert a. heinlein. Referˆncia : http://en.wikipedia.org/wiki/grok e
  • 49. Grok - mais um framework web Programando com o Grok M´dulos externos o Considera¸˜es Finais co Obrigado!!! • me@dmpinheiro.net • github.com/dmpinheiro • slideshare.com/dmpinheiro • launchpad.net/dmpinheiro