كيف بعد الحصول على التعامل مع المتغيرات في الثعبان ؟

StackOverflow https://stackoverflow.com/questions/464040

  •  19-08-2019
  •  | 
  •  

سؤال

في PHP يمكنك فقط استخدام $_POST من أجل المنصب ، $_GET من أجل الحصول على (Query string) المتغيرات.ما يعادل في الثعبان ؟

هل كانت مفيدة؟

المحلول

لنفترض أنك تنشر شكل أتش تي أم أل مع هذا:

<input type="text" name="username">

إذا باستخدام CGI الخام :

import cgi
form = cgi.FieldStorage()
print form["username"]

إذا باستخدام جانغو و <لأ href = "http://pylonshq.com/" يختلط = " noreferrer "> أبراج أو قارورة أو <وأ href =" HTTP: //www.pylonsproject. غزاله / المشروعات / الهرم / عن "يختلط =" noreferrer "> الهرم :

print request.GET['username'] # for GET form method
print request.POST['username'] # for POST form method

Turbogears و <لأ href = "http://www.cherrypy.org/" يختلط = "noreferrer "> Cherrypy :

from cherrypy import request
print request.params['username']

Web.py :

form = web.input()
print form.username

WERKZEUG :

print request.form['username']

إذا باستخدام Cherrypy أو Turbogears، يمكنك أيضا تحديد وظيفة معالج الخاص بك أخذ المعلمة مباشرة:

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

وهكذا كنت حقا سيكون لديك لاختيار واحد من هذه الأطر.

نصائح أخرى

ولقد وجدت الجواب 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()

وأعرف أن هذا هو السؤال القديم. ومع ذلك، فإنه من المستغرب أن لا إجابة جيدة أعطيت.

وقبل كل شيء مسألة غير صالحة تماما من دون الإشارة إلى الإطار. في السياق هو التكافؤ لغة PHP. على الرغم من أن هناك العديد من الطرق للحصول على معلمات سلسلة الاستعلام في بيثون، والمتغيرات إطار مجرد مريح بالسكان. في PHP، _GET $ و_POST $ أيضا المتغيرات الراحة. يتم تحليل أنها من QUERY_URI و PHP: // المدخلات على التوالي

في بيثون، سيتم os.getenv هذه الوظائف ( 'QUERY_STRING') وsys.stdin.read (). تذكر أن استيراد نظام التشغيل وتميز الكلية وحدات.

وعلينا أن نكون حذرين مع كلمة "CGI" هنا، وخصوصا عندما نتحدث عن لغتين والقواسم المشتركة الخاصة بهم عند التواصل مع خادم الويب. 1. CGI، وبروتوكول، ويحدد آلية نقل البيانات في بروتوكول HTTP. يمكن تكوين 2. بيثون لتشغيل وCGI النصي في Apache. 3. وحدة المجموعة الاستشارية لاندونيسيا في بيثون تقدم بعض الوظائف الراحة.

ومنذ بروتوكول HTTP هو، بلغة مستقلة، وهذا التمديد CGI أباتشي هو أيضا على اللغة مستقلة، والحصول على المعلمات GET و POST يجب أن يتحمل الاختلافات في بناء الجملة الوحيدة عبر لغات.

وهنا الروتين بيثون لنشر القاموس GET:

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')

ويجب أن نشير أيضا إلى أن وحدة المجموعة الاستشارية لاندونيسيا لا يعمل بشكل جيد. النظر في هذا الطلب HTTP:

POST / test.py?user_id=6

user_name=Bob&age=30

وعن طريق cgi.FieldStorage (). getvalue ( 'USER_ID') سوف يؤدي إلى استثناء مؤشر فارغة لأن وحدة عمياء يتحقق بعد البيانات، وتجاهل حقيقة أن طلب POST يمكن أن تحمل الحصول على المعلمات أيضا.

ويتم تخزينها في كائن CGI fieldstorage.

import cgi
form = cgi.FieldStorage()

print "The user entered %s" % form.getvalue("uservalue")

إلى حد ما يعتمد على ما كنت تستخدم CGI الإطار ، ولكنها متاحة في القواميس الوصول إلى البرنامج.أود أن أشير لك إلى مستندات, ولكن أنا ليس من خلال الحصول على python.org الحق الآن.ولكن هذه المذكرة على mail.python.org سوف تعطيك المؤشر الأول.انظر CGI و URLLIB الثعبان يبس أكثر.

التحديث

حسنا هذا الرابط ضبطت.هنا الأساسية wsgi ref

وبيثون ليست سوى لغة، للحصول على الحصول على البيانات وظيفة، كنت في حاجة الى إطار الشبكة أو أدوات مكتوبة في بيثون. جانغو واحدة، كما يشير تشارلي بها، والمجموعة الاستشارية لاندونيسيا وحدات قياسية urllib آخرون. كما تتوفر Turbogears، أبراج، CherryPy، web.py، mod_python، fastcgi، الخ، الخ.

في جانغو، تتلقى وظائف وجهة نظركم حجة الطلب الذي request.GET وrequest.POST. وأطر أخرى تفعل ذلك بشكل مختلف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top