如何在电路中获取POST数据(Python)?

时间:2017-02-26 02:28:55

标签: python post python-3.5 circuits-framework

我实例化并注册WebManager作为我的应用程序的一部分。我正在一起运行工作流程和Web应用程序。除了获取POST数据外,一切正常。

class WebSite(Controller):
    def index(self):
        return "Hello World!"

    def detail(self, id):
        return "Web ID: {}".format(id)


class WebService(Controller):

    channel = "/WebService"

    def POST(self, *args, **kwargs):
        return str(args) + ' ' + str(kwargs) + ' ' + 'Why are these empty?'


class WebManager(Component):
    def init(self):
        Server(('0.0.0.0', 80)).register(self)
        WebSite(self).register(self)
        WebService(self).register(self)

使用以下内容致电:

import requests

r = requests.get('http://localhost')
print(r.text)
# Output: Hello World!

r = requests.get('http://localhost/detail?id=12')
print(r.text)
# Output: Web ID: 12

r = requests.post('http://localhost/WebService', json={'bob': 1, 'joe': {'blue': 43}})
print(r.text)
# Output: () {} Why are these empty?

我经历过文档,无法弄清楚如何获取帖子的正文数据。我以为它会作为其中一个参数传入。我也在PyCharm调试器中停了下来,查看了WebService的自身对象,什么也没看到。

1 个答案:

答案 0 :(得分:1)

为什么你在问这个问题之后总能找到答案?

当POST方法执行时,Controller会有一个.request.body属性。这是一个io.BytesIO对象,因此读取文件并获取发送的字节。

class WebService(Controller):

    channel = "/WebService"

    def POST(self):
        # I'm using JSON, so decoding the bytes to UTF-8 string to load
        data = json.loads(self.request.body.read().decode('UTF-8'))
        return 'Data: {}'.format(data)