Web2py - त्वरित गाइड

web2pyचुस्त विकास के लिए एक मुक्त, मुक्त-स्रोत वेब फ्रेमवर्क के रूप में परिभाषित किया गया है जिसमें डेटाबेस-संचालित वेब अनुप्रयोग शामिल हैं; यह पायथन में लिखा गया है और पायथन में प्रोग्रामेबल है। यह एक पूर्ण-स्टैक फ्रेमवर्क है; इसमें सभी आवश्यक घटक होते हैं, एक डेवलपर को पूरी तरह कार्यात्मक वेब एप्लिकेशन बनाने की आवश्यकता होती है।

web2py ढांचा इस प्रकार है Model-View-Controller पारंपरिक पैटर्न के विपरीत वेब एप्लिकेशन चलाने का पैटर्न।

  • Modelअनुप्रयोग का एक हिस्सा है जिसमें डेटा के लिए तर्क शामिल हैं। मॉडल में वस्तुओं को डेटाबेस से डेटा को पुनर्प्राप्त करने और संग्रहीत करने के लिए उपयोग किया जाता है।

  • Viewएप्लिकेशन का एक हिस्सा है, जो उपयोगकर्ताओं को समाप्त करने के लिए डेटा के प्रदर्शन को प्रदान करने में मदद करता है। डेटा का प्रदर्शन मॉडल से लिया गया है।

  • Controllerएप्लिकेशन का एक हिस्सा है, जो उपयोगकर्ता इंटरैक्शन को संभालता है। नियंत्रक एक दृश्य से डेटा पढ़ सकते हैं, उपयोगकर्ता इनपुट को नियंत्रित कर सकते हैं, और विशिष्ट मॉडल को इनपुट डेटा भेज सकते हैं।

  • web2pyकुकीज़ और सत्र का प्रबंधन करने के लिए एक अंतर्निहित सुविधा है। लेनदेन (एसक्यूएल के संदर्भ में) करने के बाद, सत्र भी एक साथ संग्रहीत किया जाता है।

  • web2pyकुछ कार्यों के पूरा होने के बाद निर्धारित अंतराल में कार्यों को चलाने की क्षमता है। इससे हासिल किया जा सकता हैCRON

web2py - वर्कफ़्लो

नीचे दिए गए वर्कफ़्लो आरेख पर एक नज़र डालें।

वर्कफ़्लो आरेख नीचे वर्णित है।

  • Models, Views तथा Controller घटक उपयोगकर्ता web2py अनुप्रयोग बनाते हैं।

  • कई अनुप्रयोगों को web2py के एक ही उदाहरण में होस्ट किया जा सकता है।

  • ब्राउज़र सर्वर पर HTTP अनुरोध भेजता है और सर्वर के साथ इंटरैक्ट करता है Model, Controller तथा View आवश्यक आउटपुट लाने के लिए।

  • तीर डेटाबेस इंजन के साथ संचार का प्रतिनिधित्व करते हैं। डेटाबेस क्वेरी को कच्चे SQL में या web2py डेटाबेस एब्स्ट्रेक्शन लेयर (जिसे आगे के अध्यायों में चर्चा की जाएगी) का उपयोग करके लिखा जा सकता है, ताकिweb2py एप्लीकेशन कोड किसी भी डेटाबेस इंजन से स्वतंत्र है।

  • Model डेटाबेस के साथ डेटाबेस कनेक्शन स्थापित करता है और डेटाबेस के साथ इंटरैक्ट करता है ControllerController दूसरी ओर के साथ बातचीत View डेटा के प्रदर्शन को प्रस्तुत करने के लिए।

  • Dispatcherनियंत्रक में एक फ़ंक्शन कॉल के लिए HTTP अनुरोध के अनुसार अनुरोधित URL को मैप करता है। फ़ंक्शन का आउटपुट एक स्ट्रिंग या एक हैश तालिका हो सकती है।

  • डेटा द्वारा प्रदान किया गया है View। यदि उपयोगकर्ता HTML पृष्ठ (डिफ़ॉल्ट) का अनुरोध करता है, तो डेटा एक HTML पृष्ठ में प्रदान किया जाता है। यदि उपयोगकर्ता XML में उसी पृष्ठ का अनुरोध करता है, तो web2py एक ऐसा दृश्य खोजने की कोशिश करता है जो XML में शब्दकोश को प्रस्तुत कर सके।

  • Web2py के समर्थित प्रोटोकॉल में HTML, XML, JSON, RSS, CSV और RTF शामिल हैं।

मॉडल-व्यू-नियंत्रक

model-view-controller web2py का प्रतिनिधित्व इस प्रकार है -

नमूना

"db.py" is the model:
db = DAL('sqlite://storage.sqlite')
db.define_table(employee, Field('name'), Field(‘phone’))

Modelएप्लिकेशन डेटा का तर्क शामिल है। यह डेटाबेस से जोड़ता है जैसा कि ऊपर दिए गए आंकड़े में बताया गया है। विचार करें कि SQLite का उपयोग किया जा रहा है और इसमें संग्रहीत किया गया हैstorage.sqliteकर्मचारी के रूप में परिभाषित तालिका के साथ फ़ाइल। यदि तालिका मौजूद नहीं है, तो संबंधित तालिका बनाकर web2py मदद करता है।

नियंत्रक

कार्यक्रम "default.py" है Controller

def employees():
   grid = SQLFORM.grid(db.contact, user_signature = False)
   return locals()

में web2py, यूआरएल मैपिंग कार्यों और मॉड्यूल तक पहुंचने में मदद करता है। उपरोक्त उदाहरण के लिए, नियंत्रक में एक एकल फ़ंक्शन (या "एक्शन") होता है जिसे कर्मचारी कहा जाता है।

द्वारा की गई कार्रवाई Controller एक स्ट्रिंग या पायथन डिक्शनरी देता है, जो कि चर के एक स्थानीय सेट सहित कुंजी और मूल्य का संयोजन है।

राय

"default/contacts.html" है View

{{extend 'layout.html'}}
<h1>Manage My Employees</h1>
{{=grid}}

दिए गए उदाहरण के लिए, View संबंधित नियंत्रक फ़ंक्शन के निष्पादित होने के बाद आउटपुट प्रदर्शित करता है।

इसका उद्देश्य Viewशब्दकोश में चर को प्रस्तुत करना है, जो HTML के रूप में है। View फ़ाइल HTML में लिखी गई है, लेकिन यह पायथन कोड की मदद से एम्बेड करता है {{ and }} सीमांकक।

HTML में एम्बेड किए गए कोड में शब्दकोश में पायथन कोड होता है।

Web2py से शुरू करें

web2py विंडोज, यूनिक्स और मैक ओएस एक्स जैसे सभी प्रमुख ऑपरेटिंग सिस्टम के लिए बाइनरी पैकेज में आता है।

Web2py स्थापित करना आसान है क्योंकि -

  • इसमें पायथन दुभाषिया शामिल है, इसलिए आपको इसे पहले से स्थापित करने की आवश्यकता नहीं है। एक सोर्स कोड संस्करण भी है जो सभी ऑपरेटिंग सिस्टम पर चलता है।

  • निम्नलिखित लिंक में बाइनरी पैकेज शामिल हैं web2pyउपयोगकर्ता की आवश्यकता के अनुसार डाउनलोड करने के लिए - www.web2py.com

  • web2pyफ्रेमवर्क को अन्य फ्रेमवर्क के विपरीत पूर्व-इंस्टॉलेशन की आवश्यकता नहीं है। उपयोगकर्ता को ऑपरेटिंग सिस्टम की आवश्यकता के अनुसार जिप फाइल और अनजिप को डाउनलोड करना होगा।

  • web2py पाइथन में रूपरेखा लिखी गई है, जो एक पूर्ण गतिशील भाषा है जिसे चलाने के लिए किसी संकलन या जटिल स्थापना की आवश्यकता नहीं है।

  • यह जावा या .net जैसी अन्य प्रोग्रामिंग भाषाओं की तरह एक वर्चुअल मशीन का उपयोग करता है और यह डेवलपर्स द्वारा लिखे गए स्रोत कोड को पारदर्शी रूप से बाइट-संकलित कर सकता है।

ऑपरेटिंग सिस्टम आदेश
यूनिक्स और लिनक्स (स्रोत वितरण) python web2py.py
ओएस एक्स (बाइनरी वितरण) web2py.app खोलें
विंडोज (द्विआधारी web2py वितरण) web2py.exe
विंडोज (स्रोत web2py वितरण) c: /Python27/python.exe web2py.py

अजगर को ऑब्जेक्ट-ओरिएंटेड और इंटरैक्टिव भाषा के संयोजन के रूप में परिभाषित किया जा सकता है। यह एक ओपन सोर्स सॉफ्टवेयर है। गुइडो वैन रोसुम ने 1980 के दशक के अंत में अजगर की कल्पना की।

पायथन पेरल (प्रैक्टिकल एक्सट्रैक्शन और रिपोर्टिंग लैंग्वेज) के समान भाषा है, जिसने अपनी स्पष्ट वाक्य रचना और पठनीयता के कारण लोकप्रियता हासिल की है।

पायथन की मुख्य उल्लेखनीय विशेषताएं इस प्रकार हैं -

  • अजगर को सीखना और पोर्टेबल होना अपेक्षाकृत आसान है। यूनिक्स आधारित प्रणालियों सहित कई ऑपरेटिंग सिस्टमों में इसके कथनों की आसानी से व्याख्या की जा सकती है,Mac OS, MS-DOS, OS/2, और विंडोज के विभिन्न संस्करण।

  • पायथन सभी प्रमुख ऑपरेटिंग सिस्टम के साथ पोर्टेबल है। यह वाक्य रचना को समझने के लिए एक आसान उपयोग करता है, जो प्रोग्राम को अनुकूल बनाता है।

  • यह एक बड़े मानक पुस्तकालय के साथ आता है जो कई कार्यों का समर्थन करता है।

उपरोक्त आरेख से, यह स्पष्ट रूप से दिखाई दे रहा है कि पायथन स्क्रिप्टिंग के साथ-साथ प्रोग्रामिंग भाषा का एक संयोजन है। उन्हें अन्य कार्यक्रमों की तरह ही स्क्रिप्टिंग भाषाओं की व्याख्या की जाती है।

पायथन के संस्करण

पायथन में तीन उत्पादन-गुणवत्ता कार्यान्वयन हैं, जिन्हें CPython, Jython और IronPython कहा जाता है। इन्हें पायथन के संस्करण भी कहा जाता है।

  • Classic Python उर्फ CPython एक संकलक, दुभाषिया है और इसमें अंतर्निहित C और वैकल्पिक विस्तार मॉड्यूल शामिल हैं जो कि मानक C भाषा में लागू किया गया है।

  • Jython जावा वर्चुअल मशीन (JVM) के लिए पायथन कार्यान्वयन है।

  • IronPythonMicrosoft द्वारा डिज़ाइन किया गया है, जिसमें सामान्य भाषा रनटाइम (CLR) शामिल है। इसे सामान्यतः .NET के नाम से जाना जाता है

आरंभ करना

किसी भी ऑपरेटिंग सिस्टम में एक बुनियादी पायथन प्रोग्राम हेडर से शुरू होता है। कार्यक्रमों के साथ संग्रहीत हैं.py विस्तार और पायथन कमांड का उपयोग कार्यक्रमों को चलाने के लिए किया जाता है।

उदाहरण के लिए, python_rstprogram.pyआपको आवश्यक आउटपुट देगा। यदि मौजूद है तो यह त्रुटियां भी उत्पन्न करेगा।

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

# Basic program in Python
print "Welcome to Python!\n"

कार्यक्रम का आउटपुट होगा -

Welcome to Python!

खरोज

पायथन में कार्यक्रमों का संकेत काफी महत्वपूर्ण हैं। डेवलपर्स के लिए पायथन के इंडेंटेशन नियमों के बारे में कुछ पूर्वाग्रह और मिथक हैं जो पायथन के शुरुआती हैं।

सभी प्रोग्रामर के लिए अंगूठे का नियम है -

"व्हॉट्सएप पायथन सोर्स कोड में महत्वपूर्ण है।"

अग्रणी व्हाट्सएप, जिसमें पायथन की एक तार्किक रेखा की शुरुआत में रिक्त स्थान और टैब शामिल हैं, लाइन के इंडेंटेशन स्तर की गणना करता है।

ध्यान दें

  • इंडेंटेशन स्तर भी बयानों के समूहीकरण को निर्धारित करता है।

  • इंडेंटेशन के प्रत्येक स्तर के लिए चार स्थान यानी टैब का उपयोग करना आम है।

  • रिक्त स्थान के साथ टैब न मिलाना एक अच्छी नीति है, जिसके परिणामस्वरूप भ्रम हो सकता है, जो अदृश्य है।

पाइथन भी एक संकलित समय त्रुटि उत्पन्न करता है अगर इंडेंटेशन की कमी है।

IndentationError: expected an indented block

नियंत्रण प्रवाह विवरण

पायथन कार्यक्रम के नियंत्रण प्रवाह को सशर्त बयानों, लूप और फ़ंक्शन कॉल द्वारा नियंत्रित किया जाता है।

  • If कथन, निर्दिष्ट शर्त के तहत कोड के एक ब्लॉक को निष्पादित करता है, साथ में और एलिफ (अन्य-यदि का संयोजन)।

  • For कथन, एक ऑब्जेक्ट पर पुनरावृत्त होता है, प्रत्येक ब्लॉक को संलग्न ब्लॉक द्वारा उपयोग के लिए एक स्थानीय चर पर कब्जा करता है।

  • While बयान, शर्त के तहत कोड का एक ब्लॉक निष्पादित करता है, जो है True

  • Withबयान, संदर्भ प्रबंधक के भीतर एक कोड ब्लॉक संलग्न करता है। इसे एक अधिक पठनीय विकल्प के रूप में जोड़ा गया हैtry/finally बयान।

