Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

pypm install pysform

How to install pysform

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install pysform
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
0.2.1 Available View build log
Windows (64-bit)
0.2.1 Available View build log
Mac OS X (10.5+)
0.2.1 Available View build log
Linux (32-bit)
0.2.1 Available View build log
Linux (64-bit)
0.2.1 Available View build log
Depended by
Lastest release
version 0.2.1 on Jan 5th, 2011


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


  • 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:

System Message: WARNING/2 (<string>, line 21)

Literal block expected; none found.

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:

System Message: WARNING/2 (<string>, line 58)

Literal block expected; none found.

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)

Questions & Comments

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

Current Status

The code stays pretty stable, but the API is likely to change in the future.

The pysform tip is installable via easy_install with easy_install pysform==dev

Subscribe to package updates

Last updated Jan 5th, 2011

Download Stats

Last month:1

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.