如何在CherryPy中实现多种POST方法

时间:2019-01-03 09:39:38

标签: cherrypy

我是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文档。上面的代码有效,但是这是非常粗糙的方法,所以还有其他方法是一种好的编码实践吗?

1 个答案:

答案 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