Компонент определяется как функциональная часть веб-страницы, которая работает автономно. Он может состоять из модулей, контроллеров и представлений, которые встроены в веб-страницу. Компонент в приложении должен быть локализованным тегом, а производительность считается независимой от модуля.
В web2py основное внимание уделяется использованию компонентов, которые загружаются на страницу и которые взаимодействуют с контроллером компонентов через AJAX.
web2py включает в себя функцию, которая называется функцией LOAD , которая упрощает реализацию компонентов без явного программирования на JavaScript или AJAX.
Рассмотрим простое веб-приложение, а именно « test », которое расширяет приложение web2py пользовательской моделью в файле « models / db_comments.py ».
db.define_table( 'comment_post', Field('body','text', label = 'Your comment'),auth.signature )
Приведенный выше код создаст таблицу « comment_post » с правильным определением таблицы. Действие будет реализовано с помощью функций из « controllers / comments.py ».
def post(): return dict( form = SQLFORM(db.comment_post).process(), comments = db(db.comment_post).select() )
Соответствующий вид будет отображаться как —
{{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}}
Доступ к странице можно получить по указанному URL-адресу — http://127.0.0.1:8000/test/comments/post.
Упомянутый выше метод является традиционным способом доступа к представлению, который можно изменить с помощью реализации функции LOAD.
Это может быть достигнуто путем создания нового представления с расширением «.load», которое не расширяет макет.
Новый созданный вид будет «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}}
URL для доступа к странице будет — http://127.0.0.1:8000/test/comments/post.load
Компонент LOAD может быть встроен в любую другую страницу приложения web2py. Это можно сделать с помощью следующего утверждения.
{{= LOAD('comments','post.load',ajax = True)}}
Например, контроллеры могут быть отредактированы как —
def index(): return dict()
В View мы можем добавить компонент —
{{extend 'layout.html'}} {{= LOAD('comments','post.load',ajax = True)}}
Доступ к странице можно получить по URL — http://127.0.0.1:8000/test/default/index.
Компонент плагины
Компонент плагины — это плагины, которые однозначно определяют Компоненты . Компоненты обращаются к базе данных напрямую с помощью определения модели.
Как упоминалось в предыдущем примере, компонент комментариев в comments_plugin может быть сделан в разделе Models —
» models / plugin_comments.py » —
db.define_table( 'plugin_comments_comment', Field('body','text', label = 'Your comment'), auth.signature )
Контроллер будет включать в себя следующий плагин —