Description
WTForms ======= WTForms is a flexible forms validation and rendering library for Python web development. It can work with whatever web framework and template engine you choose. It supports data validation, CSRF protection, internationalization (I18N), and more. There are various community libraries that provide closer integration with popular frameworks. Installation ------------ Install and update using pip: .. code-block:: text pip install -U WTForms Third-Party Library Integrations -------------------------------- WTForms is designed to work with any web framework and template engine. There are a number of community-provided libraries that make integrating with frameworks even better. - `Flask-WTF`_ integrates with the Flask framework. It can automatically load data from the request, uses Flask-Babel to translate based on user-selected locale, provides full-application CSRF, and more. - `WTForms-Alchemy`_ provides rich support for generating forms from SQLAlchemy models, including an expanded set of fields and validators. - `WTForms-SQLAlchemy`_ provides ORM-backed fields and form generation from SQLAlchemy models. - `WTForms-AppEngine`_ provides ORM-backed fields and form generation from AppEnding db/ndb schema - `WTForms-Django`_ provides ORM-backed fields and form generation from Django models, as well as integration with Django's I18N support. - `WTForms-Bootstrap5`_ provides Bootstrap 5 favor renderer with great customizability. - `Starlette-WTF`_ integrates with Starlette and the FastAPI framework, based on the features of Flask-WTF. - `Bootstrap-Flask`_ Bootstrap-Flask is a collection of Jinja macros for Bootstrap 4 & 5 and Flask using Flask-WTF. .. _Flask-WTF: https://flask-wtf.readthedocs.io/ .. _WTForms-Alchemy: https://wtforms-alchemy.readthedocs.io/ .. _WTForms-SQLAlchemy: https://github.com/pallets-eco/wtforms-sqlalchemy .. _WTForms-AppEngine: https://github.com/pallets-eco/wtforms-appengine .. _WTForms-Django: https://github.com/pallets-eco/wtforms-django .. _WTForms-Bootstrap5: https://github.com/LaunchPlatform/wtforms-bootstrap5 .. _Starlette-WTF: https://github.com/muicss/starlette-wtf .. _Bootstrap-Flask: https://github.com/helloflask/bootstrap-flask Links ----- - Documentation: https://wtforms.readthedocs.io/ - Releases: https://pypi.org/project/WTForms/ - Code: https://github.com/pallets-eco/wtforms - Issue tracker: https://github.com/pallets-eco/wtforms/issues - Discord Chat: https://discord.gg/F65P7Z9 - Translation: https://hosted.weblate.org/projects/wtforms/wtforms/
Release History
| Version | Changes | Urgency | Date |
|---|---|---|---|
| 3.2.1 | Imported from PyPI (3.2.1) | Low | 4/21/2026 |
| 3.2.0 | Released 2024-10-20 - Translations update: korean, chinese (traditional), portugese, russian, dutch, kazakh, swedish, turkish, slovak, ukranian, spanish, french. - Move the repository to the pallets-eco organization. #854 - Stop supporting Python 3.9 and start supporting Python 3.13 #855 - Removed `required` flag support from ``HiddenWidget``, ``RangeWidget`` and ``SelectWidget`` to conform to W3C #810 - ``NoneOf`` and ``AnyOf`` can validate multiple valued fields like ``Selec | Low | 10/20/2024 |
| 3.1.2 | Released 2024-01-06 - Fix SelectMultipleField value coercion on validation. #822 #823 | Low | 1/6/2024 |
| 3.1.1 | Released 2023-11-01 - Display `Flags` values in their repr. #808 - `~SelectField` and `SelectMultipleField` ``choices`` can be `None` if `validate_choice` is `False` #809 - Documentation improvements #812 #815 #817 - Unit tests improvements #813 - Python 3.12 support #818 - Restored support for 3-items tuple return value from `iter_choices` #816 | Low | 11/1/2023 |
| 3.1.0 | Released 2023-10-10 - Documentation improvements #726 #733 #749 #767 #788 #789 #793 - Translation improvements #732 #734 #754 - Implement :class:`~fields.ColorField` #755 - Delayed import of ``email_validator``. #727 - ``<option>`` attributes can be passed by the :class:`~fields.SelectField` ``choices`` parameter #692 #738 - Use the standard datetime formats by default for :class:`~fields.DateTimeLocalField` #761 - Python 3.11 support #763 - Added shorte | Low | 10/10/2023 |
| 3.0.1 | Released 2021-12-23 - Fixed `DateTimeField` and other similar fields can handle multiple formats. #720 #721 - Stop support for python 3.6 #722 | Low | 12/23/2021 |
| 3.0.0 | Released 2021-11-07 - Fixed `fields.RadioField` validators. #477 #615 - `fields.FormField.populate_obj` always calls `setattr` #675 - WTForms has a new logo. #569 #689 - Fixed `fields.RadioField` `render_kw` rendering. #490 #628 #688 - Support for optgroups in `fields.SelectField` and `fields.SelectMultipleField`. #656 #667 - Minor documentation fix. #701 - Custom separators for `fields.FieldList`. #681 #694 - `fields.DateTimeField`, `fields.DateField` and `fields.TimeF | Low | 11/7/2021 |
| 3.0.0a1 | - Drop support for Python < 3.6. #554 - `fields.StringField` sets data to None when form data is empty and an initial value was not provided. Although it previously set an empty string, None is consistent with the behavior of other fields. #355 - Specified version of Babel required for setup to avoid errors. #430 - Replaced use of getattr/setattr with regular variable access. #482 - `ValueError` raised by a validator are handled like regular exceptions. Validators need to raise `validators.V | Low | 11/23/2020 |
| 2.3.3 | Includes the translation files that were missing in the 2.3.2 release. | Low | 7/30/2020 |
| 2.3.2 | [Changelog](https://wtforms.readthedocs.io/en/2.3.x/changes/#version-2-3-2): - Fixed a bug with :class:`~fields.SelectField` choices shortcut at form submission. #598 #639 | Low | 7/30/2020 |
| 2.3.1 | * Changes: https://wtforms.readthedocs.io/en/2.3.x/changes/#version-2-3-1 | Low | 4/22/2020 |
| 2.3.0 | * Changes: https://wtforms.readthedocs.io/en/2.3.x/changes/#version-2-3-0 It's been a while! Thanks to the new maintainers who helped get the new release ready. 2.3.x will be the last version to support Python 2. Version 3.0 will support Python >= 3.6. | Low | 4/21/2020 |
