【问题标题】:How to Handle POST requests in Twisted如何在 Twisted 中处理 POST 请求
【发布时间】:2016-09-20 18:48:44
【问题描述】:

我有一个非常简单的扭曲脚本,您可以在其中处理 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'

谁能告诉我这是为什么?谢谢!!

【问题讨论】:

    标签: html python-3.x post twisted


    【解决方案1】:

    我找到了使用 request.content.read() 的解决方案

    def render_POST(self, request):
        return '<html><body>You submitted: %s</body></html>' % (request.content.read())
    

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

    【讨论】:

      【解决方案2】:

      找到了解决方案。我在 Python3 中做“O'Reily Twisted”时被困在这里很长一段时间。这对我有用:

      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 中,它是常规字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-03
        • 1970-01-01
        • 1970-01-01
        • 2015-06-17
        • 2012-10-08
        • 1970-01-01
        • 2015-07-13
        • 1970-01-01
        相关资源
        最近更新 更多