PHP में आप केवल $_POST
POST के लिए और $_GET
GET (Query string) वेरिएबल्स के लिए उपयोग कर सकते हैं । पायथन में क्या समान है?
PHP में आप केवल $_POST
POST के लिए और $_GET
GET (Query string) वेरिएबल्स के लिए उपयोग कर सकते हैं । पायथन में क्या समान है?
जवाबों:
मान लें कि आप इसके साथ एक html फॉर्म पोस्ट कर रहे हैं:
<input type="text" name="username">
यदि कच्ची cgi का उपयोग कर रहे हैं :
import cgi
form = cgi.FieldStorage()
print form["username"]
यदि Django , Pylons , फ्लास्क या पिरामिड का उपयोग कर रहे हैं :
print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method
का उपयोग करते हुए TurboGears , Cherrypy :
from cherrypy import request
print request.params['username']
Web.py :
form = web.input()
print form.username
print request.form['username']
यदि चेरी या टर्बोगियर्स का उपयोग कर रहे हैं, तो आप अपने हैंडलर फ़ंक्शन को सीधे पैरामीटर लेते हुए भी परिभाषित कर सकते हैं:
def index(self, username):
print username
class SomeHandler(webapp2.RequestHandler):
def post(self):
name = self.request.get('username') # this will get the value from the field named username
self.response.write(name) # this will write on the document
तो आपको वास्तव में उन रूपरेखाओं में से एक को चुनना होगा।
import cgi
, यह नहीं है print form["username"].value
?
Bottle
कर रहा हूं जो मेरा मानना है कि उपयोग करता है wsgi
, क्या कोई उस परिदृश्य में उपयोग करने के लिए बराबर पोस्ट कर सकता है? उपरोक्त प्रतिक्रिया स्पष्ट स्पष्टीकरण है जो मैं भर में आया हूं, इसमें सिर्फ मेरा परिदृश्य शामिल नहीं है।
मैं जानता हूं कि यह एक पुराना सवाल है। फिर भी यह आश्चर्य की बात है कि कोई अच्छा जवाब नहीं दिया गया।
सबसे पहले सवाल फ्रेमवर्क का उल्लेख किए बिना पूरी तरह से मान्य है। संपर्क एक PHP भाषा तुल्यता है। यद्यपि पायथन में क्वेरी स्ट्रिंग मापदंडों को प्राप्त करने के कई तरीके हैं, फ्रेमवर्क चर केवल सुविधाजनक रूप से आबादी वाले हैं। PHP में, $_GET
और $_POST
सुविधा चर भी हैं। उन्हें क्रमशः QUERY_URI और php: // इनपुट से पार्स किया जाता है।
पायथन में, ये कार्य होंगे os.getenv('QUERY_STRING')
और sys.stdin.read()
। ओएस और एसईएस मॉड्यूल आयात करने के लिए याद रखें।
हमें यहां "सीजीआई" शब्द के साथ सावधान रहना होगा, खासकर जब दो भाषाओं और उनकी सामान्यताओं के बारे में बात करते हुए जब एक वेब सर्वर के साथ इंटरफेस होता है। 1. CGI, एक प्रोटोकॉल के रूप में, HTTP प्रोटोकॉल में डेटा ट्रांसपोर्ट मैकेनिज्म को परिभाषित करता है। 2. अजगर को अपाचे में सीजीआई-स्क्रिप्ट के रूप में चलाने के लिए कॉन्फ़िगर किया जा सकता है। 3. पायथन में CGI मॉड्यूल कुछ सुविधा कार्य प्रदान करता है।
चूंकि HTTP प्रोटोकॉल भाषा-स्वतंत्र है, और Apache का CGI एक्सटेंशन भी भाषा-स्वतंत्र है, इसलिए GET और POST पैरामीटर प्राप्त करना भाषाओं में केवल सिंटैक्स अंतर को सहन करना चाहिए।
यहाँ एक पायदान शब्दकोश को आबाद करने के लिए पायथन दिनचर्या है:
GET={}
args=os.getenv("QUERY_STRING").split('&')
for arg in args:
t=arg.split('=')
if len(t)>1: k,v=arg.split('='); GET[k]=v
और पोस्ट के लिए:
POST={}
args=sys.stdin.read().split('&')
for arg in args:
t=arg.split('=')
if len(t)>1: k, v=arg.split('='); POST[k]=v
अब आप निम्न के रूप में खेतों तक पहुँच सकते हैं:
print GET.get('user_id')
print POST.get('user_name')
मुझे यह भी बताना चाहिए कि CGI मॉड्यूल अच्छी तरह से काम नहीं करता है। इस HTTP अनुरोध पर विचार करें:
POST / test.py?user_id=6
user_name=Bob&age=30
उपयोग करने CGI.FieldStorage().getvalue('user_id')
से अशक्त सूचक अपवाद हो जाएगा क्योंकि मॉड्यूल नेत्रहीन POST डेटा की जांच करता है, इस तथ्य की अनदेखी करते हुए कि POST अनुरोध GET मापदंडों को भी ले जा सकता है।
AttributeError: 'NoneType' object has no attribute 'split'
प्रयोगCGI
Python
POST.get('user_name', 'default_value')
।
मुझे nosklo का उत्तर बहुत व्यापक और उपयोगी लगा है! उन लोगों के लिए, जो अपने आप की तरह, जो कच्चे अनुरोध डेटा को सीधे उपयोगी भी पा सकते हैं, मैं ऐसा करने का तरीका जोड़ना चाहूंगा:
import os, sys
# the query string, which contains the raw GET data
# (For example, for http://example.com/myscript.py?a=b&c=d&e
# this is "a=b&c=d&e")
os.getenv("QUERY_STRING")
# the raw POST data
sys.stdin.read()
http://www.myserver.com/cgi-bin/cgi.py/ThisIsMyMethod
। निम्नलिखित पर्यावरण चर संबंधित हैं: os.environ.get('PATH_INFO')
जिसे विधि नाम मिलता है (जैसे: / ThisIsMyMethod) और os.environ.get('SCRIPT_NAME')
जो वेब होस्ट के रूट फ़ोल्डर से स्क्रिप्ट को रास्ता प्रदान करता है (जैसे: /cgi-bin/cgi.py)। मेरे मामले में, QUERY_STRING रिक्त है, क्योंकि मैं POST का उपयोग कर रहा हूं।
वे CGI फ़ील्डस्टोर ऑब्जेक्ट में संग्रहीत हैं।
import cgi
form = cgi.FieldStorage()
print "The user entered %s" % form.getvalue("uservalue")
यह कुछ हद तक इस बात पर निर्भर करता है कि आप सीजीआई ढांचे के रूप में क्या उपयोग करते हैं, लेकिन वे कार्यक्रम के लिए सुलभ शब्दकोशों में उपलब्ध हैं। मैं आपको डॉक्स की ओर इशारा करता हूं, लेकिन मैं अभी python.org से नहीं मिल रहा हूं। लेकिन mail.python.org पर यह नोट आपको पहला पॉइंटर देगा । अधिक के लिए CGI और URLLIB पायथन के लिबास देखें।
अपडेट करें
ठीक है, उस लिंक का भंडाफोड़ हुआ। यहाँ मूल wsgi रेफरी है
पायथन केवल एक भाषा है, GET और POST डेटा प्राप्त करने के लिए, आपको पायथन में लिखा गया एक वेब फ्रेमवर्क या टूलकिट चाहिए। Django एक है, जैसा कि चार्ली बताते हैं, cgi और urllib मानक मॉड्यूल अन्य हैं। इसके अलावा उपलब्ध टर्बोगियर्स, पाइलन्स, चेरीपी, वेबहोम, mod_python, fastcgi, इत्यादि हैं।
Django में, आपके व्यू फ़ंक्शंस में एक अनुरोध तर्क मिलता है जिसमें request.GET और request.POST होता है। अन्य ढांचे इसे अलग तरीके से करेंगे।