66 lines
2.5 KiB
Plaintext
66 lines
2.5 KiB
Plaintext
Captcha widget
|
|
==============
|
|
|
|
plone.formwidget.captcha provides a captcha widget based on the
|
|
collective.captcha widget.
|
|
|
|
>>> from plone.formwidget.captcha import CaptchaFieldWidget
|
|
|
|
First, set up a simple test form and context.
|
|
|
|
>>> from zope.interface import alsoProvides
|
|
>>> from zope.publisher.browser import TestRequest
|
|
>>> from zope.annotation.interfaces import IAttributeAnnotatable
|
|
>>> from z3c.form.interfaces import IFormLayer
|
|
|
|
>>> def make_request(path, form={}):
|
|
... request = TestRequest()
|
|
... request.form.update(form)
|
|
... alsoProvides(request, IFormLayer)
|
|
... alsoProvides(request, IAttributeAnnotatable)
|
|
... request._traversed_names = path.split('/')
|
|
... return request
|
|
|
|
>>> from zope.interface import Interface
|
|
>>> from zope import schema
|
|
>>> from z3c.form import form, field, button
|
|
>>> from plone.z3cform.layout import wrap_form
|
|
|
|
>>> class ICaptchaForm(Interface):
|
|
... subject = schema.TextLine(title=u"Subject",
|
|
... description=u"",
|
|
... required=True)
|
|
...
|
|
... captcha = schema.TextLine(title=u"Captcha",
|
|
... description=u"",
|
|
... required=False)
|
|
|
|
>>> from z3c.form.interfaces import IFieldsForm
|
|
>>> from zope.interface import implements
|
|
>>> class CaptchaForm(form.Form):
|
|
... implements(ICaptchaForm)
|
|
... fields = field.Fields(ICaptchaForm)
|
|
... fields['captcha'].widgetFactory = CaptchaFieldWidget
|
|
...
|
|
... @button.buttonAndHandler(u'Apply')
|
|
... def handleApply(self, action):
|
|
... data, errors = self.extractData()
|
|
... if data.has_key('captcha'):
|
|
... # Verify the user input against the captcha
|
|
... captcha = CaptchaValidator(self.context, self.request, None, ICaptchaForm['captcha'], None)
|
|
... if data.has_key('subject') and captcha.validate(data['captcha']):
|
|
... # if captcha validation passes, print the subject
|
|
... print data['subject']
|
|
... return
|
|
|
|
|
|
>>> form_view = wrap_form(CaptchaForm)
|
|
|
|
>>> from zope.component import provideAdapter
|
|
>>> from zope.publisher.interfaces.browser import IBrowserRequest
|
|
>>> from zope.interface import Interface
|
|
|
|
>>> provideAdapter(adapts=(ICaptchaForm, IBrowserRequest),
|
|
... provides=Interface,
|
|
... factory=form_view,
|
|
... name=u"captcha-form") |