# If statement in Python
   x = int(raw_input("Please enter an integer: ")) #Taking input from the user
if x<0:
   print "1 - Got a negative expression value"
   print x
else:
   print "1 - Got a positive expression value"
   print x
print "Good bye!"

उत्पादन

sh-4.3$ python main.py
Please enter an integer: 4
1 - Got a positive expression value
4
Good bye!

कार्यों

एक विशिष्ट पायथन कार्यक्रम में बयानों को एक विशेष प्रारूप में व्यवस्थित और समूहीकृत किया जाता है, जिसे “Functions"। एक फ़ंक्शन बयानों का एक समूह है जो अनुरोध के आधार पर एक क्रिया करता है। पायथन कई अंतर्निहित कार्यों को प्रदान करता है और प्रोग्रामरों को अपने स्वयं के कार्यों को परिभाषित करने की अनुमति देता है।

पायथन में, फ़ंक्शन ऐसे मान हैं जो प्रोग्रामिंग भाषाओं में अन्य वस्तुओं की तरह संभाले जाते हैं।

def किसी फ़ंक्शन को परिभाषित करने के लिए कथन सबसे सामान्य तरीका है। def निम्नलिखित वाक्य रचना के साथ एक एकल-क्लॉज यौगिक कथन है -

def function-name (parameters):statement(s)

निम्न उदाहरण एक जनरेटर फ़ंक्शन को दर्शाता है। इसका उपयोग एक चलने योग्य वस्तु के रूप में किया जा सकता है, जो अपनी वस्तुओं को एक समान तरीके से बनाता है।

def demo ():
   for i in range(5):
      yield (i*i)
	
for j in demo():
   print j

उत्पादन

sh-4.3$ python main.py
0
1
4
9
16

विशेष गुण, विधियाँ, और संचालक

एक वर्ग के डबल अंडरस्कोर के साथ शुरू होने वाले गुण, तरीके और ऑपरेटर आमतौर पर व्यवहार में निजी होते हैं। उनमें से कुछ आरक्षित कीवर्ड हैं, जिनमें एक विशेष अर्थ शामिल है।

उनमें से तीन नीचे सूचीबद्ध हैं -

  • __len__

  • __getitem__

  • __setitem__

अन्य विशेष ऑपरेटरों में __getattr__ और __setattr__ शामिल हैं, जो इसे परिभाषित करता है get तथा set वर्ग के लिए विशेषताएँ।

फ़ाइल I / O फ़ंक्शंस

पायथन में विशेष फ़ाइलों को खोलने और बंद करने के लिए एक कार्यक्षमता शामिल है। की सहायता से इसे प्राप्त किया जा सकता हैopen(), write() तथा close() कार्य करता है।

फ़ाइल इनपुट और आउटपुट में मदद करने वाले कमांड निम्न हैं -

अनु क्रमांक कमान और कार्यशीलता
1

open()

यह एक फ़ाइल या दस्तावेज़ खोलने में मदद करता है

2

write()

यह फ़ाइल या दस्तावेज़ में एक स्ट्रिंग लिखने में मदद करता है

3

read()

यह मौजूदा फ़ाइल में सामग्री को पढ़ने में मदद करता है

4

close()

यह विधि फ़ाइल ऑब्जेक्ट को बंद कर देती है।

उदाहरण

नाम की एक फ़ाइल पर विचार करें “demo.txt”, जो पहले से ही एक पाठ "यह एक डेमो फ़ाइल है" के साथ मौजूद है।

#!/usr/bin/python
# Open a file
fo = open("demo.txt", "wb")
fo.write( "Insering new line \n");
# Close opend file
fo.close()

फ़ाइल खोलने के बाद उपलब्ध स्ट्रिंग होगी -

This is a demo file
Inserting a new line

web2py एक पूर्ण-स्टैक वेब फ्रेमवर्क है जिसका उपयोग डेवलपर द्वारा वेब एप्लिकेशन को पूरी तरह से विकसित करने के लिए किया जा सकता है। इसमें SQL डेटाबेस एकीकरण और एक कार्यक्रम को डिजाइन करने के लिए बहु-थ्रेडेड वेब सर्वर शामिल है।

उपयोगकर्ता के कार्यक्रम को डिजाइन करने के लिए वेब इंटरफ़ेस

एक बार जब कमांड ऑपरेटिंग सिस्टम के अनुसार निष्पादित हो जाता है, तो web2py एक स्टार्टअप विंडो प्रदर्शित करता है और फिर एक GUI विजेट प्रदर्शित करता है जो उपयोगकर्ता को चुनने के लिए कहता है -

  • एक बार का प्रशासक का पासवर्ड,
  • वेब सर्वर के लिए उपयोग किए जाने वाले नेटवर्क इंटरफ़ेस का आईपी पता,
  • और एक पोर्ट संख्या जिसमें से अनुरोधों को पूरा करना है।

व्यवस्थापक में किसी भी नए वेब एप्लिकेशन को जोड़ने और संपादित करने के लिए सभी प्राधिकरण शामिल हैं।

डिफ़ॉल्ट रूप से, web2py पर अपना वेब सर्वर चलाता है 127.0.0.1:8000 (पोर्ट 8000 लोकलहोस्ट पर) लेकिन एक उपयोगकर्ता इसे किसी भी उपलब्ध आईपी पते और आवश्यकता के अनुसार पोर्ट पर चला सकता है।

नीचे दिखाए गए अनुसार web2py GUI विजेट प्रदर्शित किया जाएगा।

पासवर्ड का उपयोग प्रशासनिक इंटरफ़ेस में नए मॉड्यूल में किसी भी परिवर्तन के लिए किया जाता है।

उपयोगकर्ता द्वारा प्रशासन पासवर्ड सेट करने के बाद, web2py वेब ब्राउज़र को निम्न URL के साथ पृष्ठ पर शुरू करता है - http://127.0.0.1:8000/

रूपरेखा का स्वागत पृष्ठ नीचे दिखाया गया है।

बेसिक प्रोग्राम को वेब 2 पी में डिजाइन करना

Web2py एप्लिकेशन को शुरू करने के बाद, उपर्युक्त URL के साथ, हम एक नया मॉड्यूल बनाने के लिए प्रशासनिक इंटरफ़ेस का उपयोग कर सकते हैं, उदाहरण के लिए, “helloWorld”

प्रशासनिक इंटरफ़ेस प्रमाणीकरण उद्देश्य के लिए पासवर्ड मांगेगा क्योंकि व्यवस्थापक किसी भी नए वेब एप्लिकेशन को जोड़ने और संपादित करने के लिए सभी प्राधिकरण रखता है।

ऊपर दिए गए स्नैपशॉट में पृष्ठ विवरण शामिल है, जो सभी स्थापित web2py अनुप्रयोगों को सूचीबद्ध करता है और व्यवस्थापक को उन्हें प्रबंधित करने की अनुमति देता है। डिफ़ॉल्ट रूप से, web2py फ्रेमवर्क तीन अनुप्रयोगों के साथ आता है। वे हैं -

  • एक admin अनुप्रयोग, जिसे उपयोगकर्ता वर्तमान में लागू कर रहा है।

  • एक examples ऑनलाइन इंटरएक्टिव प्रलेखन और web2py आधिकारिक वेबसाइट का एक उदाहरण के साथ आवेदन।

  • welcomeआवेदन। इसमें किसी अन्य web2py एप्लिकेशन के लिए मूल टेम्पलेट शामिल है। इसे के रूप में भी जाना जाता हैscaffolding application। एप्लिकेशन स्टार्टअप पर एक उपयोगकर्ता का भी स्वागत करता है।

नए एप्लिकेशन का नाम बताएं “helloWorld”

एक बार, एक नया एप्लिकेशन बनाया जाता है, उपयोगकर्ता को संबंधित एप्लिकेशन के दृश्य, मॉडल और नियंत्रकों वाले पृष्ठ पर पुनर्निर्देशित किया जाता है।

उपयोगकर्ता निम्नलिखित URL का उल्लेख करके नए बनाए गए एप्लिकेशन को देख सकता है - http://127.0.0.1:8000/helloWorld

डिफ़ॉल्ट रूप से, उपर्युक्त URL को हिट करने पर एक उपयोगकर्ता निम्न स्क्रीन देख सकता है।

दिए गए वेब एप्लिकेशन के संदेश को प्रिंट करने के लिए “helloWorld”में परिवर्तन किया जाता है default.py नियंत्रक।

समारोह का नाम “index”मूल्य वापस करने और आवश्यक आउटपुट प्रदर्शित करने के लिए डिफ़ॉल्ट फ़ंक्शन है। जैसा कि ऊपर उल्लेख किया गया है, स्ट्रिंग“Hello World- Welcome to my first web application” का उपयोग रिटर्न मान के रूप में किया जाता है, जो स्क्रीन में आउटपुट प्रदर्शित करता है।

आउटपुट निम्नानुसार प्रदर्शित होता है -

postbacks

प्रपत्र के इनपुट को मान्य करने का तंत्र बहुत आम है और इसे इस तरह के एक अच्छे प्रोग्रामिंग अभ्यास के रूप में नहीं माना जाता है। इनपुट को हर बार मान्य किया जाता है, जो सत्यापन के लिए एक बोझ है।

Web2py में एक बेहतर पैटर्न उसी कार्रवाई के लिए फॉर्म जमा करना है, जो उन्हें उत्पन्न करता है। इस तंत्र को कहा जाता है“postback”जो web2py की मुख्य विशेषता है। संक्षेप में, आत्म-प्रस्तुत में प्राप्त किया जाता हैpostback

def first():
   if request.vars.visitor_name: #if visitor name exists
      session.visitor_name = request.vars.visitor_name
      redirect(URL('second'))#postback is implemented
   return dict()

CRUD आवेदन

web2py में एप्लिकेशन शामिल हैं, जो क्रिएट, पुनर्प्राप्त, अपडेट और डिलीट करने के कार्य करते हैं। CRUD चक्र एक डेटाबेस के मौलिक कार्यों का वर्णन करता है, जो लगातार है।

सभी एप्लिकेशन तर्क मॉडल में लिखे गए हैं, जिन्हें नियंत्रकों द्वारा पुनर्प्राप्त किया जाता है और उपयोगकर्ताओं को दृश्य की मदद से प्रदर्शित किया जाता है।

appadmin

PHP के लिए, एप्लिकेशन सर्वर में सभी डेटाबेसों की सूची शामिल है phpmyadmin। इसी तरह से web2py टेबल्स या डेटाबेस को प्रबंधित करने, बनाने और हटाने के लिए एक इंटरफ़ेस प्रदान करता है, जिसे कहा जाता है“appadmin.”

तालिकाओं के पीछे तर्क को लागू करने से पहले, डेटाबेस और उससे संबंधित तालिकाओं को बनाना आवश्यक है।

उपयोग करने के लिए URL appadmin -

http://127.0.0.1:8000/applicationname/appadmin

URL मारने पर, उपयोगकर्ता को दिए गए एप्लिकेशन के लिए संबंधित तालिकाओं की सूची मिल जाएगी।

यह इंटरफ़ेस सार्वजनिक नहीं है। यह डेटाबेस के लिए एक आसान पहुँच प्राप्त करने के लिए डिज़ाइन किया गया है। यह दो फ़ाइलों के होते हैं अर्थात् - एक नियंत्रक“appadmin.py” और एक दृश्य “appadmin.html”

यह एक बार में 100 रिकॉर्ड तक पगति कर सकता है। का उपयोग“appadmin” इसके बाद के अध्यायों में चर्चा की गई है।

कमांड लाइन विकल्प

हमने सीखा है कि पिछले अध्याय में GUI विजेट का उपयोग करके web2py सर्वर कैसे शुरू किया जाए।

सर्वर शुरू करने से इस विजेट को छोड़ दिया जा सकता है command line प्रेरित करना।

python web2py.py -a 'password' -i 127.0.0.1 -p 8000

जब भी web2py सर्वर शुरू होता है, यह एक फाइल बनाता है "parameters_8000.py"जहां सभी पासवर्ड हैशेड रूप में संग्रहीत किए जाते हैं।

अतिरिक्त सुरक्षा उद्देश्य के लिए, निम्न कमांड लाइन का उपयोग किया जा सकता है -

python web2py.py -a '<recycle>' -i 127.0.0.1 -p 8000

उपरोक्त परिदृश्य के लिए, web2py "में संग्रहीत हैशेड पासवर्ड का पुनः उपयोग करता हैparameters_8000.py"।

मामले में, अगर फ़ाइल "parameters_8000.py"आकस्मिक रूप से या कुछ अन्य कारणों से हटा दिया गया है, वेब-आधारित प्रशासनिक इंटरफ़ेस web2py में अक्षम है।

URL मैपिंग / डिस्पैचिंग

Web2py का कामकाज मॉडल-व्यू-कंट्रोलर पर आधारित है, जो URL को एक विशिष्ट रूप में मैप करता है - http://127.0.0.1:8000/a/d/f.html

यह फंक्शन तक रूट करता है “f()” नियंत्रक में उल्लेख किया है d.py“a” नाम के एप्लिकेशन के तहत है। यदि नियंत्रक अनुप्रयोग में मौजूद नहीं है, तो web2py नामक एक डिफ़ॉल्ट नियंत्रक का उपयोग करता है“default.py”

यदि फ़ंक्शन, जैसा कि URL में दिया गया है, मौजूद नहीं है, तो डिफ़ॉल्ट फ़ंक्शन कहा जाता है init()प्रयोग किया जाता है। URL का कार्य नीचे की छवि में योजनाबद्ध रूप से दिखाया गया है।

विस्तार .htmlURL के लिए वैकल्पिक है। एक्सटेंशन का विस्तार निर्धारित करता हैViewनियंत्रक में परिभाषित फ़ंक्शन के आउटपुट को प्रस्तुत करता है। एक ही सामग्री को कई प्रारूपों जैसे html, xml, json, rss आदि में परोसा जाता है।

