[Usuarios-plone] collective.captcha, join_form y contact-info
Mikel Larreategi
mlarreategi at codesyntax.com
Mon Jan 26 14:15:53 UTC 2009
Israel Saeta Pérez(e)k dio:
>
> Por otro lado, después de dos o tres horas más buscando infructuosamente
> cómo activar collective.captcha en los formularios de registro y
> contacto (parece mentira lo torpe que soy o lo escondida que está esta
> información...), he optado por usar provisionalmente Plone Captchas
> hasta que logre saber cómo activar collective.captcha.
>
>
> Es que collective.captcha es un producto genérico para incluir un
> captcha en cualquier sitio, no concretamente en los formularios de
> registro y contacto. En collective.catpcha:browser/captcha.txt tienes
> información sobre como incluirlo y verificarlo en una vista general,
> aunque es probable que no lo puedas utilizar con el join_form y demás ya
> que es un Controller Form Template.
>
(prometo que a la siguiente utilizaré "responder a todos")
Sí, se puede utilizar. De hecho nosotros lo utilizamos en varios sitios.
Lo que hay que hacer es introducir en el formulario el código que te
devuelve el collective.captcha con la imagen y luego en el script que
valida el formulario llamar a la vista que trae collective.captcha para
validar lo que ha introducido el usuario:
En el formulario:
Nosotros solemos poner un archivo llamado captcha_widget.pt con el
siguiente contenido:
1 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"
2 i18n:domain="ataria">
3
4 <body>
5
6 <span metal:define-macro="captcha">
7
8 <div class="field"
9 tal:define="error errors/captcha|nothing;"
10 tal:attributes="class python:test(error, 'field error',
'field')">
11 <label for="captcha"
i18n:translate="label_captcha">Captcha</label>
12
13 <span class="fieldRequired" title="Required"
14 i18n:attributes="title"
15 i18n:domain="plone"
16 i18n:translate="label_required">(Required)</span>
17
18 <div class="formHelp" i18n:translate="help_captcha">
19 Provide the text in the image. Just to avoid spambots
20 </div>
21 <p tal:replace="structure here/@@captcha/image_tag" />
22
23 <div>
24 <input type="text"
25 name="captcha"
26 id="captcha"
27 value="" />
28 </div>
29 </div>
30
31 </span>
32
33 </body>
34 </html>
Y lo incluimos en el formulario con un simple:
<metal:captcha use-macro="here/captcha_widget/macros/captcha" />
Y luego en el script que valida el formulario (en nuestro caso está
basado en CMF Form Controller, por lo que necesitarás los .metadata
apuntando a los sitios adecuados, lo siguiente:
1 ##parameters=
2
3 from Products.csAtaria import AtariaMessageFactory as _
4
5 captcha = context.REQUEST.get('captcha')
6
7 view = context.restrictedTraverse('@@captcha')
8
9 if not view.verify(captcha):
10 state.setError('captcha', _(u'Are you a bot? Try again...'))
11 state.set(status='failure')
12
13 return state
Saludos,
Mikel
--
Mikel Larreategi
mlarreategi at codesyntax.com
CodeSyntax
Azitaingo Industrialdea 3 K
E-20600 Eibar
Tel: (+34) 943 82 17 80
More information about the Usuarios-Plone
mailing list