[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