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)