在PHP中,您可以使用$_POST
POST和$_GET
GET(查询字符串)变量.什么是Python中的等价物?
假设你发布了一个html表单:
如果使用原始cgi:
import cgi form = cgi.FieldStorage() print form["username"]
如果使用Django,Pylons,Flask或Pyramid:
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
Werkzeug:
print request.form['username']
如果使用Cherrypy或Turbogears,您还可以直接使用参数定义处理函数:
def index(self, username): print username
Google App Engine:
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()
我知道这是一个老问题.但令人惊讶的是,没有给出好的答案.
首先,问题是完全有效的,没有提到框架.CONTEXT是PHP语言等价.虽然有很多方法可以在Python中获取查询字符串参数,但框架变量只是方便地填充.在PHP中,$ _GET和$ _POST也是便利变量.它们分别从QUERY_URI和php://输入解析.
在Python中,这些函数将是os.getenv('QUERY_STRING')和sys.stdin.read().记得导入os和sys模块.
我们在这里必须小心使用"CGI"这个词,尤其是在谈论两种语言时,以及在与Web服务器连接时的共性.1. CGI作为协议定义了HTTP协议中的数据传输机制.2. Python可以配置为在Apache中作为CGI脚本运行.3. Python中的cgi模块提供了一些便利功能.
由于HTTP协议是与语言无关的,并且Apache的CGI扩展也与语言无关,因此获取GET和POST参数应仅具有跨语言的语法差异.
这是填充GET字典的Python例程:
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:
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参数的事实.
它们存储在CGI fieldstorage对象中.
import cgi form = cgi.FieldStorage() print "The user entered %s" % form.getvalue("uservalue")