如何在Bottle中的每个请求上重置自定义请求属性?

时间:2016-10-25 14:05:32

标签: python python-3.4 bottle

这是我的插件的简化版本:

var CustomClassName = "FirstClass"

class CustomClassName { // the name of this class should be "FirstClass" now.
    init() {
    }
}

它适用于第一个请求,但随后的所有请求都失败:

class var CustomClassName = aVariable {

如何在每个请求中重置class MyPlugin(object): ''' My plugin. ''' api = 2 def __init__(self): self.time = datetime.now() def apply(self, callback, route): request.my_attr = self.time @wraps(callback) def wrapper(*args, **kwargs): cb_response = callback(*args, **kwargs) return cb_response # Forget any cached values. route.reset() # Replace the route callback with the wrapped one. return wrapper my_plugin = MyPlugin() @route('/my_route', method=['GET', 'POST'], apply=[my_plugin]) def my_route(): """ Http Handler. """ response.content_type = 'text/txt;' time = request.my_attr print(time) run(host=HOST, port=PORT, debug=DEBUG, quiet=QUIET)

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你的最终目标是什么,或者你的意思是“在每个请求上重置request.my_attr”(因为在别处你提到“缓存值”,这意味着你打算做一些缓存)。但这条线似乎很清楚

request.my_attr = self.time

是在错误的地方。您可能希望将其移动到wrapper函数中,因为(可能)然后意图是在每个请求上运行该行:

    @wraps(callback)
    def wrapper(*args, **kwargs):
        request.my_attr = self.time
        cb_response = callback(*args, **kwargs)
        return cb_response

我不确定这对我有意义,但我不知道你的目标是什么,所以也许它确实是你想要的。无论如何,将行移动到wrapper会纠正HTTP 500.希望有所帮助!如果没有,请添加一两行描述您要完成的任务,我会尽力帮助。