class BaseForm(object):
"""
Base Form Class. Provides core behaviour like field construction,
validation, and data and error proxying.
"""
def __init__(self, fields, prefix='', meta=DefaultMeta()):
"""
:param fields:
A dict or sequence of 2-tuples of partially-constructed fields.
:param prefix:
If provided, all fields will have their name prefixed with the
value.
:param meta:
A meta instance which is used for configuration and customization
of WTForms behaviors.
"""
if prefix and prefix[-1] not in '-_;:/.':
prefix += '-'
self.meta = meta
self._prefix = prefix
self._errors = None
self._fields = OrderedDict()
if hasattr(fields, 'items'):
fields = fields.items()
translations = self._get_translations()
extra_fields = []
if meta.csrf:
self._csrf = meta.build_csrf(self)
extra_fields.extend(self._csrf.setup_form(self))
"""
fields:
[
('name', UnboundField(simple.StringField, *args, **kwargs, creation_counter=1)),
('pwd', UnboundField(simple.PasswordField, *args, **kwargs, creation_counter=2)),
]
extra_fields(下面我会讲一下这个是干啥的)我是没有传的,所以下面循环就是循环fields这个列表~
"""
for name, unbound_field in itertools.chain(fields, extra_fields):
options = dict(name=name, prefix=prefix, translations=translations)
"""
name: 'name'; unbound_field = UnboundField(simple.StringField, *args, **kwargs, creation_counter=1)
下面这句就是把simple.StringField拿出来实例化:
field = simple.StringField()
"""
field = meta.bind_field(self, unbound_field, options)
self._fields[name] = field
"""
上述for循环执行完后:
self._fields = {
'name': simple.StringField(),
'pwd': simple.PasswordField()
}
"""