2

我想使用WsgiService库在Google App Engine (GAE)上编写 REST 服务。我最喜欢的两个功能是它根据请求路径结尾的文件名自动输出某种格式(JSON、XML、...)的方式。它还能够使用正则表达式直接将部分路径映射到变量。

官方教程使用了 Python 2.5 中不可用的类装饰器,因此 GAE 会抛出一个无效的语法异常。堆栈溢出问题Python 2.5 中的类装饰器?提到类装饰器只是语法糖,可以用向后兼容的代码替换。wsgiservice 文档也没有提到严格要求 Python 2.6。不幸的是,我无法替换类装饰器以使其在 GAE 上运行。

是否可以将教程中的类装饰器替换为使用 Python 2.5 运行?如果没有,是否有任何其他库在与 GAE 兼容的同时提供上述功能?

4

2 回答 2

2

我没有使用过 WsgiService,但 Python 2.6 中的装饰器实际上只是具有特殊语法的函数调用。因此,如果您看到以下代码:

@MyDecorator
def myfunction():
    mycode

它等价于:

def myfunction():
    mycode
myfunction = MyDecorator(myfunction)

因此,如果您不喜欢以这种风格编写所有代码,它应该仍然可以工作(假设其他代码兼容 Python 2.5)。

为了清楚说明您在做什么,我可能会将装饰器放在上面的评论中,例如:

# @MyDecorator

编辑:如果装饰器接受参数,它必须返回一个函数,并且函数在被包装的函数的情况下被调用:

@MyDecorator(arg1, arg2)
def myfunction():
    mycode

相当于这个:

def myfunction():
    mycode
myfunction = MyDecorator(arg1, arg2)(myfunction)
于 2011-06-03T07:55:41.400 回答
0

WsgiService 的 PKG-INFO 文件包含以下行

Classifier: Programming Language :: Python :: 2.6

因此不适合 GAE (Python 2.5)。

请求的功能可以通过不同的 URL 映射来实现,如下所述: http ://code.google.com/appengine/docs/python/tools/webapp/running.html#URL_Mappings

于 2011-06-03T09:49:15.110 回答