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)