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

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

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

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। नए नियंत्रक में, यह एक FORM का निर्माण करना आवश्यक है, क्योंकि 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}}

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