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 함수 구현으로 변경할 수 있습니다.

확장 기능을 사용하여 새보기를 만들면됩니다. ".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)