如何在Google App Engine中实现Rails风格的before_filter?

2 投票
2 回答
560 浏览
提问于 2025-04-16 01:01

这个应用程序是一个基本的WSGI应用。我只是想在处理请求之前调用一个函数。

我希望能有点像Rails中的before_filter那样的功能。

谢谢。

2 个回答

1

你可以把你的“前置”功能安装成WSGI中间件。App Engine使用WSGI,实际上现在几乎所有的Python网络框架和服务器都是这样做的。这里有一个例子,它是在处理程序运行之后做事情,但其实在它之前做事情更简单……无论如何,你的中间件是“包裹”住了实际应用的WSGI应用;所以当然你可以在处理之前、之后,或者替代它做事情;-)。

想了解更多关于WSGI的内容,可以查看这里

1

我会使用装饰器,这和Rails中的before_filter不完全一样,但可能对你来说已经足够好了:

def before_filter(fn):
    def inner_function(self):
        # do stuff before
        return fn(self)
    return inner_function

class MainPage(webapp.RequestHandler):

    @before_filter
    def get(self):
        self.response.headers['Content-Type'] = 'text/plain'
        self.response.out.write('Hello, webapp World!')

撰写回答