网络开发中使用Cherrypy避免重定向仍用HTTP调用其他函数
我进行了一些网络开发工作。因为雇主设置了一些限制,所以我得使用 cheetah 和 cherrypy。我有这样的表单,在提交表单时会运行一个函数,并且从这个函数中,我通过 HTTPRedirect 来调用另一个函数。我期望的是能够在不进行重定向的情况下调用它。这就是一个例子。

@cherrypy.expose
def onSubmit(**kwargs):
##Do something
##Do something
##Do something
引发 cherrypy.HTTPRedirect 并指向 "/some_other_location/doSomethingElse?arg1=x&arg2=y"
现在我想在运行第二个函数之后做更多的事情,然而我做不到。因为自从我进行了代码重定向之后,就到此结束了。所以我的问题是,是否存在一种方法,可以在不进行重定向的情况下运行其他函数,同时仍然使用 HTTP。在 javascript 中,我会使用 AJAX 并将 url 传递给它,将输出存储在加载器变量中,但我不知道如何使用 cherrypy 来执行此操作。
最佳答案
不使用重定向的方式,而是运用其中一个标准的 Python 库来获取 HTTP 数据。
或其他可以说更好的第三方:
另外,要记得把相对的 url 转化为绝对的 url,即便它是 localhost 。
为了能让您开始入门,这里有一个代码片段,它是使用 urllib2 从您的示例中派生出来的,并且未经测试:
import urllib2
@cherrypy.expose
def onSubmit(**kwargs):
##Do something
##Do something
##Do something
url 为 "http://localhost/some_other_location/doSomethingElse",其中包含参数 arg1=x 以及 arg2=y 。
try:
使用 urllib2 库打开指定的 url 后,读取其内容并赋值给 data 变量。
except urllib2.HTTPError, e:
引发 cherrypy.HTTPError,其状态码为 500,错误信息为"HTTP error: %d",其中的 %d 被 e.code 所替代。
except urllib2.URLError, e:
引发 cherrypy.HTTPError,状态码为 500,内容为“网络错误:%s”,其中 %s 被替换为 e.reason.args[1]的值
##Do something with the data
使用 cherry.py 来调用函数,关于这方面的介绍就到此为止啦,希望能对你有所帮助!