Web2py - Các thành phần

Thành phần được định nghĩa là phần chức năng của trang web, hoạt động độc lập. Nó có thể bao gồm các mô-đun, bộ điều khiển và khung nhìn, được nhúng trong một trang web. Thành phần trong một ứng dụng, phải là thẻ bản địa hóa và hiệu suất được coi là độc lập với mô-đun.

Trong web2py, trọng tâm chính là sử dụng các thành phần được tải trong trang và giao tiếp với bộ điều khiển thành phần thông qua AJAX.

web2py bao gồm một hàm, được gọi là LOAD hàm, giúp việc triển khai các thành phần dễ dàng mà không cần lập trình JavaScript hoặc AJAX rõ ràng.

Hãy xem xét một ứng dụng web đơn giản là “test"Mở rộng ứng dụng web2py với mô hình tùy chỉnh trong tệp"models/db_comments.py”.

db.define_table(
   'comment_post', Field('body','text',
   label = 'Your comment'),auth.signature
)

Đoạn mã trên sẽ tạo một bảng “comment_post”Với định nghĩa bảng thích hợp. Hành động sẽ được thực hiện với sự trợ giúp của các chức năng trong “controllers/comments.py”.

def post():
   return dict(
      form = SQLFORM(db.comment_post).process(),
      comments = db(db.comment_post).select()
   )

Chế độ xem tương ứng sẽ được hiển thị là -

{{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}}

Có thể truy cập trang bằng URL đã cho - http://127.0.0.1:8000/test/comments/post

Phương pháp được đề cập ở trên là một cách truyền thống để truy cập một khung nhìn, có thể được thay đổi khi thực hiện hàm LOAD.

Điều này có thể đạt được bằng cách tạo chế độ xem mới với tiện ích mở rộng ".load" điều đó không mở rộng bố cục.

Chế độ xem mới được tạo sẽ là "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 để truy cập trang sẽ là - http://127.0.0.1:8000/test/comments/post.load

Thành phần LOAD có thể được nhúng vào bất kỳ trang nào khác của ứng dụng web2py. Điều này có thể được thực hiện bằng cách sử dụng câu lệnh sau.

{{= LOAD('comments','post.load',ajax = True)}}

Ví dụ, Controllers có thể được sửa thành -

def index():
   return dict()

Trong View, chúng ta có thể thêm thành phần -

{{extend 'layout.html'}}
{{= LOAD('comments','post.load',ajax = True)}}

Trang có thể được truy cập bằng URL - http://127.0.0.1:8000/test/default/index

Plugin thành phần

Các plugin thành phần là các plugin, định nghĩa duy nhất Components. Các thành phần truy cập cơ sở dữ liệu trực tiếp với định nghĩa mô hình của chúng.

Như đã đề cập trong ví dụ trước, thành phần nhận xét thành một comments_plugin có thể được thực hiện trong Models phần -

"models/plugin_comments.py"-

db.define_table(
   'plugin_comments_comment',
   Field('body','text', label = 'Your comment'),
   auth.signature
)

Các Controller sẽ bao gồm plugin sau:

def plugin_comments():
   return LOAD('plugin_comments','post',ajax = True)