Web2py - Componentes

Um componente é definido como a parte funcional de uma página da web, que funciona de forma autônoma. Ele pode ser composto de módulos, controladores e visualizações, que estão embutidos em uma página da web. O componente em uma aplicação deve ser um tag localizado e o desempenho é considerado independente do módulo.

No web2py, o foco principal é o uso de componentes que são carregados na página e que se comunicam com o controlador de componente via AJAX.

web2py inclui uma função, que é chamada de LOAD função, que torna a implementação de componentes fácil sem JavaScript ou programação AJAX explícita.

Considere um aplicativo da web simples chamado “test”Que estende o aplicativo web2py com modelo personalizado no arquivo“models/db_comments.py”.

db.define_table(
   'comment_post', Field('body','text',
   label = 'Your comment'),auth.signature
)

O código acima irá criar uma tabela “comment_post”Com a definição de tabela adequada. A ação será implementada com a ajuda de funções em “controllers/comments.py”.

def post():
   return dict(
      form = SQLFORM(db.comment_post).process(),
      comments = db(db.comment_post).select()
   )

A visualização correspondente será exibida como -

{{extend 'layout.html'}}
{{for post in comments:}}

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <span class = "post_body">{{= post.body}}</span>
</div>

{{pass}}
{{= form}}

A página pode ser acessada usando o URL fornecido - http://127.0.0.1:8000/test/comments/post

O método mencionado acima é uma forma tradicional de acessar uma visualização, que pode ser alterada com a implementação da função LOAD.

Isso pode ser obtido criando uma nova visualização com a extensão ".load" isso não estende o layout.

A nova visão criada seria "views/comments/post.load" -

<div class = "post">
   On {{= post.created_on}} {{= post.created_by.first_name}}
   says <blockquote class = "post_body">{{= post.body}}</blockquote>
</div>

{{pass}}
{{= form}}

O URL para acessar a página seria - http://127.0.0.1:8000/test/comments/post.load

O componente LOAD pode ser incorporado em qualquer outra página do aplicativo web2py. Isso pode ser feito usando a seguinte instrução.

{{= LOAD('comments','post.load',ajax = True)}}

Por exemplo, o Controllers pode ser editado como -

def index():
   return dict()

Dentro View, podemos adicionar o componente -

{{extend 'layout.html'}}
{{= LOAD('comments','post.load',ajax = True)}}

A página pode ser acessada com o URL - http://127.0.0.1:8000/test/default/index

Plugins de componentes

Os plug-ins de componentes são os plug-ins, que definem exclusivamente Components. Os componentes acessam o banco de dados diretamente com sua definição de modelo.

Conforme mencionado no exemplo anterior, o componente de comentários em um comments_plugin pode ser feito no Models seção -

"models/plugin_comments.py"-

db.define_table(
   'plugin_comments_comment',
   Field('body','text', label = 'Your comment'),
   auth.signature
)

o Controller irá incluir o seguinte plugin -

def plugin_comments():
   return LOAD('plugin_comments','post',ajax = True)