Evita spam en los formularios en tu proyecto Django usando Recaptcha, HoneyPot o Akismet
Este post está relacionado y añadido a una serie que tengo sobre tu proyecto web en Django por si los quieres ver:
- https://christianlr.es/tecnologia/persistencia-de-los-datos-en-django-con-model-y-modelform
- https://christianlr.es/tecnologia/comandos-basicos-para-el-uso-y-desarrollo-de-un-proyecto-con-django
Si no controlas aún lo que es el spam y el concepto "captcha", lee antes este post que te lo explico un poco :)
Hoy os hablaré de cómo proteger (un poco) los formularios de tu sitio web ante ataques de spam y así evitar un gran número de peticiones innecesarias y peligrosas para tu sitio. Como estamos hablando en entorno Django, nos basaremos que ya tienes configurado tu proyecto con sus dependencias funcionando y que quieres protejer un formulario básico.
Los pasos son muy sencillos, lo único que necesitas e antemano son las credenciales/apikeys de algunos de los servicios de ReCaptcha, Honeyport o Akismet que es con lo que la librería de Django trabaja. Los pasos serían:
- Instala el paquete django-antispam. Si usas Django >=4, revisa este post para aplicar un parche
Habilita el nuevo paquete en tu fichero settins.py
En el mismo fichero, configura las apikeys de los servicios que quieras usar
- Ahora nos toca definir en qué formularios queremos el anti-spam. Como en todos los posts que he creado nos basamos en usar "ModelForm", integraremos el anti-spam en el mismo:
# En tu models.py, importa el anti-spam que uses. En mi caso, Recaptcha from antispam.captcha.forms import ReCAPTCHA # Dentro de tu clase modelFrom, añade un nuevo campo # Add captcha field captcha = ReCAPTCHA()
- Finalmente, cargamos la librería en las plantillas que queramos simplemente con:
# En el header de tu plantilla {% load recaptcha %}
- LISTO!!