123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- from .. import widgets
- from .core import Field
- __all__ = (
- "BooleanField",
- "TextAreaField",
- "PasswordField",
- "FileField",
- "MultipleFileField",
- "HiddenField",
- "SearchField",
- "SubmitField",
- "StringField",
- "TelField",
- "URLField",
- "EmailField",
- "ColorField",
- )
- class BooleanField(Field):
- """
- Represents an ``<input type="checkbox">``. Set the ``checked``-status by using the
- ``default``-option. Any value for ``default``, e.g. ``default="checked"`` puts
- ``checked`` into the html-element and sets the ``data`` to ``True``
- :param false_values:
- If provided, a sequence of strings each of which is an exact match
- string of what is considered a "false" value. Defaults to the tuple
- ``(False, "false", "")``
- """
- widget = widgets.CheckboxInput()
- false_values = (False, "false", "")
- def __init__(self, label=None, validators=None, false_values=None, **kwargs):
- super().__init__(label, validators, **kwargs)
- if false_values is not None:
- self.false_values = false_values
- def process_data(self, value):
- self.data = bool(value)
- def process_formdata(self, valuelist):
- if not valuelist or valuelist[0] in self.false_values:
- self.data = False
- else:
- self.data = True
- def _value(self):
- if self.raw_data:
- return str(self.raw_data[0])
- return "y"
- class StringField(Field):
- """
- This field is the base for most of the more complicated fields, and
- represents an ``<input type="text">``.
- """
- widget = widgets.TextInput()
- def process_formdata(self, valuelist):
- if valuelist:
- self.data = valuelist[0]
- def _value(self):
- return str(self.data) if self.data is not None else ""
- class TextAreaField(StringField):
- """
- This field represents an HTML ``<textarea>`` and can be used to take
- multi-line input.
- """
- widget = widgets.TextArea()
- class PasswordField(StringField):
- """
- A StringField, except renders an ``<input type="password">``.
- Also, whatever value is accepted by this field is not rendered back
- to the browser like normal fields.
- """
- widget = widgets.PasswordInput()
- class FileField(Field):
- """Renders a file upload field.
- By default, the value will be the filename sent in the form data.
- WTForms **does not** deal with frameworks' file handling capabilities.
- A WTForms extension for a framework may replace the filename value
- with an object representing the uploaded data.
- """
- widget = widgets.FileInput()
- def _value(self):
- # browser ignores value of file input for security
- return False
- class MultipleFileField(FileField):
- """A :class:`FileField` that allows choosing multiple files."""
- widget = widgets.FileInput(multiple=True)
- def process_formdata(self, valuelist):
- self.data = valuelist
- class HiddenField(StringField):
- """
- HiddenField is a convenience for a StringField with a HiddenInput widget.
- It will render as an ``<input type="hidden">`` but otherwise coerce to a string.
- """
- widget = widgets.HiddenInput()
- class SubmitField(BooleanField):
- """
- Represents an ``<input type="submit">``. This allows checking if a given
- submit button has been pressed.
- """
- widget = widgets.SubmitInput()
- class SearchField(StringField):
- """
- Represents an ``<input type="search">``.
- """
- widget = widgets.SearchInput()
- class TelField(StringField):
- """
- Represents an ``<input type="tel">``.
- """
- widget = widgets.TelInput()
- class URLField(StringField):
- """
- Represents an ``<input type="url">``.
- """
- widget = widgets.URLInput()
- class EmailField(StringField):
- """
- Represents an ``<input type="email">``.
- """
- widget = widgets.EmailInput()
- class ColorField(StringField):
- """
- Represents an ``<input type="color">``.
- """
- widget = widgets.ColorInput()
|