【问题标题】:How to implement multiple POST methods in CherryPy如何在 CherryPy 中实现多个 POST 方法
【发布时间】:2019-05-29 21:16:02
【问题描述】:

我是cherryPy 的新手,我正在努力将GUI 与Python 函数进行通信,因为我使用的是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 文档。上面的代码有效,但这是一种非常粗略的方法,那么还有其他一种好的编码习惯吗?

【问题讨论】:

  • 如果您在谈论如何处理计数器值并调用不同的函数 w.r.t.也就是说,您需要通过一些您将获得的数据示例以及您想要实现的目标来分享这些功能是什么。
  • @HimanshuJain 我在问使用计数器调用不同的函数是否是一个好习惯?
  • 不同的方法可以有不同的URL。
  • @webKnjaZ 所以不同的 URL 需要映射到不同的类,比如 class StringGeneratorWebService(object) 在这种情况下?
  • 是的,如果您需要对对象使用不同的 HTTP 方法。另一种方式可能是遍历,这意味着类方法会自动按名称映射到 URL,但随后它们会接收所有 HTTP 方法。

标签: cherrypy


【解决方案1】:

文档有点混乱,但是如果你想让 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

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多