如何使用金字塔读取http post参数?

edb*_*ras 3 python-3.x pyramid

如何使用金字塔读取http post参数?我知道在参数涉及一个json的情况下该怎么做,但是如果参数涉及一个简单的key = value对,我应该如何读取呢?http发布请求示例(使用hurl.it进行测试):

Accept: */*
Accept-Encoding: gzip, deflate
Content-Length: 16
Content-Type: application/x-www-form-urlencoded
Host: test.bydehand.com
User-Agent: runscope/0.1

id=tr_uH4yPGBahB 
Run Code Online (Sandbox Code Playgroud)

如果我在代码中执行打印'request.json_body',它会抱怨,可能是因为它不是有效的json:

  File "/home/develop/app/daisy/payment/payment_view.py", line 88, in payment_webhook
    logger.debug("Receiving a webhook payment request body: [%s]", str(request.json_body))
  File "/home/develop/env/lib/python3.4/site-packages/pyramid/request.py", line 237, in json_body
    return json.loads(text_(self.body, self.charset))
  File "/usr/lib64/python3.4/json/__init__.py", line 318, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python3.4/json/decoder.py", line 343, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python3.4/json/decoder.py", line 361, in raw_decode
    raise ValueError(errmsg("Expecting value", s, err.value)) from None
Run Code Online (Sandbox Code Playgroud)

如何读取这些键/值对并将它们放入字典?

Ant*_*air 6

request.body包含原始身体。request.POST是一个MultiDict 包含解析值的。

在您的情况下,request.POST['id']将包含该值。

您可以使用request.POST.get('id')request.POST.getall('id')如果不确定该值是否存在或是否可能存在多次。