Cherrypy挂在表单pos上

2024-05-16 19:37:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试删除一个遗留的python框架(webware0.8.1)并在其之上添加cherrypy3.1.2层。我没有把所有的webware页面转换成cherrypy页面,而是通过webware处理它,然后像这样传递给cherrypy。在

def default(self, url, *suburl, **kwarg):    
  ...snip...
  strmout = DispatcherIO()
  request = HTTPRequest(local_req)
  transaction = self.create_transaction(request)
  response = self.create_response(transaction, strmout)
  transaction.setServlet(servlet)
  transaction.awake()
  transaction.respond()
  return str(strmout)

这对任何不包含帖子的页面都很有效。但对于任何包含登录等帖子的页面,cherrypy会挂在:

^{pr2}$

这将调用FieldStorage,它将调用parant的构造函数cgi.FieldStorage公司. 这就是它最终挂起的地方。在

但是,如果我在终端上按ctrl-c,它将继续处理,然后在页面成功加载后终止。所以在登录页面上,我会点击“登录”,它会挂起,然后在终端上按ctrl-c,它会让我登录,然后关闭cherrypy。在

我发现如果我用切里皮。引擎。启动它不会启动任何信号处理程序,而不是快速启动。在这种情况下发生的情况将导致类似于之前的行为,但是cherrypy将继续运行。在

是什么导致了这个问题?我真的很感激你的帮助。干杯。在


Tags: self终端responserequestcreate情况页面帖子
1条回答
网友
1楼 · 发布于 2024-05-16 19:37:50

我对Webware并没有真正的经验,但是基于您代码的外观,Webware正在尝试使用cgi.FieldStorage公司检索字段变量,但FieldStorage无法获取长度,或者获取的长度不正确(可能是因为Webware为获取Content-length标头所做的任何操作在CherryPyWSGi环境中都不起作用—默认实现检索HTTP_CONTENT_LENGTH环境变量,Webware可能会执行类似的低级操作),因此它正在读取并挂起。我在使用CGI时也经常遇到类似的问题。在

最好的解决办法是不使用cgi.FieldStorage公司. 如果所讨论的HTTPRequest对象来自Webware,我的建议是要么将您的站点完全移植到CherryPy(或其他一些Web框架),要么只在其本机环境中使用Webware。黑客攻击可能是可能的,但WSGI与Webware自身应用服务器的本机环境非常不同。在

相关问题 更多 >