在python中仅接受POST请求中的参数

在python中仅接受POST请求中的参数,python,post,cgi,Python,Post,Cgi,是否有办法只接受POST请求中的参数? 如果我使用cgi模块中的cgi.FieldStorage(),它将接受GET和POST请求中的参数。从文档中,我认为您可以执行以下操作: form = cgi.FieldStorage() if isinstance(form["key"], cgi.FieldStorage): pass #handle field 此代码未经测试。默认情况下,cgi模块中的大多数内容会合并os.environ['QUERY\u STRING']和sys.st

是否有办法只接受POST请求中的参数?
如果我使用cgi模块中的cgi.FieldStorage(),它将接受GET和POST请求中的参数。

从文档中,我认为您可以执行以下操作:

form = cgi.FieldStorage()
if isinstance(form["key"], cgi.FieldStorage):
     pass #handle field

此代码未经测试。

默认情况下,
cgi
模块中的大多数内容会合并
os.environ['QUERY\u STRING']
sys.stdin
(采用
os.environ['CONTENT\u TYPE']
建议的格式)。因此,简单的解决方案是修改
os.environ
,或者提供一个没有查询字符串的替代方案

# make a COPY of the environment
environ = dict(os.environ)
# remove the query string from it
del environ['QUERY_STRING']
# parse the environment
form = cgi.FieldStorage(environ=environ)
# form contains no arguments from the query string!
伊格纳西奥·巴斯克斯·艾布拉姆斯建议完全避免使用
cgi
模块;现代python web应用程序通常应该遵循该接口。这可能看起来像:

import webob
def application(environ, start_response):
    req = webob.Request(environ)
    if req.method == 'POST':
        # do something with req.POST

# still a CGI application:
if __name__ == '__main__':
    import wsgiref.handlers
    wsgiref.handlers.CGIHandler().run(application)

我可以建议您首先避免使用CGI吗?您是指python CGI模块吗?如果是,没有问题避免它。我只是想要一种方法来实现我的要求。是的,这是可能的,但实现的方法取决于您使用的web框架。这似乎是一种拒绝“key”参数的方法,我不想要这种方法。我想只接受来自POST请求的参数,而不接受GET。这应该只处理POST请求。GET请求中的URL参数使用
cgi.MiniFieldStorage
。它可能不是故障安全的(例如,当您遇到带有URL参数的POST请求时),但它是一个快速修复方法。嗯……我尝试过(POST和GET请求),但它不起作用,我什么也得不到。太好了!它们都是很好的方法,但我不喜欢在这种情况下使用外部模块,所以我将使用第一种方法。谢谢!那太不幸了。在处理web应用程序时,大量的工作完全是样板
webob
是wsgi无框架框架中最薄的一层(它甚至没有
cgi
那么神奇,但通常更有用)。你真的应该在一个坚实的框架上构建你的应用程序,并专注于你试图解决的实际问题