我实例化并注册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的自身对象,什么也没看到。
答案 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)