如何在Python中处理POST和GET变量?

时间:2009-01-21 03:59:04

标签: python post get

在PHP中,您可以使用$_POST进行POST,使用$_GET进行GET(查询字符串)变量。 Python中的等价物是什么?

6 个答案:

答案 0 :(得分:233)

假设您要发布一个html表单:

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

如果使用raw cgi

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

如果使用DjangoPylonsFlaskPyramid

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

使用TurbogearsCherrypy

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

所以你真的必须选择其中一个框架。

答案 1 :(得分:31)

我发现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()

答案 2 :(得分:31)

我知道这是一个老问题。但令人惊讶的是没有给出好的答案。

首先,问题完全有效,没有提到框架。 CONTEXT是PHP语言等价。虽然有很多方法可以在Python中获取查询字符串参数,但框架变量只是方便地填充。在PHP中,$ _GET和$ _POST也是便利变量。它们分别从QUERY_URI和php://输入解析。

在Python中,这些函数将是os.getenv(&#39; QUERY_STRING&#39;)和sys.stdin.read()。记得导入os和sys模块。

我们必须小心使用&#34; CGI&#34;在这里,尤其是在与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(&#39; user_id&#39;)将导致空指针异常,因为模块盲目地检查POST数据,忽略了POST请求也可以携带GET参数的事实。

答案 3 :(得分:27)

它们存储在CGI fieldstorage对象中。

import cgi
form = cgi.FieldStorage()

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

答案 4 :(得分:3)

它在某种程度上取决于您作为CGI框架使用的内容,但它们可以在程序可访问的字典中使用。我会指出你的文档,但我现在还没有通过python.org。但是this note on mail.python.org will give you a first pointer。查看CGI和URLLIB Python库以获取更多信息。

<强>更新

好的,那个链接被破坏了。这是basic wsgi ref

答案 5 :(得分:0)

Python只是一种语言,要获得GET和POST数据,您需要一个用Python编写的Web框架或工具包。正如Charlie所指出的那样,Django是其中之一,cgi和urllib标准模块是其他模块。还有Turbogears,Pylons,CherryPy,web.py,mod_python,fastcgi等等。

在Django中,您的视图函数接收一个请求参数,该参数具有request.GET和request.POST。其他框架将采用不同的方式。