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