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)