Skip to main content
Help us improve Python packaging – donate today!

Human readable captcha for z3cform

Project Description


collective.z3cform.norobots provides a “human” captcha widget based on a list of question/answer(s).

This captcha can be used as a (Plone Discussions) captcha plugin and in all z3c forms.

The widget is based on z3c.form.TextWidget.

Since version 1.4, questions configuration uses a dedicated control panel (using instead of a simple properties sheet. An upgrade step provides migration from earlier versions.

Interface is translated in the following languages: Czech [cs], Danish [da], German [de], Basque [eu], Suomeksi [fi], French [fr] and Simplified Chinese [zh_CN]. => Some strings have been added in 1.4, need to be translated.


  • I have tested with Plone 4.1.5 and Plone 4.0.10 (
  • For Plone 4.0 :,, and to use the captcha for anonymous comments in Plone Discussions. See bellow.


Getting the module

Add collective.z3cform.norobots to your plone.recipe.zope2instance buildout section e.g.:

eggs =


zcml =

Or, you can add it as a dependency on your own product


Enabling the module

For Plone 4.1.x:

  • In the Addons control panel, install “Norobots captcha field (collective.z3cform.norobots)”.

For Plone 4.0.x:

Add a new question

In the “Norobots widget settings” control panel, add a new line in the field “Norobots question::answer”:


Example : What is 10 + 12 ?::22

Answer can contain multiple values delimited by semicolon:


Example : What is 5 + 5 ?::10;ten

Quickly test ?

Download collective.z3cform.norobots and use virtualenv and buildout to test the module:

easy_install virtualenv
cd collective.z3cform.norobots
virtualenv .
source bin/activate
(collective.z3cform.norobots) easy_install zc.buildout
!!! check the buildout content before running !!!
(collective.z3cform.norobots) ln -s test-plone-4.1.x.cfg buildout.cfg
(collective.z3cform.norobots) python
(collective.z3cform.norobots) bin/buildout
[...] be patient... [...]
(collective.z3cform.norobots) ./bin/instance fg

Go to http://localhost:8080, add a new Plone Site and install collective.z3cform.norobots (see above).

Launch tests:

(collective.z3cform.norobots) ./bin/test -s collective.z3cform.norobots

Usage in a z3c form

You can use this widget setting the “widgetFactory” property of a form field:

from zope import interface, schema
from z3c.form import interfaces, form, field, button, validator
from import wrap_form

from collective.z3cform.norobots.i18n import MessageFactory as _
from collective.z3cform.norobots.widget import NorobotsFieldWidget
from collective.z3cform.norobots.validator import NorobotsValidator

class INorobotsForm(interface.Interface):
    norobots = schema.TextLine(title=_(u'Are you a human ?'),
                               description=_(u'In order to avoid spam, please answer the question below.'),

class NorobotsForm(form.Form):
    fields = field.Fields(INorobotsForm)
    fields['norobots'].widgetFactory = NorobotsFieldWidget

# wrap the form with's Form wrapper
NorobotsFormView = wrap_form(NorobotsForm)

# Register Norobots validator for the correponding field in the IContactInfo interface
validator.WidgetValidatorDiscriminators(NorobotsValidator, field=INorobotsForm['norobots'])

for more information see in the plone_forms directory.

Possible problems




  • Sylvain Boureliou [sylvainb]
  • Mikel Larreategi [erral]
  • Aijun Jian
  • Radim Novotny [naro]
  • Thomas Clement Mogensen [tmog]
  • Peter Mathis [petschki]
  • Petri Savolainen [petri]
  • Helmut Toplitzer


1.4.1 (2012-07-02)

  • Fix Unicode error when a question contains non-ascii char. [sylvainb, Helmut Toplitzer]

1.4 (2012-06-22)

  • Use instead of a property sheet for the questions configuration. Questions can now be added using a dedicated control panel. [sylvainb]
  • Add an upgrade step (1 -> 2) to copy questions from the old properties sheet to [sylvainb]
  • Fix the widget template for use with (there was no redirection to the comment form when only the captcha is wrong). [sylvainb]
  • Update translations (some new strings added). [sylvainb]
  • Add Basque translation [erral]

1.3.1 (2012-03-28)

  • Add simplified chinese translation [Aijun Jian]

1.3 (2012-02-27)

  • Allow multiple answers for a question [naro]
  • Added danish translation [tmog]

1.2.1 (2010-11-05)

  • Added german translation [petschki]

1.2 (2010-10-31)

  • Fix tests for Plone 4 [sylvainb]
  • Added Czech translation [naro]

1.1 (2010-09-15)

  • Support for using as a captcha plugin (Plone 4) [Petri Savolainen]
  • Finnish translations [Petri Savolainen]

1.0 (2010-01-13)

  • Initial release [sylvainb]

Release history Release notifications

History Node


History Node


History Node

History Node

History Node


This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date (80.8 kB) Copy SHA256 hash SHA256 Source None Jul 2, 2012

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page