Form Designer
Project description
=================================================
Form Designer - a simple form designer for Django
=================================================
.. image:: https://travis-ci.org/feincms/form_designer.png?branch=master
:target: https://travis-ci.org/feincms/form_designer
This form designer does not try to offer every last configuration possibility
of Django's forms, just through the administration interface instead of
directly in Python code. Instead, it strives to be a tool which everyone can
use right away, without the need for long explanations.
It offers a small set of predefined input fields such as:
* Text fields (One line and multi line widgets possible)
* E-mail address fields
* Checkboxes
* Dropdowns
* Radio Buttons
* Multiple selection checkboxes
* Hidden input fields
Every field can optionally be declared mandatory, default values and help texts
are available too. That's it.
By default, form data is sent by e-mail to a freely definable e-mail address
and stored in the database (a CSV export of saved submissions is provided too).
It is possible to add your own actions as well.
Installing the form designer
============================
Install the package using pip_::
$ pip install form_designer
Setting up the form designer
============================
- Add ``'form_designer'`` to ``INSTALLED_APPS``.
- Run ``./manage.py migrate form_designer``
- Go into Django's admin panel and add one or more forms with the fields you
require. Also select at least one action in the configuration options
selectbox, most often you'd want to select both the "E-mail" and the
"Save form submission" option. After saving once, you'll see additional
fields belonging to the selected configuration options, in this case
a field for entering an e-mail address where the submission results should
be sent to.
If you're using the form designer with FeinCMS_, the content type can be
imported from ``form_designer.contents.FormContent``. Otherwise, your
code should use the following methods (the code would probably reside in
a view)::
# Somehow fetch the form_designer.models.Form instance:
instance = ...
# Build the form class:
form_class = instance.form()
# Standard form processing:
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
# Do what you want, or run the configured processors:
result = instance.process(form, request)
# Maybe there's something useful in here:
pprint(result)
...
else:
form = form_class()
return render(...)
Adding custom actions
=====================
Custom actions can be added by appending them to
``Form.CONFIG_OPTIONS``::
from form_designer.models import Form
def do_thing(model_instance, form_instance, request, config, **kwargs):
pass
Form.CONFIG_OPTIONS.append(
('do_thing', {
'title': _('Do a thing'),
'form_fields': [
('optional_form_field', forms.CharField(
label=_('Optional form field'),
required=False,
# validators...
# help_text...
)),
],
'process': do_thing,
})
)
The interesting part if the ``do_thing`` callable. It currently receives
four arguments, however you should also accept ``**kwargs`` to support
additional arguments added in the future:
- ``model_instance``: The ``Form`` model instance
- ``form_instance``: The dynamically generated form instance
- ``request``: The current HTTP request
- ``config``: The config options (keys and values defined through
``form_fields``; for example the ``email`` action defines an ``email``
char field, and accesses its value using ``config['email']``.
Configuring the export
======================
The CSV export of form submissions uses the Python's CSV module, the Excel
dialect and UTF-8 encoding by default. If your main target is Excel, you should
probably add the following setting to work around Excel's abysmal handling of
CSV files encoded in anything but latin-1::
FORM_DESIGNER_EXPORT = {
'encoding': 'latin-1',
}
You may add additional keyword arguments here which will be used during the
instantiation of ``csv.writer``.
ReCaptcha
=========
To enable [ReCaptcha](http://www.google.com/recaptcha) install
[django-recaptcha](https://github.com/praekelt/django-recaptcha) and add
`captcha` to your `INSTALLED_APPS`. This will automatically add a ReCaptcha
field to the form designer. For everything else read through the
django-recaptcha readme.
Override field types
====================
Define ``FORM_DESIGNER_FIELD_TYPES`` in your settings file like::
FORM_DESIGNER_FIELD_TYPES = 'your_project.form_designer_config.FIELD_TYPES'
In ``your_project.form_designer_config.py`` something like::
from django import forms
from django.utils.translation import ugettext_lazy as _
FIELD_TYPES = [
('text', _('text'), forms.CharField),
('email', _('e-mail address'), forms.EmailField),
]
Visit these sites for more information
======================================
* form_designer: https://github.com/feincms/form_designer
* FeinCMS: http://www.feinheit.ch/labs/feincms-django-cms/
* feincms3: https://feincms3.readthedocs.io/
.. _django-admin-ordering: https://github.com/matthiask/django-admin-ordering
.. _FeinCMS: https://feincms-django-cms.readthedocs.io/
Form Designer - a simple form designer for Django
=================================================
.. image:: https://travis-ci.org/feincms/form_designer.png?branch=master
:target: https://travis-ci.org/feincms/form_designer
This form designer does not try to offer every last configuration possibility
of Django's forms, just through the administration interface instead of
directly in Python code. Instead, it strives to be a tool which everyone can
use right away, without the need for long explanations.
It offers a small set of predefined input fields such as:
* Text fields (One line and multi line widgets possible)
* E-mail address fields
* Checkboxes
* Dropdowns
* Radio Buttons
* Multiple selection checkboxes
* Hidden input fields
Every field can optionally be declared mandatory, default values and help texts
are available too. That's it.
By default, form data is sent by e-mail to a freely definable e-mail address
and stored in the database (a CSV export of saved submissions is provided too).
It is possible to add your own actions as well.
Installing the form designer
============================
Install the package using pip_::
$ pip install form_designer
Setting up the form designer
============================
- Add ``'form_designer'`` to ``INSTALLED_APPS``.
- Run ``./manage.py migrate form_designer``
- Go into Django's admin panel and add one or more forms with the fields you
require. Also select at least one action in the configuration options
selectbox, most often you'd want to select both the "E-mail" and the
"Save form submission" option. After saving once, you'll see additional
fields belonging to the selected configuration options, in this case
a field for entering an e-mail address where the submission results should
be sent to.
If you're using the form designer with FeinCMS_, the content type can be
imported from ``form_designer.contents.FormContent``. Otherwise, your
code should use the following methods (the code would probably reside in
a view)::
# Somehow fetch the form_designer.models.Form instance:
instance = ...
# Build the form class:
form_class = instance.form()
# Standard form processing:
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
# Do what you want, or run the configured processors:
result = instance.process(form, request)
# Maybe there's something useful in here:
pprint(result)
...
else:
form = form_class()
return render(...)
Adding custom actions
=====================
Custom actions can be added by appending them to
``Form.CONFIG_OPTIONS``::
from form_designer.models import Form
def do_thing(model_instance, form_instance, request, config, **kwargs):
pass
Form.CONFIG_OPTIONS.append(
('do_thing', {
'title': _('Do a thing'),
'form_fields': [
('optional_form_field', forms.CharField(
label=_('Optional form field'),
required=False,
# validators...
# help_text...
)),
],
'process': do_thing,
})
)
The interesting part if the ``do_thing`` callable. It currently receives
four arguments, however you should also accept ``**kwargs`` to support
additional arguments added in the future:
- ``model_instance``: The ``Form`` model instance
- ``form_instance``: The dynamically generated form instance
- ``request``: The current HTTP request
- ``config``: The config options (keys and values defined through
``form_fields``; for example the ``email`` action defines an ``email``
char field, and accesses its value using ``config['email']``.
Configuring the export
======================
The CSV export of form submissions uses the Python's CSV module, the Excel
dialect and UTF-8 encoding by default. If your main target is Excel, you should
probably add the following setting to work around Excel's abysmal handling of
CSV files encoded in anything but latin-1::
FORM_DESIGNER_EXPORT = {
'encoding': 'latin-1',
}
You may add additional keyword arguments here which will be used during the
instantiation of ``csv.writer``.
ReCaptcha
=========
To enable [ReCaptcha](http://www.google.com/recaptcha) install
[django-recaptcha](https://github.com/praekelt/django-recaptcha) and add
`captcha` to your `INSTALLED_APPS`. This will automatically add a ReCaptcha
field to the form designer. For everything else read through the
django-recaptcha readme.
Override field types
====================
Define ``FORM_DESIGNER_FIELD_TYPES`` in your settings file like::
FORM_DESIGNER_FIELD_TYPES = 'your_project.form_designer_config.FIELD_TYPES'
In ``your_project.form_designer_config.py`` something like::
from django import forms
from django.utils.translation import ugettext_lazy as _
FIELD_TYPES = [
('text', _('text'), forms.CharField),
('email', _('e-mail address'), forms.EmailField),
]
Visit these sites for more information
======================================
* form_designer: https://github.com/feincms/form_designer
* FeinCMS: http://www.feinheit.ch/labs/feincms-django-cms/
* feincms3: https://feincms3.readthedocs.io/
.. _django-admin-ordering: https://github.com/matthiask/django-admin-ordering
.. _FeinCMS: https://feincms-django-cms.readthedocs.io/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
form_designer-0.11.0.tar.gz
(19.6 kB
view details)
Built Distribution
File details
Details for the file form_designer-0.11.0.tar.gz
.
File metadata
- Download URL: form_designer-0.11.0.tar.gz
- Upload date:
- Size: 19.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a4b219bc7cb842dcc7cb845044fe6df6c7e4c06e6925356d8c8fba89a6027bf1 |
|
MD5 | b41fc0b6427d1693698fc8f0e5edd7bd |
|
BLAKE2b-256 | fe3e8ac9c0709d80b538e71be8fb250f67ea70dcefa271b0d5702743530832eb |
File details
Details for the file form_designer-0.11.0-py2.py3-none-any.whl
.
File metadata
- Download URL: form_designer-0.11.0-py2.py3-none-any.whl
- Upload date:
- Size: 25.6 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8db4877a20832e067035f2b6b488b29cdfe9124adb05651b20f98e95c6f2a91e |
|
MD5 | 242842cbbd4c63307dc19ef0b1fa94b0 |
|
BLAKE2b-256 | 581b700a6b2ce831b04ed9e9e55d79184abc0fcc955a56151465ae0862f3737b |