Web2py-components

提供:Dev Guides
移動先:案内検索

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)