代码之家  ›  专栏  ›  技术社区  ›  edbras

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

  •  4
  • edbras  · 技术社区  · 6 年前

    如何使用金字塔读取http post参数? 我知道如果参数涉及一段json,我应该怎么做,但是如果参数涉及一个简单的键=值对,我应该如何读取它? http post请求示例(使用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 
    

    如果我执行打印请求。json\u 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
    

    如何读取这些键/值对并将其放入dict中?

    1 回复  |  直到 6 年前
        1
  •  7
  •   Steve Piercy    6 年前

    request.body 包含原始正文。 request.POST 是一个 MultiDict 包含已解析值的。

    就你而言, request.POST['id'] 将包含该值。

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