如何在CherryPy中定义http OPTIONS方法?

时间:2012-01-19 21:40:43

标签: python rest cherrypy

我的目标是使用CherryPy(wsgi)+ uWSGI + Nginx定义RESTful api。我想知道如何处理OPTIONS方法,正如我在#python上建议的那样。我被告知,实现此方法的处理程序将有助于我的api调用者了解支持哪些方法,以及哪些方法不支持。

这是我到目前为止所得到的:


#!/usr/bin/env python

import cherrypy

# modules used for data access
import nosql
import dao

class Product(object):

    exposed = True

    def GET(self, key, *args, **kwargs):
        try:
            p = Product(nosql.get(key))
            return p.json
        except:
            # return 500 error with traceback if debug
            pass

    def POST(self, *args, **kwargs):
        try:
            p = dao.Product(*args, **kwargs)
            k = nosql.generate_key(Product.__name__)
            nosql.set(k,str(p))
        except:
            # return 500 error with traceback if debug
            pass

    def OPTIONS(self, *args, **kwargs):
        """
        The question is, what to return here?  I'm looking 
        at the following rfc:

        http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
        """
        return "GET, POST"

conf = {
    '/': {
        'request.dispatch':cherrypy.dispatch.MethodDispatcher(),
    },
}

application = cherrypy.tree.mount(Product, config=conf)

1 个答案:

答案 0 :(得分:2)

OPTIONS响应的主体并不像标题那样重要,当然也不像指定的那样重要。如你所述,大多数客户真的只对这些方法感兴趣。这些在“允许”响应标头中指定,当您使用MethodDispatcher时,CherryPy会自动发出这些标头。您可能返回的任何其他内容都取决于您是否能够满足客户应用程序的需求。