如何在Twisted中处理POST请求

时间:2016-05-23 19:03:54

标签: html python-3.x post twisted

我有一个非常简单的扭曲脚本,您可以在其中处理POST请求:

class FormPage(Resource):
    isLeaf = True
    def render_GET(self, request):
        return b"""<html><body><form method="POST"><input name="form-field" type="text" /></form></body></html>"""

    def render_POST(self, request):
        return '<html><body>You submitted: %s</body></html>' % (cgi.escape(request.args["form-field"][0]),)

factory = Site(FormPage())
reactor.listenTCP(80, factory)
reactor.run()

但无论何时我运行并填写方框,我都会得到错误:

builtins.KeyError: 'form-field'

有人可以告诉我为什么会这样吗?谢谢!

2 个答案:

答案 0 :(得分:0)

我使用request.content.read()

找到了一个解决方案
def render_POST(self, request):
    return '<html><body>You submitted: %s</body></html>' % (request.content.read())

它可能不是最好的解决方案,但它对我有用。请评论如果您有更好的解决方案,谢谢!

答案 1 :(得分:0)

找到解决方案。我被困在这里很长一段时间做了&#34; O&#39; Reily Twisted&#34;在Python3中。这对我有用:

def render_POST(self, request):
    return_value = "<html><body>You submitted: %s </body></html>" % (cgi.escape(str(request.args[b"form-field"][0], 'utf-8')))
    return str.encode(return_value)

我想我遇到麻烦的第一个原因是可以在python代码中提取的表单字段是字节字符串。只有在我检查了请求之后我意识到了这一点。我想在python2中,它是常规字符串。