Web2py - घटक

एक घटक को वेब पेज के कार्यात्मक भाग के रूप में परिभाषित किया गया है, जो स्वायत्त रूप से काम करता है। यह मॉड्यूल, नियंत्रक और विचारों से बना हो सकता है, जो एक वेब पेज में एम्बेडेड होते हैं। एक आवेदन में घटक, स्थानीयकृत टैग होना चाहिए और प्रदर्शन को मॉड्यूल से स्वतंत्र माना जाता है।

Web2py में, मुख्य फोकस उन घटकों का उपयोग करने पर है जो पेज में लोड किए गए हैं और जो AJAX के माध्यम से घटक नियंत्रक के साथ संवाद करते हैं।

web2py में एक फ़ंक्शन शामिल होता है, जिसे कहा जाता है LOAD फ़ंक्शन, जो स्पष्ट जावास्क्रिप्ट या 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

लोड घटक को 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)