Django + WSGI:强制对象初始化?

时间:2010-07-04 22:20:07

标签: django mod-wsgi

我有一个看起来像这样的表单类:

class RegisterForm(Form):
    username = Field(model_field='username', filters=validators.minlength(3))

您会注意到username是一个类变量。我相信这意味着Field将在第一次使用RegisterForm时(在重新启动apache之后)构建。它不会在页面重新加载之间重新构建(除非产生第二个 WSGI实例(?),但我们不会进入)。我注意到了这一点,因为我在Field.__init__中设置的某些值未被重置。

但是,Form.__init__ 似乎每次重新加载都会调用。我想这是因为我使用它的方式?我实际上是在每个页面请求中构建它form = RegisterForm(request)

所以...假设我不希望RegisterForm中的[类变量“被”缓存“并在每次请求时重新初始化Fields ...我该怎么做那? (不修改RegisterForm的语法;你可以在基类中做任何事情,Form

2 个答案:

答案 0 :(得分:0)

您可以在每个实例化时更新类变量:

class ContactForm(forms.Form):
    username = Field(model_field='username', filters=validators.minlength(3))
    def __init__(self, *args, **kwargs):
        super(ContactForm, self).__init__(*args, **kwargs)
        ContactForm.username = Field(model_field='username', filters=validators.minlength(3))

答案 1 :(得分:0)

您可以在函数中定义类。这样每次调用函数时都会构造它。

def gotclass(data):
  class InnerClass(object):
    someattr = DoSomethingWith(data)
  return InnerClass

MyNewClass = gotclass(42)
someobj = MyNewClass()