añadir reCaptcha en un formulario ordinario

58 views
Skip to first unread message

nicolás rosbaco

unread,
Feb 8, 2017, 7:44:36 AM2/8/17
to web2py-...@googlegroups.com
Hola compañeros/as: intento agregar recaptcha en algunos formularios (login y registro ya anda). Pero ahora en uno de contacto... por lo que leo en el libro debería hacerse así:

formulario.element('table').insert(-1,TR('',Recaptcha(...),''))

que en mi caso sería (porque lo genero de este modo: form=SQLFORM(db.contacto):


form.element('table').insert(-1,TR('',Recaptcha(request,PUBLIC_KEY, PRIVATE_KEY),''))

las constantes ya las declaré en el modelo, y funcionan porque en login y registro el recaptcha anda bien.

Bueno, tengo el siguiente error al ejecutarlo:

<type 'exceptions.AttributeError'> 'NoneType' object has no attribute 'insert'"

(entre muchas otras cosas, pruebo (porque leí por ahí que no sería insert sino append y es lo mismo...)

¿Alguna sugerencia?


Javier Pepe

unread,
Feb 8, 2017, 8:35:39 AM2/8/17
to web2py-...@googlegroups.com
Hola

tendrías que probar de la siguiente manera:

form.insert(-1,TR('',Recaptcha(request,PUBLIC_KEY, PRIVATE_KEY),''))
 o 
form.append(Recaptcha(request,PUBLIC_KEY, PRIVATE_KEY))

Lo que te dice el error es que no tenes un elemento table, en form.
Posiblemente haya una diferencia en el manual con la implementación actual del SQLFORM y lo que devuelve.



--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

nicolás rosbaco

unread,
Feb 8, 2017, 9:10:59 AM2/8/17
to web2py-...@googlegroups.com
Gracias Javier!!!!!!!!
Anduvo de diez, ahora veo como modifico la organización desde el css.
10^6 gracias




Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.

nicolás rosbaco

unread,
Feb 8, 2017, 1:10:34 PM2/8/17
to web2py-...@googlegroups.com
Hola, insisto pero con otra cuestión, sobre el mismo tema.
lo resolví así:
form.append(Recaptcha(request,PUBLIC_KEY, PRIVATE_KEY,label='Verificar entrada',error_message='inválido',options="theme:'dark', lang:'es'"))

El tema es que queda "MUY feo"


Es como que no se integra a la estructura general del formulario.... alguna idea de como mejorar esto?? (porque en el de login queda bastante mejor).

Gracias desde ya



Javier Pepe

unread,
Feb 8, 2017, 6:20:47 PM2/8/17
to web2py-...@googlegroups.com
Nicolas

Tendrías que usar el insert, o armar el formulario en forma manual en la vista:

Lo vas armando con los componentes del formulario:

{{=form.custom.begin}}
Campo 1:{{=form.custom.widget.campo1}}
Campo 2:{{=form.custom.widget.campo2}}
{{=captcha}}
{{=form.custom.end}}

Esto lo podes hacer con div, y queda bien prolijo, y pones los elementos como quieras, uno al lado del otro, varias columnas y filas, lo que mejor te quede.

** Pones el captcha en una variable.






Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.

nicolás rosbaco

unread,
Feb 9, 2017, 3:22:22 AM2/9/17
to web2py-...@googlegroups.com
Gracias mil!!!
Comento, por si aparece alguién más con el mismo tema, que opté por NO agregar en el controlador en captcha al formulario, sino (siguiendo este consejo de customizar la vista del formulario) lo incorporo directamente en la vista.

Me quedó así:

<section id="formulario-contacto">
<article>
    {{=form.custom.begin}}
    <div class="itemFormulario">
        <p>Su Nombre:</p>{{=form.custom.widget.nombre}}
    </div>
    <div class="itemFormulario">
        <p>Asunto de este comentario:</p>{{=form.custom.widget.asunto}}
    </div>
    <div class="itemFormulario">
        <p>¿A qué dirección electrónica le respondemos?:</p>{{=form.custom.widget.direccion}}
    </div>
    <div class="itemFormulario">
        <p>Su comentario:</p>{{=form.custom.widget.comentario}}
    </div>
    <div class="itemFormulario">
        <div class="g-recaptcha" data-sitekey="6LdFuhQUAAAAAMS5t4c-c5u521ro_GnnxPgGqZ7J"></div>
    </div>
    <div class="itemFormulario">
        <div id="enviar">{{=form.custom.submit}}</div>
    </div>
{{=form.custom.end}}
</article>
</section>


Debiendo agregar en el head del layout.html (después veo como lo agrego solo para esta vista) el JS de re-captcha

<script src='https://www.google.com/recaptcha/api.js'></script>

Muchas gracias!!!

Esto me generó el nuevo recaptcha, ese simplificado de un checkbox.

De nuevo gracias y nos seguimos leyendo.








Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.

Para acceder a más opciones, visita https://groups.google.com/d/optout.

--
Has recibido este mensaje porque estás suscrito al grupo "web2py-usuarios" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.
Message has been deleted

Juan Carlos

unread,
Jun 16, 2017, 4:51:24 AM6/16/17
to web2py-usuarios
Buenas, utiliza recaptcha2, añade el 2 para que use la nueva versión de google y que acepte las keys.
def captcha_field(request=request):
from gluon.tools import Recaptcha2
w = lambda x, y: Recaptcha2(request, '6LfquBsUAAAAANC2iLkey....',
'6LfquBsUAAAAABJ1bFixLAZak8d4Hkey....')
return Field('captcha', 'string', label='verify', widget=w, default='ok')

nicolás rosbaco

unread,
Dec 7, 2017, 9:48:13 AM12/7/17
to web2py-...@googlegroups.com
Hola, discuplen por reflotar esto tan viejo.
Ando queriendo usar recaptcha 2 de "forma nativa"; no debiendo editar la vista del formulario.
¿dónde iría este código que me sugerís Juan Carlos?
Gracias desde ya




--

Juan Carlos

unread,
Dec 7, 2017, 10:24:13 AM12/7/17
to web2py-usuarios
Hola Nicolás, prueba a poner esto en tu model.py
def captcha_field(request=request):
from gluon.tools import Recaptcha2
    w = lambda x, y: Recaptcha2(request, 'key',
'key')

return Field('captcha', 'string', label='verify', widget=w, default='ok')
Luego en el controlador, donde creas el formulario:
ejemplo = SQLFORM.factory(Field(
Field('ejemplo'),
Field('ejemplo'),
Field('ejemplo',
Field('ejemplo'),
Field('ejemplo'),
                               captcha_field()) 

Así se mostrará sin tener que tocar la vista, espero que te sirva, un saludo!




Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuari...@googlegroups.com.

nicolás rosbaco

unread,
Dec 7, 2017, 10:31:09 AM12/7/17
to web2py-...@googlegroups.com
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Buenísimo, ahora entendí!!!!
Millón^3 de gracias!

PD: Anda perfecto!!!!!




Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a web2py-usuarios+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages