Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
.. image:: https://github.com/Pylons/deform/workflows/Build%20and%20test/badge.svg?branch=2.0-branch :target: https://github.com/Pylons/deform/actions?query=workflow%3A%22Build+and+test%22+branch%3A2.0-branch :alt: Build Status
.. image:: https://img.shields.io/pypi/v/deform :target: https://pypi.org/project/deform/ :alt: Current Release
.. image:: https://readthedocs.org/projects/deform/badge/?version=latest :target: https://docs.pylonsproject.org/projects/deform/en/latest/ :alt: Latest Documentation Status
.. image:: https://img.shields.io/pypi/pyversions/deform :alt: Python Support
.. contents:: :local:
Deform is a Python form library for generating HTML forms on the server side.
Date and time picking widgets <https://deformdemo.pylonsproject.org/datetimeinput/>
,
rich text editors <https://deformdemo.pylonsproject.org/richtext/>
, forms with dynamically added and removed items <https://deformdemo.pylonsproject.org/sequence_of_mappings/>
_ and a few other complex use cases <https://deformdemo.pylonsproject.org/>
_ are supported out of the box.
Deform integrates with the Pyramid web framework <https://trypyramid.com/>
_
and several other web frameworks. Deform comes with Chameleon templates <https://chameleon.readthedocs.io/en/latest/>
_ and Bootstrap 3 <https://getbootstrap.com/docs/3.3/>
_ styling. Under the hood, Colander schemas <https://github.com/Pylons/colander>
_ are used for serialization and
validation. The Peppercorn <https://github.com/Pylons/peppercorn>
_ library
maps HTTP form submissions to nested structure.
Although Deform uses Chameleon templates internally, you can embed rendered Deform forms into any template language.
Deform is ideal for complex server-side generated forms. Potential use cases include:
Complex data entry forms
Administrative interfaces
Python based websites with high amount of data manipulation forms
Websites where additional front end framework is not needed
Install using pip and Python package installation best practices <https://packaging.python.org/tutorials/installing-packages/>
_::
pip install deform
See all widget examples <https://deformdemo.pylonsproject.org>
. Below is a sample
form loop using the Pyramid <https://trypyramid.com/>
web framework.
.. image:: https://github.com/Pylons/deform/raw/master/docs/example.png :width: 400px
Example code:
.. code-block:: python
"""Self-contained Deform demo example."""
from __future__ import print_function
from pyramid.config import Configurator
from pyramid.session import UnencryptedCookieSessionFactoryConfig
from pyramid.httpexceptions import HTTPFound
import colander
import deform
class ExampleSchema(deform.schema.CSRFSchema):
name = colander.SchemaNode(
colander.String(),
title="Name")
age = colander.SchemaNode(
colander.Int(),
default=18,
title="Age",
description="Your age in years")
def mini_example(request):
"""Sample Deform form with validation."""
schema = ExampleSchema().bind(request=request)
# Create a styled button with some extra Bootstrap 3 CSS classes
process_btn = deform.form.Button(name='process', title="Process")
form = deform.form.Form(schema, buttons=(process_btn,))
# User submitted this form
if request.method == "POST":
if 'process' in request.POST:
try:
appstruct = form.validate(request.POST.items())
# Save form data from appstruct
print("Your name:", appstruct["name"])
print("Your age:", appstruct["age"])
# Thank user and take him/her to the next page
request.session.flash('Thank you for the submission.')
# Redirect to the page shows after succesful form submission
return HTTPFound("/")
except deform.exception.ValidationFailure as e:
# Render a form version where errors are visible next to the fields,
# and the submitted values are posted back
rendered_form = e.render()
else:
# Render a form with initial default values
rendered_form = form.render()
return {
# This is just rendered HTML in a string
# and can be embedded in any template language
"rendered_form": rendered_form,
}
def main(global_config, **settings):
"""pserve entry point"""
session_factory = UnencryptedCookieSessionFactoryConfig('seekrit!')
config = Configurator(settings=settings, session_factory=session_factory)
config.include('pyramid_chameleon')
deform.renderer.configure_zpt_renderer()
config.add_static_view('static_deform', 'deform:static')
config.add_route('mini_example', path='/')
config.add_view(mini_example, route_name="mini_example", renderer="templates/mini.pt")
return config.make_wsgi_app()
This example is in deformdemo repository <https://github.com/Pylons/deformdemo/>
_. Run the example with pserve::
pserve mini.ini --reload
This library is actively developed and maintained. Deform 2.x branch has been used in production on several sites since 2014. Automatic test suite has 100% Python code coverage and 500+ tests.
Websauna <https://websauna.org/>
_
Kotti <http://kotti.pylonsproject.org/>
_
Substance D <http://www.substanced.net/>
_
Widget examples <https://deformdemo.pylonsproject.org>
_
PyPI <https://pypi.org/project/deform/>
_
Issue tracker <https://github.com/Pylons/deform/issues>
_
Widget examples repo <https://github.com/Pylons/deformdemo/>
_
Documentation <https://docs.pylonsproject.org/projects/deform/en/latest/>
_
Support <https://pylonsproject.org/community-support.html>
_
.. _2.0.15:
Features and Fixes ^^^^^^^^^^^^^^^^^^
Add support of Python 3.8 and 3.9.
Added a new widget SelectizeWidget
based on the jQuery plugin
selectize.js <https://github.com/selectize/selectize.js>
_. [stevepiercy]
https://github.com/Pylons/deform/issues/260
Improved handling of the readonly
HTML attribute in certain widgets. The
readonly
HTML form control attribute makes the element not mutable,
meaning the user cannot edit the control. When "readonly": "readonly"
is
one of the items in a dict passed into the attributes
option when
creating a widget, the rendered widget both prevents the user from changing
the value, and if the form does not pass validation after submitted then the
field value will be displayed.
readonly
is supported by most form controls, but not all. Deform adds
some logic to add read-only support for a few of those form controls, as
described below.
CheckboxWidget
and CheckboxChoiceWidget
Due to the nature of how checkbox values are processed, the readonly
attribute has no effect.
To achieve a read-only behavior, pass in attributes={"onclick": "return false;"}
.
This will render as an inline JavaScript onclick="return false;"
for
each checkbox item.
MoneyInputWidget
The provided value will be displayed in the input and be not editable.
RadioChoiceWidget
For the selected value it will render an attribute in the HTML as
readonly="readonly"
, and for all other values as
disabled="disabled"
.
SelectWidget
For selection of single options only, the selected value will render an
attribute in the HTML as readonly="readonly"
, and for all other values
as disabled="disabled"
.
Multiple selections, set by the multiple=True
option, do not support
the readonly
attribute on the <select>
element.
For multiple selections, use the SelectizeWidget
.
SelectizeWidget
For both single and multiple selections, the selected value or values will
be rendered as selected, and the others will not be selectable.
Selectize uses JavaScript to "lock" the form control.
TextAreaWidget
The provided value will be displayed in the input and be not editable.
TextInputWidget
The provided value will be displayed in the input and be not editable.
[stevepiercy] https://github.com/Pylons/deform/issues/260
Optionally bypass the resource registry and specify a resource as a dict
where its keys are the type of asset ("js"
or "css"
) and its values
are either a string or a list of strings of paths to assets on disk.
[tdamsma]
https://github.com/Pylons/deform/issues/485
Conditionally load jquery.maskedinput
if and only if mask
option is
provided. [tisdall, stevepiercy]
https://github.com/Pylons/deform/pull/487
Changed dateparts widget to use type="number"
instead of default
text
. [stevepiercy]
https://github.com/Pylons/deform/issues/442
Clarify that a sequence type (list, tuple, or x/range) is required for values
passed into a SelectWidget
or RadioChoiceWidget
. [stevepiercy]
https://github.com/Pylons/deform/issues/385
Switch from using nosetests to pytest as the test runner, as nosetests is no longer maintained. [stevepiercy] https://github.com/Pylons/deform/pull/497 https://github.com/Pylons/deform/pull/498
Switch from Travis-CI and Appveyor to GitHub Actions, due to Travis-CI changing its plans to be ineffective for the Pylons Project. [stevepiercy] https://github.com/Pylons/deform/pull/492 https://github.com/Pylons/deform/pull/495
Add Docker containerization of Deform and deformdemo as an option for running tests, and improve related documentation. [sydoluciani] https://github.com/Pylons/deform/pull/493 https://github.com/Pylons/deform/pull/494
Deprecations ^^^^^^^^^^^^
Drop support of Python 3.5.
Select2Widget
is now deprecated and will be removed in Deform 3.0.0
because its jQuery plugin Select2 removed a lock feature in v4.0.0 and its
future development is uncertain. [stevepiercy]
https://github.com/Pylons/deform/issues/260
Documentation ^^^^^^^^^^^^^
Add documentation of arbitrary HTML5 attributes for all widgets. [stevepiercy] https://github.com/Pylons/deform/issues/430
Add usage documentation of Date
, DateTime
, and Time
widgets. Add
documentation reference to complex data loading, changing widgets, or
validating data to Colander. [stevepiercy]
https://github.com/Pylons/deform/pull/466
.. _2.0.14:
Field.validate() now raises ValidationFailure
upon peppercorn parse
failure.
See https://github.com/Pylons/deform/pull/242
Bump maskMoney.js to 3.1.1 and use minified version. https://github.com/Pylons/deform/issues/412
.. _2.0.13:
richtext.pt
: The contents of the RichTextWidget
's
was not HTML-escaped, but now it is.
Note that unescaped content is still rendered if delayed_load
is
enabled. Now, however, to avoid rendering unescaped non-validated
user input, delayed_load
is ignored when redisplaying a field
containing an error.
See https://github.com/Pylons/deform/pull/204
This time, really update select2 widget to version 4.0.13. See https://github.com/Pylons/deform/pull/459
.. _2.0.12:
Update select2 widget to version 4.0.13. See https://github.com/Pylons/deform/pull/441
Add the structure
keyword to the autocomplete template's options to stop
its encoding.
See https://github.com/Pylons/deform/pull/445
Use the local HTML element for change event when removing/adding to DOM. See https://github.com/Pylons/deform/pull/331
Fix deprecation warning when importing the module field.py
while testing
with pytest.
See https://github.com/Pylons/deform/pull/419
Fix a bug that was introduced in 2.0.11 that made it such that the focus
parameter on forms did not honor the off
value for checkboxChoice
and
radioChoice
widgets.
See https://github.com/Pylons/deform/pull/453
Remove the unused variable namematch
from deform.js.
See https://github.com/Pylons/deform/pull/454
Add i18n domain and Bootstrap styles to template readonly/password.pt
.
See https://github.com/Pylons/deform/pull/237
.. _2.0.11:
Drop support of Python 3.4.
Changed the implementation of input autofocus from JavaScript to an HTML5 input attribute.
Forms now have an optional focus
parameter (on
or off
) and fields
have an optional autofocus
parameter.
focus
is on
, and at least one field has an autofocus
schema parameter set to on
, the first of these fields will
receive focus on page load.focus
is on
or omitted, and no field has an
autofocus
schema parameter set to on
, the first input of
the first form on the page will receive focus on page load.focus
is off
, no focusing will be done.Default: on
.
(This is unchanged from the JavaScript implementation.)
Replace the flake8-isort plugin with plain old isort. See https://github.com/Pylons/deform/pull/427
Improved the script that launches Selenium webdriver to clean up the locale directory after completing a run of functional tests so that its files do not get committed by accident. We also enforce coding style and add a formatter, and improved the contributing documentation. See https://github.com/Pylons/deform/pull/428
Updated Bootstrap to 3.4.1.
.. _2.0.10:
.. _2.0.9:
Added CSRF test to pass coverage on schema.py. See https://github.com/Pylons/deform/pull/403
Modified the DateTimeInputWidget to use HTML5 date/time input types on browsers that support it. See https://github.com/Pylons/deform/pull/406
Add new translations for Swahili (sw_KE) locale. See https://github.com/Pylons/deform/pull/409
Add boolean HTML attributes per Chameleon 3.8.0.
All checkboxes, radios, and selects that use boolean HTML attributes
(selected, checked, etc.) previously used literal_false
and would drop any
False
value from rendering as an HTML attribute. In Chameleon 3.8.0,
literal_false
is removed and must instead use boolean_attributes
to set
defaults.
.. _2.0.8:
Add tags
option support to Select2Widget
See https://github.com/Pylons/deform/pull/373
Change Python 3.7 to use stable version, 3.8-dev as allowed failure, in Travis. See https://github.com/Pylons/deform/pull/377
Update Bootstrap to 3.3.7.
Add support for HTML5 attributes (e.g. including placeholder and maxlength) See https://github.com/Pylons/deform/pull/345
Drop Python 3.3 support. See https://github.com/Pylons/deform/pull/371
Add support to Python 3.7.
Make date_submit and time_submit optional in DateTimeInputWidget See https://github.com/Pylons/deform/pull/369
Remove pinning of iso8601 to 0.1.11 See https://github.com/Pylons/deform/pull/364
i18n cleanup https://github.com/Pylons/deform/pull/367 and https://github.com/Pylons/deform/pull/368
i18n cleanup https://github.com/Pylons/deform/pull/332 and https://github.com/Pylons/deform/pull/363
Fix bug in _FieldStorage
under Python 3.x (issues #339 and #357).
Declare Python 3.6 compatibility and enable tests against Python 3.6 (all tests pass with no changes).
Closes #333: MANIFEST.in including docs, licenses and text files.
Add link
button type See https://github.com/Pylons/deform/issues/166
Add traditional chinese localization
deform.renderer.configure_zpt_renderer
Added accordions to MappingWidget: https://deformdemo.pylonsproject.org/mapping_accordion/
Added CSS class deform-form-buttons
to style form button group:
https://github.com/Pylons/deform/pull/308
Add more options to TextAreaCSVWidget
:
https://github.com/Pylons/deform/pull/309
Always render an item with a default CSS class: https://github.com/Pylons/deform/pull/306
Updated pickdate.js library used for the date picker: https://github.com/Pylons/deform/pull/248
Widget Selenium test suite runs both under Python 2 and 3. Lots of Selenium testing headache fixed with some implicit wait support.
.. note::
Currently Python 3 file upload widget may have compatibility issues.
Please see ``deformdemo/test.py`` for details.
Fix regression of <select>
widget default values not honoured
Updated Select2 widget JavaScript
Drop support for Python 2.6.
Documentation reorganization and clean up to conform with Pylons Project projects.
Fix select and select2 widget templates failing on Python 3.x
Updated bootstrap to 3.3.6.
Fix dateparts.pt and datetimeinput.pt for changes in bootstrap v3.0.3.
(The culprit is boostrap commit
853b69f <https://github.com/twbs/bootstrap/commit/853b69f2d>
_.)
Make dateinput
work again by using the fixed name "date" as expected
by the pstruct schema. See https://github.com/Pylons/deform/pull/221.
Changed ISO8601_REGEX
import to match change in colander
Add support for Python 3.4, PyPy3.
Raise Invalid
rather than other errors when deserializing broken
or malicious pstructs with invalid types. See
https://github.com/Pylons/deform/pull/203
Read a time widget.
Fix a bug in the DateInputWidget. See https://github.com/Pylons/deform/pull/192.
Ensured that None
would not show up as a css class name in rendered
template output. See https://github.com/Pylons/deform/pull/191
we now use dashed-names (e.g. deform-seq
). A full list of changes is
below::
Old New
deformClosebutton deform-closebutton deformFileupload deform-file-upload deformFormFieldset deform-form-fieldset deformInsertBefore deform-insert-before deformOrderbutton deform-orderbutton deformProto deform-proto deformReplaces deform-replaces deformSeq deform-seq deformSeqAdd deform-seq-add deformSeqContainer deform-seq-container deformSeqItem deform-seq-item deformSet-item deform-set-item errorMsg error-msg errorMsgLbl error-msg-lbl
Fixed handling of buttons in nested sequences. See https://github.com/Pylons/deform/issues/197
Upload widget is themed like Bootstrap https://github.com/Pylons/deform/pull/280
Select widget handles the mixture of strings and ints https://github.com/Pylons/deform/pull/300/ and https://github.com/Pylons/deform/pull/299
Have the button css_class override the default button class. This is backwards-incompatible and will require users of css_class to add a btn-default/btn-primary class to the css_class.
Simplified Chinese translation https://github.com/Pylons/deform/pull/274
Don't cause unnecessary JavaScript calls on page load https://github.com/Pylons/deform/pull/267/
Allow override Button Bootstap CSS styles https://github.com/Pylons/deform/pull/251
PasswordWidget
and CheckedPasswordWidget
have grown an additional
argument/attribute named redisplay
, which controls what happens on a
validation failure of a form involving such a field. If redisplay
is
True
(the default), the password will be re-rendered into the form when
the form is re-rendered after validation failure. If redisplay
is
False
, the password will not be re-rendered into the form. The default
is False
, which means that, as of this release, passwords will not
be redisplayed; this changes the default behavior wrt previous releases.
Values typed into password fields are not redisplayed by default during
validation failure, as a security measure (the value winds up in browser
history). Use PasswordWidget(redisplay=True)
or
CheckedPasswordWidget(redisplay=True)
to make these widgets redisplay
passwords on validation failures, matching the old behavior.
When using the default Chameleon template renderer, template names can now
be "asset specifications" e.g. mypackage:subdir1/subdir2/mytemplate.pt
instead of extensionless paths relative to a search path. When
template names are specified as asset specifications, the
pkg_resources.resource_filename
API is used to dereference them
into an actual file path.
This is an alpha release of Deform v2. Deform v2 is backwards incompatible with Deform v1. It requires the use of Twitter Bootstrap v3, whereas deform v1 did not require Bootstrap.
A demonstration site that shows Deform 2 in action exists at https://deformdemo.pylonsproject.org.
Both Deform 1 and Deform 2 will be maintained going forward. If you wish
to continue using Deform 1, because you cannot upgrade, or cannot depend on
Bootstrap 3, please pin your deform distribution requirement to
something below 2.0a1, e.g. deform<=1.999
.
This first alpha release is missing formal documentation updates. Apologies, we needed to get a release out onto PyPI, as not having one is holding back the development of a number of platforms and applications that depend on the changes in v2+. Documentation updates will be forthcoming over the lifetime of future alpha/beta releases. However, below is a list of known issues that need to be addressed to make a final release of Deform 2, as well as information about new features, and migration notes. You may also be able to make use of the demo site at https://deformdemo.pylonsproject.org to divine how things have changed, and what CSS and JavaScript resources you'll need to include in your pages to make use of this release.
TODO
NICE TO HAVE
NEW FEATURES:
MIGRATION NOTES:
height, width, skin, theme
parameters from RichTextWidget
(use "options" instead)render_initial_item
from SequenceWidgetdateFormat
to format
(dateFormat
now unsupported).FAQs
Form library with advanced features like nested forms
We found that deform demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.