代码之家  ›  专栏  ›  技术社区  ›  Eric O.

继承具有验证的基瓶形式

  •  0
  • Eric O.  · 技术社区  · 8 年前

    我有一个烧瓶的表格,下面是代码的一部分:

    class BaseForm(FlaskForm):
        username = TextField('Username')
        email = TextField('Email', [validators.Required('Please enter your email address.'), validators.Length(min=6, message=('Too short for an email address?')), validators.Email(message=('Enter a valid email address.'))
        ])
        password = PasswordField('Password')
        register = SubmitField('Register')
    
    class RegisterForm(BaseForm):
        BaseForm.username
        BaseForm.email
        BaseForm.password
        BaseForm.register
    

    当我使用 ,但是,当我使用 下面的代码将呈现错误 :

    class BaseForm(FlaskForm):
        username = TextField('Username')
        email = TextField('Email', [validators.Required('Please enter your email address.'), validators.Length(min=6, message=('Too short for an email address?')), validators.Email(message=('Enter a valid email address.'))
        ])
        password = PasswordField('Password')
        register = SubmitField('Register')
    
    class RegisterForm(BaseForm):
        BaseForm.username
        email = TextField('Email', [validators.Required('Please enter your email address.'), validators.Length(min=6, message=('Too short for an email address?')), validators.Email(message=('Enter a valid email address.'))
        ])
        BaseForm.password
        BaseForm.register
    

    所以在我看来问题是 验证不会随字段一起继承 请通过告诉我如何使用我的第一个代码来帮助我实现我正在尝试的表单继承 或者任务不可能完成

    1 回复  |  直到 8 年前
        1
  •  2
  •   Pyglouthon    8 年前

    您的RegisterForm没有来自BaseForm的新字段。 也许你应该从阅读一些编程语言开始,比如Python语言,特别注意继承性。

    class BaseForm(FlaskForm):
        username = TextField('Username')
        email = TextField('Email', [validators.Required('Please enter your email address.'), validators.Length(min=6, message=('Too short for an email address?')), validators.Email(message=('Enter a valid email address.'))])
        password = PasswordField('Password')
    
    class RegisterForm(BaseForm):
        register = SubmitField('Register')
    
        2
  •  1
  •   Yash Pokar    7 年前
    class BaseForm(Form):
        def __iter__(self):
            token = self.csrf_token
            yield token
    
            field_names = {token.name}
            for cls in self.__class__.__bases__:
                for field in cls():
                    field_name = field.name
                    if field_name not in field_names:
                        field_names.add(field_name)
                        yield self[field_name]
    
            for field_name in self._fields:
                if field_name not in field_names:
                    yield self[field_name]
    
    class EmailForm(BaseForm):
        email = EmailField('Email')
    
    
    class PasswordForm(BaseForm):
        password = PasswordField('Password')
    
    
    class EmailPasswordForm(EmailForm, PasswordForm):
        pass