फ़ंक्शन के आधार पर अनुरोध पारित किया जाता है, जो तर्कों को स्वीकार करता है और उपयोगकर्ता को उचित आउटपुट देता है। यह नियंत्रक है, जो उपयोगकर्ता की आवश्यकता के अनुसार आउटपुट देने के लिए आवेदन के मॉडल और दृश्य के साथ बातचीत करता है।

web2py - वर्कफ़्लो

Web2py के वर्कफ़्लो पर नीचे चर्चा की गई है -

  • वेब सर्वर प्रत्येक और हर HTTP अनुरोधों को अपने स्वयं के धागे में एक साथ प्रबंधित करता है।

  • HTTP अनुरोध शीर्ष लेख को पार्स किया जाता है और डिस्पैचर में भेज दिया जाता है।

  • डिस्पैचर एप्लिकेशन के अनुरोधों को प्रबंधित करता है और मैप करता है PATH_INFOफ़ंक्शन कॉल के URL में। प्रत्येक फ़ंक्शन कॉल को URL में दर्शाया गया है।

  • स्थिर फ़ोल्डर में शामिल फ़ाइलों के सभी अनुरोधों को सीधे प्रबंधित किया जाता है, और बड़ी फ़ाइल क्लाइंट को स्ट्रीम की जाती है।

  • किसी भी चीज़ के लिए अनुरोध लेकिन एक स्थिर फ़ाइल को एक कार्रवाई में मैप किया जाता है।

  • यदि अनुरोध हेडर में ऐप के लिए एक सत्र कुकी होती है, तो सत्र ऑब्जेक्ट पुनर्प्राप्त होता है; या फिर, एक सत्र आईडी बनाई जाती है।

  • यदि क्रिया स्ट्रिंग के रूप में मान लौटाती है, तो यह क्लाइंट को वापस कर दिया जाता है।

  • यदि क्रिया पुन: चलने योग्य है, तो इसका उपयोग क्लाइंट को डेटा को लूप और स्ट्रीम करने के लिए किया जाता है।

सशर्त मॉडल

पिछले अध्याय में, हमने इसकी कार्यक्षमता देखी Controllers। web2py अपने प्रत्येक एप्लिकेशन में मॉडल, दृश्य और नियंत्रक का उपयोग करता है। इसलिए, की कार्यक्षमता को समझना भी आवश्यक हैModel

किसी भी अन्य एमवीसी एप्लिकेशन के विपरीत, web2py में मॉडल को सशर्त माना जाता है। उप नियंत्रक में मॉडल को निष्पादित किया जाता है, इसके नियंत्रक के उपयोग के आधार पर। यह निम्नलिखित उदाहरण के साथ प्रदर्शित किया जा सकता है -

URL पर विचार करें - http://127.0.0.1:8000/a/d/f.html

इस मामले में, ‘a’ आवेदन का नाम है, ‘d’ नियंत्रक का नाम है और f()नियंत्रक से जुड़ा कार्य है। मॉडल की सूची, जिसे निष्पादित किया जाएगा, इस प्रकार हैं -

