Web2py-components
Web2py-コンポーネント
コンポーネントは、Webページの機能部分として定義され、自律的に動作します。 Webページに埋め込まれているモジュール、コントローラー、ビューで構成できます。 アプリケーションのコンポーネントはローカライズされたタグである必要があり、パフォーマンスはモジュールに依存しないと見なされます。
web2pyの主な焦点は、ページにロードされ、AJAX経由でコンポーネントコントローラーと通信するコンポーネントの使用です。
web2pyには LOAD 関数と呼ばれる関数が含まれており、明示的なJavaScriptまたはAJAXプログラミングなしでコンポーネントの実装を容易にします。
ファイル「 models/db_comments.py 」のカスタムモデルでweb2pyアプリケーションを拡張する単純なWebアプリケーション、すなわち「 test 」を考えてください。
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 'layoutl'}}
{{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)}}
たとえば、 Controllers は次のように編集できます-
def index():
return dict()
- 表示*では、コンポーネントを追加できます-
{{extend 'layoutl'}}
{{= 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
)
- コントローラ*には次のプラグインが含まれます-
def plugin_comments():
return LOAD('plugin_comments','post',ajax = True)