从WSGI访问POST数据

时间:2009-02-09 23:23:20

标签: python python-3.x wsgi

我似乎无法弄清楚如何使用WSGI访问POST数据。我在wsgi.org网站上尝试了这个例子,它没有用。我现在正在使用Python 3.0。请不要推荐WSGI框架,因为这不是我想要的。

我想弄清楚如何将它放入fieldstorage对象。

6 个答案:

答案 0 :(得分:29)

假设您正尝试将POST数据放入FieldStorage对象中:

# env is the environment handed to you by the WSGI server.
# I am removing the query string from the env before passing it to the
# FieldStorage so we only have POST data in there.
post_env = env.copy()
post_env['QUERY_STRING'] = ''
post = cgi.FieldStorage(
    fp=env['wsgi.input'],
    environ=post_env,
    keep_blank_values=True
)

答案 1 :(得分:22)

body= ''  # b'' for consistency on Python 3.0
try:
    length= int(environ.get('CONTENT_LENGTH', '0'))
except ValueError:
    length= 0
if length!=0:
    body= environ['wsgi.input'].read(length)

请注意,WSG尚未完全为Python 3.0指定,并且许多流行的WSGI基础结构尚未转换(或已经转换为2to3d,但未经过适当测试)。 (即使wsgiref.simple_server也不会运行。)你现在正忙着在3.0上做WSGI。

答案 2 :(得分:4)

这对我有用(在Python 3.0中):

import urllib.parse

post_input = urllib.parse.parse_qs(environ['wsgi.input'].readline().decode(),True)

答案 3 :(得分:2)

更短

l = int(env.get('CONTENT_LENGTH')) if env.get('CONTENT_LENGTH') else 0
body = env['wsgi.input'].read(l) if l > 0 else ''

此代码适用于制作。

答案 4 :(得分:0)

我建议你看看一些框架如何做一个例子。 (我不推荐任何一个,只是以它们为例。)

以下是Werkzeug的代码:

http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/wrappers.py#L150

调用

http://dev.pocoo.org/projects/werkzeug/browser/werkzeug/utils.py#L1420

总结这里有点复杂,所以我不会。

答案 5 :(得分:0)

我遇到了同样的问题,我花了一些时间研究解决方案。
包含详细信息和资源的完整答案(因为这里接受的答案在 python3 上对我不起作用,在 env 库等中有许多错误需要纠正):

NullReferenceException: Object reference not set to an instance of an object.