我是CherryPy的新手,我正在与Python函数通信GUI,因为我正在使用CherryPy。我遵循了this cherryPy tutorial。在这种情况下,POST方法不会做很多事情,只是返回一些字符串,但是在我的情况下,可以有许多函数可以使用POST与GUI进行通信。我尝试过:
@cherrypy.expose
class StringGeneratorWebService(object):
@cherrypy.tools.accept(media='text/plain')
def GET(self):
return cherrypy.session['mystring']
def POST(self, counter,param):
if counter == 1:
function1(param) # call a python function
elif counter == 2:
function2(param)
elif counter == 3:
function3(param)
def PUT(self, another_string):
cherrypy.session['mystring'] = another_string
def DELETE(self):
cherrypy.session.pop('mystring', None)
在以上POST方法中的代码中,counter和Param是来自AJAX请求的参数。根据计数器值,我正在调用相应的函数。 Param可以是一个很大的JSON文档。上面的代码有效,但是这是非常粗糙的方法,所以还有其他方法是一种好的编码实践吗?
答案 0 :(得分:0)
文档有些混乱,但是如果您希望CherryPy基于HTTP方法为您调用不同的函数,则只需实现GET
/ POST
Python方法。如果您不在乎POST URL上的GET请求,则可以使用@cherrypy.expose
模式。
如果您查看tutorial source for forms,那么有关公开POST方法有一些帮助:
[使用HTTP POST方法]不会更改应用程序的公开方法,因为CherryPy的处理方式相同,并使用公开的处理程序参数来处理查询字符串(键,值)对。
修改处理程序以包含该方法可以使这一点变得清楚:
class StringGenerator(object):
@cherrypy.expose
def generate(self, length=8):
return cherrypy.request.method + ' ' + ''.join(random.sample(string.hexdigits, int(length)))
现在我可以使用curl进行GET,然后进行POST请求:
$ curl "http://example.com:8888/generate?length=8" # does a GET
GET 78A35e4f
$ curl "http://example.com:8888/generate" --data "length=8" # does a POST
POST 14d0D92c