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)