如何强制webapp2_cached_property重新评估

时间:2015-07-05 21:35:29

标签: python forms google-app-engine caching webapp2

我知道webapp2_cached_property在第一次调用之后用数据替换了一个方法,因此我的问题出现了。

我有一个多语言网站,我正在使用表单来构建一些简单的选择菜单。选择菜单是改变语言的数据。显然,如果用户更改系统上的语言,我想重建表单。但是,我不想删除webapp2_cached_property,因为它会在每次用户调用相同的URL时重建表单,这会降低系统的速度。因此,有人知道强制webapp2_cached_property按需重新评估的方法,例如:当客户改变语言。目前,我使用所选语言中的所有其他内容,但使用默认语言中的选择数据。任何沮丧和肮脏都会做!啊,是的,这只发生在生产而不是开发服务器上......

class HomeRequestHandler(BaseHandler):
    """
    Handler to show the home page
    """

    def get(self):
        params = {}
        params['products'] = []
        params['max_searches'] = 1
        params['user_search_count'] = 0

       return self.render_template('index.html', **params)

    @webapp2.cached_property
    def form(self):
        import product.product_data.forms as forms
        return forms.ProductForm(self)

好的,我已经尝试了以下但仍然没有改变生产中的语言...

将此添加到我的基本处理程序 - 它正在运行!

if hasattr(self, 'form'):
        if self.locale != self.oldLocale and hasattr(self, 'form_no_cache'):
            new_form = self.form_no_cache
            kwargs['form'] = new_form()
            logging.info('reset form')
            logging.info(kwargs['form'].product_type())
        else:
            kwargs['form'] = self.form
            logging.info('using cached form')

并将此添加到我的家庭处理程序

def form_no_cache(self):
    import product.product_data.forms as forms
    return forms.ProductForm(self)

所有这些在开发中都很好,日志在开发和生产中似乎是正确的......

任何人的想法?

1 个答案:

答案 0 :(得分:-1)

好吧,无法想出这个,所以重写代码以在简单的def中构建选择并传递作为参数而不是形式。似乎工作。我对wtforms感到怀疑,但这是一种痛苦,不知道,但没有时间......