Skip to main content

A library for generating and validating HTML forms

Project description

Introduction

pysform is a library designed to facilitate the rendering/processing/validating of HTML forms.

Features

  • validation based on FormEncode

  • attempting to have complete HTML spec coverage

  • extensible rendering system() (don’t have to use it)

  • will work with multiple WSGI frameworks (Werkzeug currently supported)

  • extensive unit tests

  • few dependencies: FormEncode, pysutils, WebHelpers

Code Sample

Using it might look like this:

class MyForm(Form):
    def __init__(self):
        Form.__init__(self, 'myform')

        el = self.add_header('input-els', 'Optional Elements')
        el = self.add_button('button', 'Button', defaultval='PushMe')
        el = self.add_checkbox('checkbox', 'Checkbox')
        el = self.add_file('file', 'File')
        el = self.add_hidden('hidden', defaultval='my hidden val')
        el = self.add_image('image', 'Image', defaultval='my image val', src='images/icons/b_edit.png')
        el = self.add_text('text', 'Text')
        el.add_note('a note')
        el.add_note('an <strong>HTML</strong> note', False)
        el = self.add_text('nolabel', defaultval='No Label')
        el.add_note('a note')
        el = self.add_password('password', 'Password')
        el = self.add_confirm('confirm', 'Confirm Password', match='password')
        el.add_note('confirm characters for password field are automatically masked')
        el = self.add_date('date', 'Date', defaultval=datetime.date(2009, 12, 3))
        el.add_note('note the automatic conversion from datetime object')
        emel = self.add_email('email', 'Email')
        el = self.add_confirm('confirmeml', 'Confirm Email', match=emel)
        el.add_note('note you can confirm with the name of the field or the element object')
        el.add_note('when not confirming password field, characters are not masked')
        el = self.add_time('time', 'Time')
        el = self.add_url('url', 'URL')
        options = [('1', 'one'), ('2','two')]
        el = self.add_select('select', options, 'Select')
        el = self.add_mselect('mselect', options, 'Multi Select')
        el = self.add_textarea('textarea', 'Text Area')
        el = self.add_fixed('fixed', 'Fixed', 'fixed val')
        el = self.add_fixed('fixed-no-label', defaultval = 'fixed no label')
        el = self.add_static('static', 'Static', 'static val')
        el = self.add_static('static-no-label', defaultval='static val no label')

and the view/controller code might look something like:

class FormTest(HtmlTemplatePage):
    def prep(self):
        self.form = MyForm()

    def post(self):
        if self.form.is_cancel():
            self.assign('cancel', True)
        elif self.form.is_valid():
            self.assign('values', self.form.get_values())
        elif self.form.is_submitted():
            # form was submitted, but invalid
            self.form.assign_user_errors()
        self.default()

    def default(self):
        self.assign('form', self.form)

Example Application:

See below in the file downloads for an example application demonstrating how to use pysform. There are a lot of dependencies b/c its based on pysapp so I suggest you use virtualenv.

Steps to get it running should be:

  1. download .zip package

  2. unzip

  3. cd pysform-example-0.1dev

  4. python setup.py develop

  5. cd myapp

  6. pysmvt serve dev

  7. browse to http://localhost:5000/formtest

The example application is very unpolished and may contain bugs. Its just a very rough first draft. The pysform code was engineered much more thoughtfully :).

Questions & Comments

Please visit: http://groups.google.com/group/pyslibs

Current Status

We are in an early beta stage. API should be relatively stable, but backwards compatibility won’t be guaranteed for a while.

The somewhat stable development version.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysform-example-0.1dev.zip (27.0 kB view details)

Uploaded Source

File details

Details for the file pysform-example-0.1dev.zip.

File metadata

File hashes

Hashes for pysform-example-0.1dev.zip
Algorithm Hash digest
SHA256 2ab25b879522c11554aa4e5586c74eaf35505389e338e747eb7bf9382d97b6e9
MD5 80757f73ea064d4e2f6f6f1eeb3000e6
BLAKE2b-256 e42b2f4cb8031b28c3298143539bc9566b1bfac87f972cdeeea4c670bec5d108

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page