applications/a/models/*.py
applications/a/models/d/*.py
applications/a/models/d/f/*.py

पुस्तकालयों

web2py में लाइब्रेरी शामिल हैं, जो ऑब्जेक्ट के रूप में सभी एप्लिकेशन के संपर्क में हैं। इन वस्तुओं को "ग्लूऑन" नाम की निर्देशिका के तहत मुख्य फाइलों के अंदर परिभाषित किया गया है।

डीएएल टेम्पलेट जैसे कई मॉड्यूलों पर कोई निर्भरता नहीं है और इसे वेब 2 पी के ढांचे के बाहर लागू किया जा सकता है। यह इकाई परीक्षणों को भी बनाए रखता है जिसे अच्छा अभ्यास माना जाता है।

अनुप्रयोग

web2py अनुप्रयोगों को एक आरेखीय रूप में नीचे दिखाया गया है।

Applications web2py में विकसित निम्नलिखित भागों से बना है -

  • Models - डेटा और डेटाबेस तालिकाओं का प्रतिनिधित्व करता है।

  • Controllers - एप्लिकेशन लॉजिक और वर्कफ़्लो का वर्णन करता है।

  • Views - डेटा के प्रदर्शन को प्रस्तुत करने में मदद करता है।

  • Languages - विभिन्न समर्थित भाषाओं में आवेदन में तार का अनुवाद करने का वर्णन करें।

  • Static files - प्रसंस्करण की आवश्यकता नहीं है (जैसे चित्र, सीएसएस शैली पत्रक आदि)।

  • ABOUT तथा README - परियोजना का विवरण।

  • Errors - स्टोर त्रुटि रिपोर्ट आवेदन द्वारा उत्पन्न।

  • Sessions - प्रत्येक विशेष उपयोगकर्ता से संबंधित जानकारी संग्रहीत करता है।

  • Databases - SQLite डेटाबेस और अतिरिक्त तालिका जानकारी संग्रहीत करें।

  • Cache - कैश्ड एप्लिकेशन आइटम स्टोर करें।

  • Modules - मॉड्यूल अन्य वैकल्पिक पायथन मॉड्यूल हैं।

  • Private - शामिल फ़ाइलों को नियंत्रकों द्वारा एक्सेस किया जाता है लेकिन सीधे डेवलपर द्वारा नहीं।

  • Uploads - फाइलों को मॉडल द्वारा एक्सेस किया जाता है लेकिन सीधे डेवलपर द्वारा नहीं।

एपीआई

Web2py में, models, controllers तथा views एक ऐसे वातावरण में निष्पादित किया जाता है जहां कुछ वस्तुओं को डेवलपर्स के लिए आयात किया जाता है।

Global Objects - अनुरोध, प्रतिक्रिया, सत्र, कैश।

Helpers- web2py में हेल्पर क्लास शामिल है, जिसका उपयोग HTML प्रोग्रामेटिक रूप से करने के लिए किया जा सकता है। यह HTML टैग्स से मेल खाता है, जिसे टर्मिनेट किया जाता है“HTML helpers”

उदाहरण के लिए, A, B, FIELDSET, FORM, आदि।

अधिवेशन

एक सत्र को सूचना के सर्वर-साइड स्टोरेज के रूप में परिभाषित किया जा सकता है, जो पूरे वेब एप्लिकेशन में उपयोगकर्ता के इंटरैक्शन में बना रहता है।

Web2py में सत्र भंडारण वर्ग का उदाहरण है।

उदाहरण के लिए, एक चर को सत्र के रूप में संग्रहीत किया जा सकता है

session.myvariable = "hello"

इस मान को पुनः प्राप्त किया जा सकता है

a = session.myvariable

चर के मूल्य को तब तक पुनर्प्राप्त किया जा सकता है जब तक कि एक ही उपयोगकर्ता द्वारा एक ही सत्र में कोड निष्पादित किया जाता है।

सत्र के लिए web2py में महत्वपूर्ण विधियों में से एक है “forget” -

session.forget(response);

यह web2py सत्र को बचाने के लिए नहीं निर्देश देता है।

बैकग्राउंड में रनिंग टास्क

एक HTTP अनुरोध वेब सर्वर पर आता है, जो समानांतर में प्रत्येक अनुरोध को अपने स्वयं के थ्रेड में संभालता है। कार्य, जो सक्रिय है, अग्रभूमि में होता है जबकि अन्य पृष्ठभूमि में रखा जाता है। पृष्ठभूमि कार्यों का प्रबंधन भी web2py की मुख्य विशेषताओं में से एक है।

समय लेने वाले कार्यों को अधिमानतः पृष्ठभूमि में रखा गया है। कुछ तंत्र निम्नानुसार सूचीबद्ध हैं, जो पृष्ठभूमि कार्यों का प्रबंधन करते हैं -

  • CRON

  • Queues

  • Scheduler

क्रॉन

Web2py में, CRONसमय के निर्दिष्ट अंतराल के भीतर कार्य को चलाने की क्षमता देता है। प्रत्येक एप्लिकेशन में एक CRON फ़ाइल शामिल है, जो इसकी कार्यक्षमता को परिभाषित करती है।

समयबद्धक

अंतर्निहित अनुसूचक प्राथमिकता को निर्धारित करके पृष्ठभूमि में कार्यों को चलाने में मदद करता है। यह कार्यों को बनाने, शेड्यूल करने और संशोधित करने के लिए एक तंत्र प्रदान करता है।

शेड्यूल किए गए ईवेंट फ़ाइल नाम के साथ मॉडल में सूचीबद्ध हैं “scheduler.py”

एक अनुप्रयोग का निर्माण

हमारे पास web2py में मॉडल और नियंत्रक बनाने का अवलोकन था। यहां, हम नामित एप्लिकेशन के निर्माण पर ध्यान केंद्रित करेंगे“Contacts”। एप्लिकेशन को कंपनियों की सूची, और उन कंपनियों में काम करने वाले लोगों की सूची बनाए रखने की आवश्यकता होती है।

मॉडल का निर्माण

यहां, डेटा शब्दकोश के लिए तालिकाओं की पहचान मॉडल है। संपर्क एप्लिकेशन के लिए मॉडल "के तहत बनाया जाएगाmodels”फोल्डर। फ़ाइल में संग्रहीत हैmodels/db_contacts.py

# in file: models/db_custom.py
db.define_table('company', Field('name', notnull = True, unique = True), format = '%(name)s')
db.define_table(
   'contact',
   Field('name', notnull = True),
   Field('company', 'reference company'),
   Field('picture', 'upload'),
   Field('email', requires = IS_EMAIL()),
   Field('phone_number', requires = IS_MATCH('[\d\-\(\) ]+')),
   Field('address'),
   format = '%(name)s'
)

db.define_table(
   'log',
   Field('body', 'text', notnull = True),
   Field('posted_on', 'datetime'),
   Field('contact', 'reference contact')
)

एक बार उपरोक्त फ़ाइल बन जाने के बाद, URL की मदद से तालिकाओं तक पहुँचा जा सकता है http://127.0.0.1:8000/contacts/appadmin

नियंत्रक का निर्माण

Controller संपर्कों को सूचीबद्ध करने, संपादित करने और हटाने के लिए कुछ कार्य शामिल होंगे।

# in file: controllers/default.py
def index():return locals()
def companies():companies = db(db.company).select(orderby = db.company.name)
return locals()

def contacts():company = db.company(request.args(0)) or redirect(URL('companies'))
contacts = db(db.contact.company == company.id).select(orderby = db.contact.name)
return locals()

@auth.requires_login()
def company_create():form = crud.create(db.company, next = 'companies')
return locals()

@auth.requires_login()
def company_edit():company = db.company(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.company, company, next='companies')
return locals()

@auth.requires_login()
def contact_create():db.contact.company.default = request.args(0)
form = crud.create(db.contact, next = 'companies')
return locals()

@auth.requires_login()
def contact_edit():contact = db.contact(request.args(0)) or redirect(URL('companies'))
form = crud.update(db.contact, contact, next = 'companies')
return locals()

def user():return dict(form = auth())

की रचना view इसके आउटपुट के साथ अगले अध्याय में चर्चा की जाएगी।

web2py फ्रेमवर्क का उपयोग करता है Models, Controllers तथा Viewsइसके अनुप्रयोगों में। इसमें थोड़ा संशोधित पायथन सिंटैक्स शामिल हैViews उचित पायथन उपयोग पर लगाए गए प्रतिबंध के बिना अधिक पठनीय कोड के लिए।

एक web2py का मुख्य उद्देश्य Viewएक HTML दस्तावेज़ में अजगर कोड एम्बेड करने के लिए है। हालाँकि, यह कुछ मुद्दों का सामना करता है, जो इस प्रकार हैं -

  • HTML दस्तावेज़ में एम्बेडेड अजगर कोड से बचना।
  • पायथन पर आधारित इंडेंटेशन के बाद, जो HTML नियमों को प्रभावित कर सकता है।

समस्याओं से बचने के लिए, web2py दृश्य अनुभाग में {{..}} का उपयोग करता है। सीमांकित अजगर कोड से बचने में मदद करता है। यह इंडेंटेशन के HTML नियमों का पालन करने में भी मदद करता है।

कोड के भीतर शामिल है {{..}}delimiters में अनपेक्षित पायथन कोड शामिल हैं। चूंकि पायथन आम तौर पर कोड के परिसीमन ब्लॉक के लिए इंडेंटेशन का उपयोग करता है, इसलिए सीमांकक के भीतर अनपेक्षित कोड को उचित तरीके से बनाए रखा जाना चाहिए। इस समस्या को दूर करने के लिए, web2py का उपयोग करता है“pass” कीवर्ड।

एक लाइन से शुरू होने वाला कोड ब्लॉक एक कोलोन के साथ समाप्त होता है और एक लाइन से शुरू होता है जो पास से शुरू होता है।

Note - पास एक पायथन कीवर्ड है, यह एक वेब 2 एस कीवर्ड नहीं है।

निम्नलिखित कोड पास कीवर्ड के कार्यान्वयन को दर्शाता है -

{{
   if num > 0:
      response.write('positive number')
   else:
      response.write('negative number')
      pass
}}

HTML सहायक

web2py में हेल्पर क्लास शामिल है, जिसका उपयोग HTML प्रोग्रामेटिक रूप से करने के लिए किया जा सकता है। यह HTML टैग्स से मेल खाता है, जिसे "HTML हेल्पर्स" कहा जाता है।

उदाहरण के लिए -

[(A('Home', _href = URL('default', 'home')), False, None, []), ...]

यहाँ, A लंगर के लिए सहायक है <a>HTML का टैग। यह HTML एंकर बनाता है<a> टैग प्रोग्राम।

HTML सहायकों में दो प्रकार होते हैं, अर्थात् positional तथा named तर्क।

  • Positional तर्कों की व्याख्या HTML ओपन और क्लोज टैग के बीच की वस्तुओं के रूप में की जाती है।

  • Named तर्क अंडरस्कोर से शुरू होते हैं जिन्हें HTML टैग के रूप में समझा जाता है।

सहायक तार के क्रमांकन में भी उपयोगी होते हैं, के साथ _str_और xml विधियाँ। उदाहरण के लिए -

>>> print str(DIV(“hello world”))

उत्पादन

<div> hello world </div>

Note - HTML हेल्पर्स डॉक्यूमेंट ऑब्जेक्ट मॉडल (DOM) का सर्वर-साइड प्रतिनिधित्व प्रदान करते हैं।

XML सहायक

एक्सएमएल को एक ऑब्जेक्ट के रूप में कहा जाता है, जो उस पाठ को एन्क्रिप्ट करता है जिसे बचना नहीं चाहिए। पाठ में वैध XML हो भी सकता है और नहीं भी।

उदाहरण के लिए, नीचे उल्लिखित कोड के लिए, इसमें जावास्क्रिप्ट शामिल हो सकता है।

>>> print XML('<script>alert("unsafe!")</script>')

उत्पादन

<script> alert(“unsafe!”)</script>

निर्मित हेल्पर्स

Web2py में उपयोग किए गए कई अंतर्निहित हेल्पर्स हैं। HTML बिल्ट-इन हेल्पर्स में से कुछ नीचे सूचीबद्ध हैं।

नाम प्रयोग उदाहरण
इस हेल्पर का उपयोग लिंक बनाने के लिए किया जाता है। यह एंकर टैग से मेल खाती है
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
यह सहायक पाठ की सामग्री को बोल्ड बनाने में मदद करता है।
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
तन यह सहायक पृष्ठ का निकाय बनाता है। इसमें ब्रेक की संख्या बढ़ाने के लिए एक गुणन ऑपरेटर भी शामिल है।
BR()
कोड यह पायथन, C, C ++ और web2py कोड के लिए सिंटैक्स हाइलाइटिंग करता है। यह सहायक भी एपीआई प्रलेखन लिंक करने की क्षमता है।
CODE('print "hello"', language = 'python').xml()
fieldset यह अपने लेबल के साथ मिलकर एक इनपुट फील्ड बनाता है।
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
सिर यह HTML पेज के <head> टैग को टैग करने में मदद करता है।
HEAD(TITLE('<hello>'))
आईएमजी यह दिए गए HTML पेज के लिए छवियों को एम्बेड करने में मदद करता है।
IMG(_src = 'http://example.com/image.png',_alt = 'test')

कस्टम सहायक

इन सहायकों का उपयोग आवश्यकताओं के अनुसार टैग को अनुकूलित करने के लिए किया जाता है। web2py कस्टम हेल्पर्स का उपयोग करता है -

टैग

web2py TAG को सार्वभौमिक टैग जनरेटर के रूप में उपयोग करता है। यह अनुकूलित XML टैग बनाने में मदद करता है। सामान्य सिंटैक्स इस प्रकार है -

{{ = TAG.name('a', 'b', _c = 'd')}}

यह XML कोड को इस प्रकार बनाता है: <name c = "d"> ab </ name>

टैग एक वस्तु है और TAG.nameया TAG['name']एक समारोह है कि एक अस्थायी सहायक वर्ग रिटर्न है।

मेन्यू

यह सहायक सूची आइटम या मेनू आइटम के मूल्यों की एक सूची बनाता है, जो मेनू का प्रतिनिधित्व करते हुए एक पेड़ जैसी संरचना का निर्माण करता है। मेनू आइटम की सूची के रूप में हैresponse.menu। उदाहरण के लिए -

print MENU([['One', False, 'link1'], ['Two', False, 'link2']])

आउटपुट निम्नानुसार प्रदर्शित किया जाएगा -

<ul class = "web2py-menu web2py-menu-vertical">
   <li><a href = "link1">One</a></li>
   <li><a href = "link2">Two</a></li>
</ul>

सुंदर बनाएं

यह सूची और शब्दकोशों सहित मिश्रित वस्तुओं के अभ्यावेदन के निर्माण में मदद करता है। उदाहरण के लिए,

{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}

यह एक्सएमएल के लिए एक्सक्लूसिव वियरेबल को एक्सक्लूसिव देता है, इसके कंस्ट्रक्टर तर्क का प्रतिनिधित्व करता है। इस मामले में, प्रतिनिधित्व होगा -

{"a": ["hello", XML("world")], "b": (1, 2)}

आउटपुट के रूप में प्रस्तुत किया जाएगा -

<table>
   <tr>
      <td>a</td>
      <td>:</td>
      <td>hello<br />world</td>
   </tr>
   
   <tr>
      <td>b</td>
      <td>:</td>
      <td>1<br />2</td>
   </tr>
</table>

सर्वर-साइड डोम रेंडरिंग

सर्वर-साइड रेंडरिंग उपयोगकर्ता को web2py घटकों की प्रारंभिक स्थिति को पूर्व-रेंडर करने की अनुमति देता है। सभी व्युत्पन्न सहायक सर्वर पर DOM को रेंडर करने के लिए खोज तत्व और तत्व प्रदान करते हैं।

elementएक निर्दिष्ट स्थिति से मेल खाता पहला बाल तत्व देता है। दूसरी ओर,elementsसभी मिलान करने वाले बच्चों की सूची लौटाएं। दोनों एक ही वाक्यविन्यास का उपयोग करते हैं।

इसे निम्न उदाहरण के साथ प्रदर्शित किया जा सकता है -

a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))
d = a.elements('div#target')
d[0][0] = 'changed'
print a

आउटपुट इस प्रकार दिया गया है -

<div><div><div id = "target" class = "abc">changed</div></div></div>

पेज लेआउट

अंतिम उपयोगकर्ताओं को आउटपुट प्रदर्शित करने के लिए दृश्यों का उपयोग किया जाता है। यह विस्तार के साथ-साथ अन्य विचारों को भी शामिल कर सकता है। यह एक पेड़ जैसी संरचना को लागू करेगा।

उदाहरण - “index.html” बढ़ा के “layout.html” जिसमें शामिल हो सकते हैं “menu.html” जो बदले में शामिल हैं “header.html”

{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}

उदाहरण

पिछले अध्यायों में, हमने कंपनी मॉड्यूल के लिए मॉडल और नियंत्रक बनाए। अब, हम दृश्य निर्माण पर ध्यान केंद्रित करेंगे, जो डेटा के प्रदर्शन को प्रस्तुत करने में मदद करता है।

डिफ़ॉल्ट रूप से, web2py में विचार शामिल हैं layout.html तथा index.html, जो डेटा प्रदर्शित करने के समग्र खंड को परिभाषित करता है।

{{extend 'layout.html'}}
<h2>Companies</h2>

<table>
   {{for company in companies:}}
   <tr>
      <td>{{ = A(company.name, _href = URL('contacts', args = company.id))}}</td>
      <td>{{ = A('edit', _href = URL('company_edit', args = company.id))}}</td>
   </tr>
   
   {{pass}}
   <tr>
      <td>{{ = A('add company', _href = URL('company_create'))}}</td>
   </tr>
	
</table>

आउटपुट निम्नानुसार होगा -

Database Abstraction Layer (DAL)web2py की प्रमुख ताकत के रूप में माना जाता है। DAL अंतर्निहित SQL सिंटैक्स में एक साधारण अनुप्रयोग प्रोग्रामिंग इंटरफ़ेस (API) उजागर करता है।

इस अध्याय में, हमें DAL के गैर-तुच्छ अनुप्रयोगों को जानना होगा, जैसे कि टैग द्वारा कुशलतापूर्वक खोज करने के लिए प्रश्नों का निर्माण करना और एक श्रेणीबद्ध श्रेणी का पेड़ बनाना।

DAL की कुछ महत्वपूर्ण विशेषताएं हैं -

  • web2py में एक डेटाबेस एब्स्ट्रक्शन लेयर (DAL), एक एपीआई शामिल है जो डेटाबेस ऑब्जेक्ट्स में पायथन ऑब्जेक्ट्स को मैप करता है। डेटाबेस ऑब्जेक्ट क्वेरी, टेबल और रिकॉर्ड हो सकते हैं।

  • DAL गतिशील रूप से डेटाबेस बैक एंड के लिए निर्दिष्ट बोली का उपयोग करके वास्तविक समय में SQL उत्पन्न करता है, ताकि किसी डेवलपर के लिए पूर्ण SQL क्वेरी लिखना अनिवार्य न हो।

  • डीएएल का उपयोग करने का मुख्य लाभ यह है कि आवेदन विभिन्न प्रकार के डेटाबेस के साथ पोर्टेबल होंगे।

डीएएल से शुरुआत करना

Web2py में अधिकांश अनुप्रयोगों के लिए डेटाबेस कनेक्शन की आवश्यकता होती है। इसलिए, डेटाबेस मॉडल का निर्माण एक एप्लिकेशन के डिजाइन में पहला कदम है।

नामित नए बनाए गए एप्लिकेशन पर विचार करें “helloWorld”। डेटाबेस अनुप्रयोग के मॉडल के तहत कार्यान्वित किया जाता है। संबंधित एप्लिकेशन के सभी मॉडल फ़ाइल नाम के तहत शामिल हैं -models/db_custom.py.

निम्नलिखित चरणों का उपयोग DAL को लागू करने के लिए किया जाता है -

चरण 1 - दाल निर्माता

डेटाबेस कनेक्शन स्थापित करें। यह DAL ऑब्जेक्ट का उपयोग करके बनाया गया है जिसे DAL कंस्ट्रक्टर भी कहा जाता है।

db = DAL ('sqlite://storage.sqlite')

डीएएल की उल्लेखनीय विशेषता यह है कि यह एक ही डेटाबेस या अलग-अलग डेटाबेस के साथ, यहां तक ​​कि विभिन्न प्रकार के डेटाबेस के साथ कई कनेक्शन की अनुमति देता है। यह देखा गया है कि यह लाइन पहले से ही फाइल में हैmodels/db.py। इसलिए, आपको इसकी आवश्यकता नहीं हो सकती है, जब तक कि आपने इसे हटा नहीं दिया है या किसी अलग डेटाबेस से कनेक्ट करने की आवश्यकता नहीं है। डिफ़ॉल्ट रूप से, web2py फ़ाइल में संग्रहीत SQLite डेटाबेस से जुड़ता हैstorage.sqlite

यह फ़ाइल एप्लिकेशन के डेटाबेस फ़ोल्डर में स्थित है। यदि फ़ाइल अनुपस्थित है, तो अनुप्रयोग द्वारा पहली बार निष्पादित किए जाने पर इसे web2py द्वारा बनाया जाता है।

SQLite तेज है, और एक फ़ाइल में सभी डेटा संग्रहीत करता है। इसका मतलब है कि आपके डेटा को आसानी से एक एप्लिकेशन से दूसरे में स्थानांतरित किया जा सकता है। वास्तव में, SQLite डेटाबेस (ओं) को web2py द्वारा एक साथ अनुप्रयोगों के साथ पैक किया जाता है। यह अनुवाद, जोड़ और समुच्चय सहित पूर्ण SQL समर्थन प्रदान करता है।

SQLite के दो नुकसान हैं।

  • एक यह है कि यह कॉलम प्रकारों को लागू नहीं करता है, और कॉलम जोड़ने और छोड़ने के अलावा कोई अन्य तालिका नहीं है।

  • दूसरा नुकसान यह है कि पूरे डेटाबेस को किसी भी लेनदेन से बंद कर दिया जाता है जिसके लिए लिखने की आवश्यकता होती है।

चरण 2 - टेबल कंस्ट्रक्टर

एक बार डेटाबेस के साथ संबंध स्थापित हो जाने के बाद, हम इसका उपयोग कर सकते हैं define_table नई तालिकाओं को परिभाषित करने की विधि।

उदाहरण के लिए -

db.define_table('invoice',Field('name'))

उपरोक्त विधि का उपयोग तालिका निर्माता के बीच भी किया जाता है। टेबल कंस्ट्रक्टर के लिए सिंटैक्स समान है। पहला तर्क तालिका का नाम है, और इसके बाद की सूची हैField(s)। क्षेत्र निर्माता निम्नलिखित तर्क देता है -

अनु क्रमांक तर्क और उपयोग
1

The field name

तालिका में फ़ील्ड का नाम।

2

The field type

किसी भी डेटाटाइप जैसे स्ट्रिंग (डिफ़ॉल्ट), टेक्स्ट, बूलियन, पूर्णांक और इसी तरह के मान लेते हैं।

3

Length

अधिकतम लंबाई को परिभाषित करता है।

4

default = None

नया रिकॉर्ड सम्मिलित करने पर यह डिफ़ॉल्ट मान होता है।

5

update = None

यह डिफ़ॉल्ट के रूप में ही काम करता है, लेकिन मूल्य केवल अद्यतन पर उपयोग किया जाता है, सम्मिलित करने पर नहीं।

6

Notnull

यह निर्दिष्ट करता है कि फ़ील्ड मान NULL हो सकता है या नहीं।

7

readable = True

यह निर्दिष्ट करता है कि फ़ील्ड प्रपत्रों में पढ़ने योग्य है या नहीं।

8

writable = True

यह निर्दिष्ट करता है कि फ़ील्ड रूपों में उपयुक्त है या नहीं।

9

label = "Field Name"

यह प्रपत्रों में इस फ़ील्ड के लिए उपयोग किया जाने वाला लेबल है।

define_table विधि भी तीन नामित तर्क लेता है -

वाक्य - विन्यास

db.define_table('....',migrate=True, fake_migrate=False, format = '%(id)s')
  • migrate = True - यह web2py को निर्देश देता है कि यदि यह मौजूद नहीं है, या यह मॉडल की परिभाषा से मेल नहीं खाता है, तो तालिका बनाएं।

  • fake_migrate = False - यदि मॉडल डेटाबेस तालिका की सामग्री से मेल खाता है, तो नकली_मिगेट सेट करें = यह सच है जो web2py को डेटा के पुनर्निर्माण में मदद करता है।

  • format = '%(id)s' - यह एक प्रारूप स्ट्रिंग है जो यह निर्धारित करती है कि दिए गए टेबल पर रिकॉर्ड कैसे दर्शाए जाने चाहिए।

कच्चे एसक्यूएल का निर्माण

डीएएल का उपयोग करके, हम डेटाबेस के लिए एक कनेक्शन स्थापित कर सकते हैं और टेबल कंस्ट्रक्टर और फील्ड कंस्ट्रक्टर का उपयोग करके नए टेबल और उनके क्षेत्र बना सकते हैं।

कभी-कभी, आवश्यक आउटपुट के अनुरूप SQL स्टेटमेंट जेनरेट करना आवश्यक होता है। web2py में विभिन्न कार्य शामिल हैं, जो कच्ची SQL बनाने में मदद करते हैं, जो निम्नानुसार हैं -

_insert

यह दी गई तालिका के लिए स्टेटमेंट डालने में मदद करता है। उदाहरण के लिए,

print db.person._insert(name ='ABC')

यह "व्यक्ति" नाम की तालिका के लिए सम्मिलित विवरण प्राप्त करेगा।

एसक्यूएल स्टेटमेंट आउटपुट -

INSERT INTO person(name) VALUES ('ABC');

_count

यह एसक्यूएल स्टेटमेंट प्राप्त करने में मदद करता है, जो रिकॉर्ड की गिनती देता है। उदाहरण के लिए, 'व्यक्ति' नाम की एक तालिका पर विचार करें और हमें 'एबीसी' नाम वाले व्यक्तियों की गिनती खोजने की आवश्यकता है।

print db(db.person.name ==' ABC ')._count()

एसक्यूएल स्टेटमेंट आउटपुट -

SELECT count(*) FROM person WHERE person.name = ' ABC ';

_चुनते हैं

यह एसक्यूएल स्टेटमेंट चुनने में मदद करता है। उदाहरण के लिए, 'व्यक्ति' नाम की एक तालिका पर विचार करें और हमें 'एबीसी' नाम वाले व्यक्तियों की सूची खोजने की आवश्यकता है।

print db(db.person.name == ' ABC ')._select()

एसक्यूएल स्टेटमेंट आउटपुट -

SELECT person.name FROM person WHERE person.name = ' ABC ';

_delete

यह लाने में मदद करता है delete SQLबयान। उदाहरण के लिए, 'व्यक्ति' नाम की तालिका पर विचार करें और हमें 'एबीसी' नाम वाले कथनों को हटाना होगा।

print db(db.person.name == ' ABC ')._delete()

एसक्यूएल स्टेटमेंट आउटपुट -

DELETE FROM person WHERE person.name = ' ABC ';4

_अपडेट करें

यह अपडेट किए गए SQL स्टेटमेंट को लाने में मदद करता है। उदाहरण के लिए, 'व्यक्ति' नाम की तालिका पर विचार करें और हमें कुछ अन्य मान के साथ एक कॉलम नाम को अपडेट करने की आवश्यकता है

print db(db.person.name == ' ABC ')._update()

एसक्यूएल स्टेटमेंट आउटपुट -

UPDATE person SET WHERE person.name = ’Alex’;

DAL (गोच) के साथ समस्याएँ

SQLite

SQLite में कॉलम को छोड़ने या बदलने के समर्थन का अभाव है। तालिका से किसी फ़ील्ड को हटाने से यह डेटाबेस में सक्रिय रहता है, जिसके कारण web2py को किए गए परिवर्तनों के बारे में पता नहीं होगा।

इस मामले में, इसे सेट करना आवश्यक है fake_migrate = True जो मेटाडेटा को फिर से परिभाषित करने में मदद करेगा जैसे कि कोई परिवर्तन जैसे कि परिवर्तन या हटाना web2py के ज्ञान के तहत रखा जाएगा।

SQLite बूलियन प्रकारों का समर्थन नहीं करता है। इसके लिए, web2py आंतरिक रूप से बुलियन को 1 वर्ण स्ट्रिंग में मैप करता है, जिसमें 'T' और 'F' प्रतिनिधित्व करते हैंtrue तथा False क्रमशः।

माई एसक्यूएल

MySQL ALTER TABLE सुविधा का समर्थन नहीं करता है। इस प्रकार, डेटाबेस के प्रवास में कई आवागमन शामिल हैं। पैरामीटर सेट करके इस स्थिति से बचा जा सकता हैfake_migrate = True डेटाबेस को परिभाषित करते समय, जो सभी मेटाडेटा को बनाए रखेगा।

आकाशवाणी

ओरेकल अभिलेखों के पृष्ठांकन की सुविधा का समर्थन नहीं करता है। यह OFFSET या सीमा के कीवर्ड के लिए समर्थन का भी अभाव है। इसके लिए, Web2py डीएएल के एक जटिल तीन-तरफा नेस्टेड की मदद से पृष्ठांकन को प्राप्त करता है। यदि ओरेकल डेटाबेस का उपयोग किया गया है, तो डीएएल को अपने आप ही पेजिनेशन को संभालने की आवश्यकता है।

web2py फार्म पीढ़ी के लिए शक्तिशाली कार्यों के साथ आता है। Web2py में फॉर्म बनाने के चार अलग-अलग तरीके इस प्रकार हैं -

  • FORM- HTML सहायकों के संदर्भ में, इसे निम्न-स्तरीय कार्यान्वयन के रूप में माना जाता है। एक FORM वस्तु अपने क्षेत्र की सामग्री से अवगत है।

  • SQLFORM - यह मौजूदा डेटाबेस में क्रिएट, अपडेट और डिलीट की फंक्शंस प्रदान करता है।

  • SQLFORM.factory- यह SQLFORM के शीर्ष पर अमूर्त परत के रूप में माना जाता है, जो SQLFORM के समान एक फॉर्म उत्पन्न करता है। यहां, नया डेटाबेस बनाने की आवश्यकता नहीं है।

  • CRUD Methods - जैसा कि नाम से पता चलता है, यह SQLFORM पर आधारित समान कार्यक्षमता के साथ Create, Retrieve, Update और Delete फीचर्स प्रदान करता है।

प्रपत्र

एक एप्लिकेशन पर विचार करें, जो उपयोगकर्ता से एक इनपुट स्वीकार करता है और प्रतिक्रिया सबमिट करने के लिए "सबमिट" बटन होता है।

नियंत्रक

"Default.py" नियंत्रक में निम्नलिखित संबद्ध फ़ंक्शन शामिल होंगे

def display_form():
   return dict()

राय

संबंधित दृश्य "डिफ़ॉल्ट / display_form.html" HTML में फ़ॉर्म के प्रदर्शन को निम्नानुसार प्रस्तुत करेगा -

{{extend 'layout.html'}}
<h2>Basic Form</h2>

<form enctype = "multipart/form-data" action = "{{= URL()}}" method = "post">
   Your name:
   <input name = "name" />
   <input type = "submit" />
</form>

<h2>Submitted variables</h2>
{{= BEAUTIFY(request.vars)}}

उपरोक्त उदाहरण सामान्य HTML फॉर्म है, जो उपयोगकर्ता इनपुट के लिए पूछता है। फार्म की वस्तु जैसे सहायकों के साथ एक ही फॉर्म जनरेट किया जा सकता है।

नियंत्रक

def display_form():
   form = FORM('Value:', INPUT(_value = 'name'), INPUT(_type = 'submit'))
   return dict(form = form)

"डिफ़ॉल्ट" नियंत्रक में उपरोक्त फ़ंक्शन में FORM ऑब्जेक्ट (HTML सहायक) शामिल है जो फ़ॉर्म के निर्माण में मदद करता है।

राय

{{extend 'layout.html'}}
<h2>Basic form</h2>

{{= form}}
<h2>Submitted variables</h2>

{{= BEAUTIFY(request.vars)}}

वह वह रूप है जो कथन द्वारा उत्पन्न होता है {{= form}}FORM ऑब्जेक्ट को क्रमबद्ध करता है। जब कोई उपयोगकर्ता फ़ॉर्म भरता है और सबमिट बटन पर क्लिक करता है, तो फॉर्म स्वयं-सबमिट करता है, और चरrequest.vars.value साथ ही इसके इनपुट मूल्य को सबसे नीचे प्रदर्शित किया जाता है।

SQLFORM

यह मौजूदा डेटाबेस के लिए एक फॉर्म बनाने में मदद करता है। इसके कार्यान्वयन के चरणों पर नीचे चर्चा की गई है।

डीएएल का उपयोग करके डेटाबेस के साथ संबंध स्थापित करना, यह डीएएल ऑब्जेक्ट का उपयोग करके बनाया गया है जिसे डीएएल कंस्ट्रक्टर भी कहा जाता है। कनेक्शन स्थापित करने के बाद, उपयोगकर्ता संबंधित तालिका बना सकता है।

db = DAL('sqlite://storage.sqlite')
db.define_table('employee', Field('name', requires = IS_NOT_EMPTY()))

इस प्रकार, हमने "कर्मचारी" नाम की एक तालिका बनाई है। नियंत्रक निम्नलिखित कथनों के साथ फॉर्म और बटन बनाता है -

form = SQLFORM(
   db.mytable,
   record = mytable_index,
   deletable = True,
   submit_button = T('Update')
)

इसलिए, बनाई गई कर्मचारी तालिका के लिए, नियंत्रक में संशोधन होगा -

def display_form():
   form = SQLFORM(db.person)

में कोई संशोधन नहीं है View। नए नियंत्रक में, यह एक फॉर्म का निर्माण करना आवश्यक है, क्योंकि SQLFORM कंस्ट्रक्टर ने तालिका db.employee से एक मॉडल में बनाया है। नया रूप, जब क्रमबद्ध होता है, इस प्रकार दिखाई देता है -

<form enctype = "multipart/form-data" action = "" method = "post">
   
   <table>
      <tr id = "employee_name__row">
         <td>
            <label id = "person_name__label" for = "person_name">Your name: </label>
         </td>
         
         <td>
            <input type = "text" class = "string" name = "name" value = "" id = "employee_name" />
         </td>
         
         <td></td>
      </tr>

      <tr id = "submit_record__row">
         <td></td>
         <td><input value = "Submit" type = "submit" /></td>
         <td></td>
      </tr>
		
   </table>

   <input value = "9038845529" type = "hidden" name = "_formkey" />
   <input value = "employee" type = "hidden" name = "_formname" />
	
</form>

प्रपत्र के सभी टैग में तालिका और फ़ील्ड नाम से प्राप्त नाम हैं।

एक SQLFORMऑब्जेक्ट "अपलोड" फ़ोल्डर में अपलोड की गई फ़ाइलों को सहेजकर "अपलोड" फ़ील्ड से भी संबंधित है। यह स्वचालित रूप से किया जाता है। SQLFORM चेकबॉक्स और पाठ मानों की मदद से "बूलियन" मान प्रदर्शित करता है“textareas”

SQLFORM प्रक्रिया विधि का भी उपयोग करता है। यदि उपयोगकर्ता किसी संबद्ध SQLFORM के साथ मान रखना चाहता है तो यह आवश्यक है।

अगर form.process(keepvalues = True) तब इसे स्वीकार किया जाता है।

उदाहरण

def display_form():
   form = SQLFORM(db.employee)
if form.process().accepted:
   response.flash = 'form accepted'

elif form.errors:
   response.flash = 'form has errors'
else:
   response.flash = 'please fill out the form'

return dict(form = form)

SQLFORM.factory

कभी-कभी, उपयोगकर्ता को इस तरह से एक फॉर्म जनरेट करने की आवश्यकता होती है कि डेटाबेस के कार्यान्वयन के बिना एक मौजूदा डेटाबेस तालिका हो। उपयोगकर्ता केवल SQLFORM क्षमता का लाभ लेना चाहता है।

इसके माध्यम से किया जाता है form.factory और इसे एक सत्र में बनाए रखा जाता है।

def form_from_factory():
   form = SQLFORM.factory(
      Field('your_name', requires = IS_NOT_EMPTY()),
      Field('your_image', 'upload'))

   if form.process().accepted:
      response.flash = 'form accepted'
      session.your_name = form.vars.your_name
      session.your_image = form.vars.your_image
   elif form.errors:
      response.flash = 'form has errors'

   return dict(form = form)

प्रपत्र SQLFORM की तरह नाम और छवि के साथ अपने क्षेत्रों के रूप में दिखाई देगा, लेकिन डेटाबेस में ऐसी कोई मौजूदा तालिका नहीं है।

"डिफ़ॉल्ट / form_from_factory.html" दृश्य के रूप में प्रतिनिधित्व करेगा -

{{extend 'layout.html'}}
{{= form}}

CRUD तरीके

CRUDSQLFORM के शीर्ष पर उपयोग किया जाने वाला API है। जैसा कि नाम से पता चलता है, इसका उपयोग उपयुक्त फॉर्म के निर्माण, पुनर्प्राप्ति, अद्यतन और हटाने के लिए किया जाता है।

CR2, Web2py में अन्य एपीआई की तुलना में, उजागर नहीं है; इसलिए, यह आवश्यक है कि इसे आयात किया जाना चाहिए।

from gluon.tools import Crud
crud = Crud(db)

ऊपर परिभाषित CRUD ऑब्जेक्ट निम्नलिखित एपीआई प्रदान करता है -

अनु क्रमांक एपीआई और कार्यक्षमता
1

crud.tables()

डेटाबेस में परिभाषित तालिकाओं की सूची लौटाता है।

2

crud.create(db.tablename)

के लिए एक क्रिएट फॉर्म लौटाता है table tablename

3

crud.read(db.tablename, id)

के लिए केवल-पठन प्रपत्र लौटाता है tablename और रिकॉर्ड आईडी।

4

crud.delete(db.tablename, id)

रिकॉर्ड को हटा देता है

5

crud.select(db.tablename, query)

तालिका से चयनित अभिलेखों की सूची लौटाता है।

6

crud.search(db.tablename)

एक tuple (प्रपत्र, रिकॉर्ड) लौटाता है जहाँ फ़ॉर्म एक खोज फ़ॉर्म है।

7

crud()

अनुरोध के आधार पर उपरोक्त में से एक लौटाता है। मूल्य ()।

फार्म का निर्माण

आइये हम एक फॉर्म बनाते हैं। नीचे दिए गए कोड का पालन करें।

नमूना

के तहत एक नया मॉडल बनाया गया है modelsएप्लिकेशन का फ़ोल्डर। फ़ाइल का नाम होगा“dynamic_search.py”

def build_query(field, op, value):
   if op == 'equals':
      return field == value
   
   elif op == 'not equal':
      return field != value
   
   elif op == 'greater than':
      return field > value
   
   elif op == 'less than':
      return field < value
   
   elif op == 'starts with':
      return field.startswith(value)
   
   elif op == 'ends with':
      return field.endswith(value)
   
   elif op == 'contains':
      return field.contains(value)

def dynamic_search(table):
   tbl = TABLE()
   selected = []
   ops = ['equals', 
      'not equal',
      'greater than',
      'less than',
      'starts with',
      'ends with',
      'contains']
		
query = table.id > 0

for field in table.fields:
   chkval = request.vars.get('chk'+field,None)
   txtval = request.vars.get('txt'+field,None)
   opval = request.vars.get('op'+field,None)
	
row = TR(TD(INPUT(_type = "checkbox",_name = "chk"+field,value = chkval == 'on')),
   TD(field),TD(SELECT(ops,_name = "op"+field,value = opval)),
   TD(INPUT(_type = "text",_name = "txt"+field,_value = txtval)))
	
tbl.append(row)

if chkval:
   if txtval:
      query &= build_query(table[field], opval,txtval)
      selected.append(table[field])
      form = FORM(tbl,INPUT(_type="submit"))
      results = db(query).select(*selected)
   return form, results

नियंत्रक

संबंधित फ़ाइल अर्थात् “dynamic_search.py” नियंत्रक अनुभाग के तहत निम्नलिखित कोड शामिल होंगे -

def index():
   form,results = dynamic_search(db.things)
   return dict(form = form,results = results)

राय

हम इसे निम्नलिखित दृश्य के साथ प्रस्तुत कर सकते हैं।

{{extend 'layout.html'}}
{{= form}}
{{= results}}

यहाँ है कि यह कैसा दिखता है -

web2py में उपयोगकर्ता को ई-मेल और एसएमएस भेजने की कार्यक्षमता शामिल है। यह ईमेल और एसएमएस भेजने के लिए पुस्तकालयों का उपयोग करता है।

ईमेल सेट करना

में निर्मित वर्ग अर्थात् gluon.tools.Mailweb2py फ्रेमवर्क में ईमेल भेजने के लिए क्लास का उपयोग किया जाता है। मेलर को इस वर्ग के साथ परिभाषित किया जा सकता है।

from gluon.tools import Mail
mail = Mail()
mail.settings.server = 'smtp.example.com:25'
mail.settings.sender = '[email protected]'
mail.settings.login = 'username:password'

पासवर्ड के साथ उपरोक्त उदाहरण में उल्लिखित प्रेषक ईमेल को हर बार प्रमाणित किया जाएगा जब कोई ईमेल भेजा जाता है।

यदि उपयोगकर्ता को कुछ डिबगिंग उद्देश्य के लिए प्रयोग या उपयोग करने की आवश्यकता है, तो यह निम्नलिखित कोड का उपयोग करके प्राप्त किया जा सकता है।

mail.settings.server = 'logging'

अब, सभी ईमेल नहीं भेजे जाएंगे, लेकिन यह कंसोल में लॉग इन किया जाएगा।

एक ईमेल भेजा जा रहा है

एक बार जब हमने मेल ऑब्जेक्ट का उपयोग करके ईमेल के लिए कॉन्फ़िगरेशन सेटिंग्स सेट की हैं, तो एक ईमेल कई उपयोगकर्ताओं को भेजा जा सकता है।

का पूरा वाक्य विन्यास mail.send() इस प्रकार है -

send(
   to, subject = 'Abc',
   message = 'None', attachments = [],
   cc = [], bcc = [], reply_to = [],
   sender = None, encoding = 'utf-8',
   raw = True, headers = {}
)

इसका कार्यान्वयन mail.send() नीचे दिया गया है।

mail.send(
   to = ['[email protected]'], subject = 'hello',
   reply_to = '[email protected]',
   message = 'Hello ! How are you?'
)

Mailमेलिंग सर्वर की प्रतिक्रिया के आधार पर बूलियन एक्सप्रेशन देता है, कि मेल अंतिम उपयोगकर्ता को प्राप्त होता है। यह लौट आता हैTrue यदि यह उपयोगकर्ता को एक ईमेल भेजने में सफल होता है।

के गुण, cc तथा bcc इसमें मान्य ईमेल पतों की सूची शामिल है जिसके लिए मेल भेजने का इरादा है।

एसएमएस भेजना

एसएमएस संदेश भेजने के लिए कार्यान्वयन web2py ढांचे में ईमेल भेजने से भिन्न होता है क्योंकि इसके लिए तीसरे पक्ष की सेवा की आवश्यकता होती है जो रिसीवर को संदेश भेज सकती है। तृतीय पक्ष सेवा एक निशुल्क सेवा नहीं है और यह स्पष्ट रूप से भौगोलिक क्षेत्र (देश से देश तक) के आधार पर भिन्न होगी।

web2py निम्नलिखित प्रक्रिया के साथ एसएमएस भेजने में मदद करने के लिए एक मॉड्यूल का उपयोग करता है -

from gluon.contrib.sms_utils
import SMSCODES, sms_email
email = sms_email('1 (111) 111-1111','T-Mobile USA (abc)')
mail.send(to = email, subject = 'test', message = 'test')

उपरोक्त उदाहरण में, SMSCODES वेब 2py द्वारा बनाए गए शब्दकोश में ईमेल पता उपसर्ग के लिए प्रमुख फोन कंपनियों के नामों का मानचित्र है।

टेलीफोन कंपनियां आमतौर पर स्पैम के रूप में तृतीय पक्ष सेवाओं से उत्पन्न ईमेल का इलाज करती हैं। एक बेहतर तरीका यह है कि फोन कंपनियां खुद एसएमएस को रिलेट करें। हर फोन कंपनी के स्टोरेज में हर मोबाइल नंबर के लिए एक यूनिक ईमेल एड्रेस शामिल होता है और एसएमएस सीधे ईमेल पर भेजा जा सकता है।

उपरोक्त उदाहरण में,

  • sms_email फ़ंक्शन एक फोन नंबर (एक स्ट्रिंग के रूप में) लेता है, जो फोन का ईमेल पता लौटाता है।

  • मचान ऐप में कई फाइलें शामिल हैं। उनमें से एक मॉडल / db.py है, जो चार आयात करता है।

  • से कक्षाएं gluon.tools मेल पुस्तकालयों को भी शामिल करें और विभिन्न वैश्विक वस्तुओं को परिभाषित करें।

  • मचान एप्लिकेशन को भी ऑब्जेक्ट जैसे कि ऑब्जेक्ट द्वारा आवश्यक तालिकाओं को परिभाषित करता है db.auth_user। डिफ़ॉल्ट मचान एप्लिकेशन को फ़ाइलों की संख्या को कम करने के लिए डिज़ाइन किया गया है, न कि मॉड्यूलर होने के लिए। विशेष रूप से, मॉडल फ़ाइल,db.py, विन्यास शामिल है, जो एक उत्पादन वातावरण में, अलग-अलग फ़ाइलों में सबसे अच्छा रखा जाता है।

यहाँ, हम एक विन्यास फाइल बनाने का सुझाव देते हैं -

from gluon.storage import Storage
   settings = Storage()
   settings.production = False
   
   if
      settings.production:
      settings.db_uri = 'sqlite://production.sqlite'
      settings.migrate = False
   else:
      settings.db_uri = 'sqlite://development.sqlite'
      settings.migrate = True
      settings.title = request.
      settings.subtitle = 'write something here'
		
      settings.author = 'you'
      settings.author_email = '[email protected]'
		
      settings.keywords = ''
      settings.description = ''
      settings.layout_theme = 'Default'
      settings.security_key = 'a098c897-724b-4e05-b2d8-8ee993385ae6'
		
      settings.email_server = 'localhost'
      settings.email_sender = '[email protected]'
      settings.email_login = ''
		
      settings.login_method = 'local'
      settings.login_config = ''

प्रमाणीकरण

लगभग हर एप्लिकेशन को उपयोगकर्ताओं को प्रमाणित करने और अनुमतियां सेट करने में सक्षम होना चाहिए। web2py एक व्यापक और अनुकूलन योग्य भूमिका-आधारित अभिगम नियंत्रण के साथ आता हैmechanism.web2py। यह प्रोटोकॉल का भी समर्थन करता है, जैसे कि CAS, OpenID, OAuth 1.0, LDAP, PAM, X509, और कई और।

web2py में रोल बेस्ड एक्सेस कंट्रोल मैकेनिज्म (RBAC) के रूप में जाना जाने वाला एक तंत्र शामिल है जो अधिकृत उपयोगकर्ताओं के लिए सिस्टम एक्सेस को प्रतिबंधित करने का एक तरीका है। R2AC को लागू करने वाले web2py वर्ग को Auth कहा जाता है।

नीचे दिए गए स्कीमा को देखें।

Auth निम्नलिखित तालिकाओं को परिभाषित करता है -

अनु क्रमांक तालिका का नाम और विवरण
1

auth_user

उपयोगकर्ताओं का नाम, ईमेल पता, पासवर्ड और स्थिति संग्रहीत करता है।

2

auth_group

कई-कई संरचना में उपयोगकर्ताओं के लिए समूह या भूमिकाएं संग्रहीत करता है

3

auth_membership

कई-कई संरचना में लिंक उपयोगकर्ताओं और समूहों की जानकारी संग्रहीत करता है

4

auth_permission

तालिका समूहों और अनुमतियों को जोड़ती है।

5

auth_event

लॉग अन्य तालिकाओं में परिवर्तन और सफल पहुँच

6

auth_cas

इसका उपयोग Central Authentication Service के लिए किया जाता है

प्रामाणिक बनाना

Auth को कस्टमाइज़ करने के दो तरीके हैं।

  • एक प्रथा को परिभाषित करने के लिए db.auth_user खरोंच से तालिका।

  • Web2py को परिभाषित करने दें auth तालिका।

आइए हम परिभाषित करने की अंतिम विधि को देखें authतालिका। मेंdb.py मॉडल, निम्नलिखित पंक्ति को बदलें -

auth.define_tables()

इसे निम्नलिखित कोड से बदलें -

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

धारणा यह है कि प्रत्येक उपयोगकर्ता में फ़ोन नंबर, उपयोगकर्ता नाम और पता होता है।

auth.settings.extra_fieldsअतिरिक्त क्षेत्रों का एक शब्दकोश है। कुंजी उस तालिका का नाम है जिसमें अतिरिक्त फ़ील्ड जोड़ना है। मान अतिरिक्त फ़ील्ड्स की एक सूची है। यहां, हमने दो अतिरिक्त फ़ील्ड जोड़े हैं,phone_number and address

usernameएक विशेष तरीके से इलाज किया जाना है, क्योंकि यह प्रमाणीकरण प्रक्रिया में शामिल है, जो सामान्य रूप से ईमेल क्षेत्र पर आधारित है। निम्नलिखित पंक्ति में उपयोगकर्ता नाम तर्क पास करके, यह web2py को सूचित किया जाता है कि हम उपयोगकर्ता नाम फ़ील्ड चाहते हैं, और हम इसे ईमेल फ़ील्ड के बजाय लॉगिन के लिए उपयोग करना चाहते हैं। यह एक प्राथमिक कुंजी की तरह कार्य करता है।

auth.define_tables(username = True)

उपयोगकर्ता नाम एक अद्वितीय मान के रूप में माना जाता है। ऐसे मामले हो सकते हैं जब पंजीकरण सामान्य पंजीकरण फॉर्म के बाहर होता है। ऐसा भी होता है, कि नए उपयोगकर्ता को अपना पंजीकरण पूरा करने के लिए लॉगिन करने के लिए मजबूर किया जाता है।

यह डमी क्षेत्र का उपयोग करके किया जा सकता है, complete_registration यह निर्धारित है False डिफ़ॉल्ट रूप से, और इसके लिए सेट है True जब वे अपना प्रोफ़ाइल अपडेट करते हैं।

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

यह परिदृश्य नए उपयोगकर्ताओं को, अपना पंजीकरण पूरा करने के लिए, लॉगिन करने पर दे सकता है।

में db.py, मॉडल फ़ोल्डर में, हम निम्नलिखित कोड जोड़ सकते हैं -

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

यह नए उपयोगकर्ताओं को उनकी प्रोफ़ाइल को आवश्यकतानुसार संपादित करने के लिए बाध्य करेगा।

प्राधिकार

यह कुछ एक्सेस देने या उपयोगकर्ताओं को कुछ की अनुमति देने की प्रक्रिया है।

Web2py में एक बार नया उपयोगकर्ता बनाने या पंजीकृत होने के बाद, उपयोगकर्ता को शामिल करने के लिए एक नया समूह बनाया जाता है। नए उपयोगकर्ता की भूमिका को पारंपरिक रूप से कहा जाता है“user_[id]” जहां आईडी उपयोगकर्ता की विशिष्ट पहचान है।

नए समूह के निर्माण का डिफ़ॉल्ट मान है -

auth.settings.create_user_groups = "user_%(id)s"

उपयोगकर्ताओं के बीच समूहों के निर्माण को निष्क्रिय किया जा सकता है -

auth.settings.create_user_groups = None

रचना, विशेष सदस्यों के लिए पहुँच प्रदान करना और अनुमतियाँ प्रोग्रामेटिक रूप से appadmin की मदद से भी प्राप्त की जा सकती हैं।

कुछ कार्यान्वयन इस प्रकार हैं -

अनु क्रमांक कमान और उपयोग
1

auth.add_group('role', 'description')

नए बनाए गए समूह की आईडी लौटाता है।

2

auth.del_group(group_id)

निर्दिष्ट आईडी के साथ समूह को हटाता है

3

auth.del_group(auth.id_group('user_7'))

दिए गए पहचान के साथ उपयोगकर्ता समूह को हटाता है।

4

auth.user_group(user_id)

दिए गए उपयोगकर्ता के लिए विशिष्ट रूप से संबद्ध समूह की आईडी का मूल्य लौटाता है।

5

auth.add_membership(group_id, user_id)

दिए गए group_id के लिए user_id का मान लौटाता है

6

auth.del_membership(group_id, user_id)

दिए गए group_id की पहुंच का उपयोग करता है अर्थात user_id दिए गए समूह से।

7

auth.has_membership(group_id, user_id, role)

जाँचता है कि क्या user_id दिए गए समूह से संबंधित है।

केंद्रीय प्रमाणीकरण सेवा (CAS)

web2py एक उद्योग मानक प्रदान करता है जिसका नाम है, क्लाइंट ऑथेंटिकेशन सर्विस - ग्राहक और सर्वर दोनों के लिए CAS-in web2py। यह एक थर्ड पार्टी ऑथेंटिकेशन टूल है।

यह वितरित प्रमाणीकरण के लिए एक खुला प्रोटोकॉल है। CAS का काम इस प्रकार है -

  • यदि उपयोगकर्ता वेबसाइट पर जाता है, तो प्रोटोकॉल जांचता है कि उपयोगकर्ता प्रमाणित है या नहीं।

  • यदि उपयोगकर्ता अनुप्रयोग के लिए प्रमाणित नहीं है, तो प्रोटोकॉल उस पृष्ठ पर पुनर्निर्देशित करता है जहाँ उपयोगकर्ता पंजीकरण कर सकता है या आवेदन में लॉग इन कर सकता है।

  • यदि पंजीकरण पूरा हो गया है, तो उपयोगकर्ता एक ईमेल प्राप्त करता है। पंजीकरण तब तक पूरा नहीं होता जब तक कि उपयोगकर्ता ईमेल की पुष्टि नहीं करता।

  • सफल पंजीकरण के बाद, उपयोगकर्ता को कुंजी के साथ प्रमाणित किया जाता है, जिसका उपयोग सीएएस उपकरण द्वारा किया जाता है।

  • कुंजी का उपयोग HTTP अनुरोध के माध्यम से उपयोगकर्ता के क्रेडेंशियल्स प्राप्त करने के लिए किया जाता है, जो पृष्ठभूमि में सेट किया गया है।

web2py XML, JSON, RSS, CSV, XMLRPC, JSONRPC, AMFRPC और SOAP जैसे विभिन्न प्रोटोकॉल के लिए समर्थन प्रदान करता है। उनमें से प्रत्येक प्रोटोकॉल को कई तरीकों से समर्थित किया गया है, और हम इसके बीच अंतर करते हैं -

  • किसी दिए गए प्रारूप में फ़ंक्शन के आउटपुट का प्रतिपादन।
  • दूरस्थ प्रक्रिया कॉल।

एक शब्दकोश का प्रतिपादन

निम्नलिखित कोड पर विचार करें जो सत्रों की गिनती को बनाए रखता है।

def count():
   session.counter = (session.counter or 0) + 1
   return dict(counter = session.counter, now = request.now)

उपर्युक्त फ़ंक्शन उपयोगकर्ता के पेज पर आने के साथ ही संख्या में वृद्धि करता है। मान लीजिए दिए गए फ़ंक्शन को परिभाषित किया गया है“default.py”web2py अनुप्रयोग का नियंत्रक। पृष्ठ का अनुरोध निम्न URL से किया जा सकता है -http://127.0.0.1:8000/app/default/count

web2py उपरोक्त पेज को अलग-अलग प्रोटोकॉल में और URL में एक्सटेंशन जोड़कर रेंडर कर सकता है, जैसे -

http://127.0.0.1:8000/app/default/count.html

http://127.0.0.1:8000/app/default/count.xml

http://127.0.0.1:8000/app/default/count.json

उपरोक्त कार्रवाई द्वारा लौटाए गए शब्दकोश को HTML, XML और JSON में प्रस्तुत किया जाएगा।

दूरस्थ प्रक्रिया कॉल

web2py फ्रेमवर्क एक तंत्र प्रदान करता है जो एक फ़ंक्शन को वेब सेवा में परिवर्तित करता है। यहाँ वर्णित तंत्र पहले वर्णित तंत्र से भिन्न है क्योंकि -

  • फ़ंक्शन में तर्कों का समावेश।
  • फ़ंक्शन को एक मॉडल में परिभाषित किया जाना चाहिए।
  • यह एक अधिक सख्त URL नामकरण सम्मेलन को लागू करता है।
  • यह प्रोटोकॉल के एक निश्चित सेट के लिए काम करता है और यह आसानी से एक्स्टेंसिबल है।
  • इस सुविधा का उपयोग करने के लिए सेवा वस्तु को आयात करना और आरंभ करना आवश्यक है।

इस तंत्र को लागू करने के लिए, सबसे पहले, आपको एक सेवा ऑब्जेक्ट को आयात और तत्काल करना होगा।

from gluon.tools import Service
service = Service()

में लागू किया गया है "db.py" मचान अनुप्रयोग में मॉडल फ़ाइल। Db.py मॉडल web2py फ्रेमवर्क में डिफ़ॉल्ट मॉडल है, जो उपयोगकर्ताओं को वांछित आउटपुट प्राप्त करने के लिए डेटाबेस और नियंत्रक के साथ बातचीत करता है।

लागू करने के बाद, जब आवश्यक हो, मॉडल में सेवा को नियंत्रकों से एक्सेस किया जा सकता है।

निम्न उदाहरण वेब सेवाओं और कई और अधिक का उपयोग करके दूरस्थ प्रक्रिया कॉल के विभिन्न कार्यान्वयन दिखाता है।

वेब सेवाएं

XML, SOAP, WSDL और UDDI जैसे प्रोटोकॉल का उपयोग करके वेब-आधारित अनुप्रयोगों को एकीकृत करने के मानकीकृत तरीके के रूप में वेब सेवाओं को परिभाषित किया जा सकता है।

web2py उनमें से ज्यादातर का समर्थन करता है, लेकिन एकीकरण काफी मुश्किल होगा।

JQuery के साथ एक web2py JSON सेवा का उपभोग करना

JSON फॉर्म web2py को वापस करने के कई तरीके हैं, लेकिन यहां हम JSON सेवा के मामले पर विचार करते हैं। उदाहरण के लिए -

def consumer():return dict()@service.json
def get_days():return ["Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat"]
def call():return service()

यहाँ, हम देखते हैं कि -

  • फ़ंक्शन दृश्य को प्रस्तुत करने के लिए सिर्फ एक खाली शब्दकोश देता है, जो सेवा का उपभोग करेगा।

  • get_days सेवा को परिभाषित करता है, और फ़ंक्शन कॉल सभी पंजीकृत सेवाओं को उजागर करता है।

  • get_days नियंत्रक में होने की जरूरत नहीं है, और एक मॉडल में हो सकता है।

  • call डिफ़ॉल्ट डिफ़ॉल्ट मचान नियंत्रक में हमेशा होता है।

उपभोक्ता कार्यों के साथ देखें निम्नानुसार हैं -

{{extend 'layout.html'}}
<div id = "target"></div>

<script>
   jQuery.getJSON("{{= URL('call',args = ['json','get_days'])}}",
      function(msg){
         jQuery.each(msg, function(){ jQuery("#target").
         append(this + "<br />"); } )
      }
   );
</script>

का पहला तर्क jQuery.getJSON निम्नलिखित सेवा का URL है - http://127.0.0.1:8000/app/default/call/json/get_days

यह हमेशा पैटर्न का अनुसरण करता है -

http://<domain>/<app>/<controller>/call/<type>/<service>

बीच में URL है {{...}}, क्योंकि यह सर्वर-साइड पर हल किया जाता है, जबकि क्लाइंट-साइड में बाकी सब निष्पादित होता है। का दूसरा तर्कjQuery.getJSON एक कॉलबैक है, जिसे JSON प्रतिक्रिया दी जाएगी।

इस स्थिति में, कॉलबैक प्रतिक्रिया में प्रत्येक आइटम पर लूप करता है (स्ट्रिंग्स के रूप में सप्ताह के दिनों की एक सूची), और प्रत्येक स्ट्रिंग को जोड़ता है, उसके बाद एक <br/> को <div id = "target">

इस तरह, web2py वेब सेवाओं के उपयोग का कार्यान्वयन करता है jQuery.getJSON

इस अध्याय में, हम एकीकरण के उदाहरणों पर चर्चा करेंगे jQuery के साथ प्लगइन्स web2py। ये प्लगइन्स रूपों और तालिकाओं को उपयोगकर्ता के लिए अधिक संवादात्मक और मैत्रीपूर्ण बनाने में मदद करते हैं, इस प्रकार आपके एप्लिकेशन की उपयोगिता में सुधार करते हैं।

विशेष रूप से, हम सीखेंगे

  • इंटरेक्टिव ऐड ऑप्शन बटन के साथ मल्टी-सलेक्ट ड्रॉप-डाउन कैसे सुधारें,

  • स्लाइडर के साथ इनपुट फ़ील्ड को कैसे बदलें, और

  • कैसे सारणीबद्ध डेटा का उपयोग करके प्रदर्शित किया जाए jqGrid तथा WebGrid

हालांकि web2py एक सर्वर-साइड डेवलपमेंट घटक है, welcome मचान ऐप में आधार शामिल है jQueryपुस्तकालय। इस मचान web2py अनुप्रयोग "वेलकम" में एक फ़ाइल शामिल है जिसे कहा जाता हैviews/web2py_ajax.html

देखने की सामग्री इस प्रकार है -

<script type = "text/javascript"><!--

   // These variables are used by the web2py_ajax_init function in web2py_ajax.js 
      (which is loaded below).
		
   var w2p_ajax_confirm_message = "{{= T('Are you sure you want to delete this object?')}}";
   var w2p_ajax_disable_with_message = "{{= T('Working...')}}";
   var w2p_ajax_date_format = "{{= T('%Y-%m-%d')}}";
   var w2p_ajax_datetime_format = "{{= T('%Y-%m-%d %H:%M:%S')}}";
   
   var ajax_error_500 = '{{=T.M('An error occured, please [[reload %s]] the page') %
	
      URL(args = request.args, vars = request.get_vars) }}'
		
//--></script>

{{
   response.files.insert(0,URL('static','js/jquery.js'))
   response.files.insert(1,URL('static','css/calendar.css'))
   response.files.insert(2,URL('static','js/calendar.js'))
   response.files.insert(3,URL('static','js/web2py.js'))
   response.include_meta()
   response.include_files()
}}

फ़ाइल जावास्क्रिप्ट और AJAX कार्यान्वयन के कार्यान्वयन के होते हैं। web2py उपयोगकर्ता को अन्य AJAX पुस्तकालयों जैसे कि प्रोटोटाइप, एक्सटीजेएस का उपयोग करने से रोकेगा, क्योंकि यह हमेशा देखा जाता है कि ऐसे पुस्तकालयों को लागू करना आसान है।

JQuery के प्रभाव

का डिफ़ॉल्ट रेंडरिंग <select multiple = "true">..</select>यह विशेष रूप से उपयोग करने के लिए सहज नहीं माना जाता है, विशेष रूप से, जब गैर-सन्निहित विकल्पों का चयन करना आवश्यक होता है। इसे एचटीएमएल की कमी नहीं कहा जा सकता है, लेकिन अधिकांश ब्राउज़रों का खराब डिजाइन। कई चुनिंदा की प्रस्तुति को जावास्क्रिप्ट का उपयोग करके अधिलेखित किया जा सकता है। इसे jQuery प्लगइन नाम से लागू किया जा सकता हैjquery.multiselect.js

इसके लिए, एक उपयोगकर्ता को प्लगइन डाउनलोड करना चाहिए jquery.muliselect.js से http://abeautifulsite.net/2008/04/jquery-multiselect, और संबंधित फाइलों को इसमें रखें static/js/jquery.multiselect.js तथा static/css/jquery.multiselect.css

उदाहरण

निम्नलिखित कोड को इससे पहले संबंधित दृश्य में जोड़ा जाना चाहिए {{extend ‘layout.html’}}

{{
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/jquery-ui.js')
   
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/themes/ui-darkness/jquery-ui.css')
   
   response.files.append(URL('static','js/jquery.multiSelect.js'))
   response.files.append(URL('static','css/jquery.\multiSelect.css'))
}}

निम्नलिखित को रखें {{extend 'layout.html'}} -

<script>
   jQuery(document).ready(function(){jQuery('[multiple]').multiSelect();});
</script>

यह स्टाइल करने में मदद करेगा multiselect दिए गए फॉर्म के लिए

नियंत्रक

def index():
   is_fruits = IS_IN_SET(['Apples','Oranges','Bananas','Kiwis','Lemons'], multiple = True)
   form = SQLFORM.factory(Field('fruits','list:string', requires = is_fruits))
   
   if form.accepts(request,session):response.flash = 'Yummy!'
return dict(form = form)

यह क्रिया निम्नलिखित दृश्य के साथ आजमाई जा सकती है -

{{
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/jquery-ui.js')
   
   response.files.append('https://ajax.googleapis.com/ajax\
      /libs/jqueryui/1.8.9/themes/ui-darkness/jquery-ui.css')
   
   response.files.append(URL('static','js/jquery.multiSelect.js'))
   response.files.append(URL('static','css/jquery.\multiSelect.css'))
}}

{{extend 'layout.html}}
<script>
   jQuery(document).ready(function(){jQuery('[multiple]'). multiSelect();});
</script>
{{= form}}

आउटपुट का स्क्रीनशॉट इस प्रकार है -

कुछ उपयोगी Jquery घटनाओं को निम्न तालिका में सूचीबद्ध किया गया है -

अनु क्रमांक। घटना और उपयोग
1

onchange

जब तत्व बदलता है तो चलाया जाए

2

onsubmit

फॉर्म सबमिट होने पर चलाया जाएगा

3

onselect

जब तत्व का चयन किया जाता है तो चलाया जा सकता है

4

onblur

चलाने के लिए जब तत्व ध्यान केंद्रित खो देता है

5

onfocus

जब तत्व केंद्रित हो जाए तो चलाया जाए

JQuery और Ajax-jqGrid

jqGrid एक अजाक्स-सक्षम जावास्क्रिप्ट नियंत्रण है जो jQuery पर बनाया गया है जो सारणीबद्ध डेटा का प्रतिनिधित्व और हेरफेर करने के लिए एक समाधान प्रदान करता है। jqGrid क्लाइंट-साइड समाधान है, और यह अजाक्स कॉलबैक के माध्यम से डेटा को गतिशील रूप से लोड करता है, इस प्रकार पृष्ठांकन, खोज पॉपअप, इनलाइन संपादन, और इसी तरह प्रदान करता है।

jqGrid को PluginWiki में एकीकृत किया गया है, लेकिन, यहाँ, हम इसे web2py प्रोग्राम के लिए एक स्टैंडअलोन के रूप में चर्चा करते हैं जो प्लगइन का उपयोग नहीं करते हैं। jqGrid अपनी खुद की एक पुस्तक की हकदार है, लेकिन यहां हम केवल इसकी बुनियादी विशेषताओं और सरलतम एकीकरण पर चर्चा करेंगे।

JqGrid का सिंटैक्स निम्नानुसार होगा -

def JQGRID(
   table, fieldname = None,
   fieldvalue = None, col_widths = [],
   colnames = [], _id = None, fields = [],
   col_width = 80, width = 700,
   height = 300, dbname = 'db'
):

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

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

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)

Ubuntu (Linux) में web2py की स्थापना

निम्न चरणों को Ubuntu डेस्कटॉप में web2py की स्थापना के लिए लागू किया गया है।

Step 1 - web2py डाउनलोड करें

cd /home
mkdir www-dev

cd www-dev
wget http://www.web2py.com/examples/static/web2py_src.zip

Step 2 - डाउनलोड पूरा होने के बाद, इसे अनज़िप करें।

unzip -x web2py_src.zip

Step 3 - वैकल्पिक रूप से पायथन के लिए tk लाइब्रेरी स्थापित करें, यदि आपको GUI तक पहुँचने की आवश्यकता है।

sudo apt-get install python-tk

Step 4 - web2py शुरू करने के लिए, web2py निर्देशिका तक पहुंचें और web2py चलाएं।

cd web2py
python web2py.py

GUI निम्नानुसार दिखाई देगा -

स्थापना के बाद, हर बार जब आप इसे चलाते हैं, web2py आपको एक पासवर्ड चुनने के लिए कहेगा। यह पासवर्ड आपका प्रशासनिक पासवर्ड है। यदि पासवर्ड खाली छोड़ दिया जाता है, तो प्रशासनिक इंटरफ़ेस अक्षम हो जाएगा।

एक बार सर्वर शुरू होने के बाद, web2py निम्नलिखित URL के साथ स्क्रीन पर रीडायरेक्ट करेगा - http://127.0.0.1:8000/

इससे यह निष्कर्ष निकलेगा कि web2py पूरी तरह से उबंटू डेस्कटॉप में चल रहा है।

उबंटू में उत्पादन परिनियोजन

Step 1 - web2py को चलाने के लिए आवश्यक सभी मॉड्यूल की स्थापना।

PostgreSQL की स्थापना

sudo apt-get install postgresql

Unzip और open ssh-server

sudo apt-get install unzip
sudo apt-get install openssh-server

Apache 2 और mod-wsgi की स्थापना

sudo apt-get install apache2
sudo apt-get install libapache2-mod-wsgi

Step 2 - web2py / घर / www-डेटा की स्थापना

यह उत्पादन वातावरण में उचित तैनाती के लिए मदद करता है।

sudo apt-get install unzip
sudo apt-get install openssh-server
cd /home
sudo mkdir www-data
cd www-data

Web2py साइट से web2py स्रोत प्राप्त करें -

sudo wget http://web2py.com/examples/static/web2py_src.zip
sudo unzip web2py_src.zip
sudo chown -R www-data:www-data web2py

Step 3- एक स्व-हस्ताक्षरित प्रमाण पत्र बनाएं। एसएसएल प्रमाणपत्र एक विश्वसनीय प्रमाणपत्र प्राधिकरण से प्राप्त किया जाना चाहिए। इसमें प्रमाणपत्रों के साथ एक एसएसएल फ़ोल्डर बनाए रखें।

Step 4 - उत्पादन वातावरण की आवश्यकता के अनुसार अपाचे विन्यास को संपादित करें।

Step 5 - अपाचे सर्वर को फिर से शुरू करें और सत्यापित करें कि उत्पादन वातावरण दिए गए आईपी पते के लिए काम करता है।

विंडोज पर web2py स्थापित करना

यद्यपि विंडोज वातावरण (पैकेजिंग निष्पादन और मानक पुस्तकालयों) के लिए एक द्विआधारी वितरण है, web2py खुला स्रोत है, और इसे एक सामान्य पायथन इंस्टॉलेशन के साथ इस्तेमाल किया जा सकता है।

यह विधि web2py की नवीनतम रिलीज के साथ काम करने की अनुमति देती है, और अजगर मॉड्यूल का उपयोग करने के लिए अनुकूलित करती है।

Step 1 - web2py आधिकारिक वेबसाइट से स्रोत पैकेज डाउनलोड करें - http://www.web2py.com/examples/static/web2py_src.zip और इसे खोल दो।

जैसा कि web2py को स्थापना की आवश्यकता नहीं है, उपयोगकर्ता इसे किसी भी फ़ोल्डर में अनज़िप कर सकता है।

Step 2 - इसे शुरू करने के लिए, डबल-क्लिक करें web2py.py। कंसोल से -

cd c:\web2py
c:\python27\python.exe web2py.py

Step 3- यहां कमांड लाइन पैरामीटर जोड़ा जा सकता है (−a एक व्यवस्थापक पासवर्ड सेट करने के लिए, वैकल्पिक पोर्ट निर्दिष्ट करने के लिए canp)। स्टार्टअप विकल्प के माध्यम से दिखाई दे रहे हैं -

C:\web2py>c:\python27\python.exe web2py.py --help

ध्यान दें

  • web2py पायथन में लिखा गया है, एक पोर्टेबल, व्याख्या और गतिशील भाषा जिसे चलाने के लिए संकलन या जटिल स्थापना की आवश्यकता नहीं है।

  • यह एक वर्चुअल मशीन (जैसे जावा और .Net) का उपयोग करता है, और जब आप अपनी स्क्रिप्ट चलाते हैं, तो यह पारदर्शी रूप से मक्खी पर अपने स्रोत कोड को बाइट कर सकता है।

डेटाबेस और परीक्षण के लिए web2py में कार्यशीलता

यह SQLDesigner नामक एक सॉफ्टवेयर है जो web2py मॉडल बनाने में मदद करता है और संबंधित कोड उत्पन्न करता है। नीचे कुछ स्क्रीनशॉट दिए गए हैं -

SQLDesigner सरल तरीके से तालिकाओं के संबंधों को बनाए रखने में मदद करता है और दिए गए एप्लिकेशन के मॉडल में संबंधित कोड उत्पन्न करता है।

क्रियात्मक परीक्षण

कार्यात्मक परीक्षण में घटकों या समग्र प्रणाली के कार्यों का परीक्षण शामिल है। यह आवश्यकता और व्यवसाय प्रक्रिया पर आधारित हो सकता है।

web2py एक मॉड्यूल के साथ आता है gluon.contrib.webclient, जो दूरस्थ और स्थानीय web2py अनुप्रयोगों में कार्यात्मक परीक्षण करता है। यह मूल रूप से web2py सत्र और पोस्टबैक को समझने के लिए डिज़ाइन किया गया है।

इसके लिए केवल पैकेज की आवश्यकता होती है, ताकि दिए गए मॉड्यूल पर कार्यात्मक परीक्षण को लागू किया जा सके।

पैकेज आयात करने का सिंटैक्स इस प्रकार है -

from gluon.contrib.webclient import WebClient

पिछले अध्यायों में, विभिन्न उपकरणों के साथ web2py के कार्यान्वयन पर पूरी जानकारी थी। Web2py अनुप्रयोगों को विकसित करने की प्रमुख चिंता में उपयोगकर्ता के दृष्टिकोण से सुरक्षा शामिल है।

Web2py की अनूठी विशेषताएं इस प्रकार हैं -

  • उपयोगकर्ता कार्यान्वयन को आसानी से सीख सकते हैं। यह कोई स्थापना और निर्भरता की आवश्यकता है।

  • यह लॉन्च के दिन से ही स्थिर है।

  • web2py हल्का है और इसमें डेटा एब्स्ट्रक्शन लेयर और टेम्प्लेट लैंग्वेज के लिए लाइब्रेरी शामिल हैं।

  • यह वेब सर्वर गेटवे इंटरफेस की मदद से काम करता है, जो वेब सर्वर और एप्लिकेशन के बीच संचार का काम करता है।

ओपन वेब एप्लिकेशन सिक्योरिटी प्रोजेक्ट (OWASP) एक समुदाय है, जो वेब एप्लिकेशन के सुरक्षा उल्लंघनों को सूचीबद्ध करता है।

सुरक्षा उल्लंघनों

ओडब्ल्यूएएसपी के संबंध में, वेब अनुप्रयोगों से संबंधित मुद्दों और कैसे वेब 2 पी पर काबू पाने के बारे में नीचे चर्चा की गई है।

क्रॉस साइड स्क्रिप्टिंग

इसे XSS के नाम से भी जाना जाता है। यह तब होता है जब कोई एप्लिकेशन उपयोगकर्ता द्वारा आपूर्ति किए गए डेटा को लेता है और सामग्री को एन्कोडिंग या मान्य किए बिना उपयोगकर्ता के ब्राउज़र में भेजता है। हमलावर क्रॉस साइड स्क्रिप्टिंग का उपयोग करके कीड़े और वायरस को इंजेक्ट करने के लिए स्क्रिप्ट निष्पादित करते हैं।

web2py सभी प्रदान किए गए चर को रोकने के द्वारा XSS को रोकने में मदद करता है View

जानकारी का रिसाव

कभी-कभी, एप्लिकेशन आंतरिक कामकाज, गोपनीयता और कॉन्फ़िगरेशन के बारे में जानकारी लीक करते हैं। हमलावर इसका उपयोग संवेदनशील डेटा को भंग करने के लिए करते हैं, जिससे गंभीर हमले हो सकते हैं।

web2py टिकट प्रणाली द्वारा इसे रोकता है। यह सभी त्रुटियों को लॉग करता है और टिकट उस उपयोगकर्ता को जारी किया जाता है जिसकी त्रुटि दर्ज की जा रही है। ये त्रुटियां केवल व्यवस्थापक के लिए ही सुलभ हैं।

टूटा हुआ प्रमाणीकरण

खाता क्रेडेंशियल्स अक्सर संरक्षित नहीं होते हैं। हमलावर उपयोगकर्ता की पहचान चुराने के लिए पासवर्ड, प्रमाणीकरण टोकन पर समझौता करते हैं।

web2py प्रशासनिक इंटरफ़ेस के लिए एक तंत्र प्रदान करता है। जब ग्राहक "लोकलहोस्ट" नहीं होता है तो यह सुरक्षित सत्रों का उपयोग करने के लिए बाध्य करता है।

असुरक्षित संचार

कभी-कभी एप्लिकेशन नेटवर्क ट्रैफ़िक को एन्क्रिप्ट करने में विफल होते हैं। संवेदनशील संचार की सुरक्षा के लिए यातायात का प्रबंधन करना आवश्यक है।

web2py संचार के एन्क्रिप्शन प्रदान करने के लिए एसएसएल सक्षम प्रमाण पत्र प्रदान करता है। यह संवेदनशील संचार को बनाए रखने में भी मदद करता है।

URL एक्सेस में प्रतिबंध

वेब एप्लिकेशन आमतौर पर कुछ उपयोगकर्ताओं के लिंक और यूआरएल के प्रदर्शन को रोककर संवेदनशील कार्यक्षमता की रक्षा करते हैं। हमलावर कुछ सूचनाओं के साथ URL में हेरफेर करके कुछ संवेदनशील डेटा को नष्ट करने का प्रयास कर सकते हैं।

Wb2py में, एक URL दिए गए फ़ाइल के बजाय मॉड्यूल और फ़ंक्शन के लिए मैप करता है। इसमें एक तंत्र भी शामिल है, जो निर्दिष्ट करता है कि कौन से कार्य सार्वजनिक हैं और जिन्हें निजी रखा जाता है। यह समस्या को हल करने में मदद करता है।