Skip to main content

Django Friendly Captcha

image PyPI - Downloads image Ruff

Django field/widget for Friendly Captcha (https://friendlycaptcha.com).

Installation

Latest version:

pip install -e git+git://github.com/christianwgd/django-friendly-captcha.git#egg=django-friendly-captcha

Stable version:

pip install django-friendly-captcha

Documentation

Usage

Add 'friendly_captcha' to your INSTALLED_APPS.

INSTALLED_APPS = [
    ...
    'friendly_captcha',
]

Add the captcha field to your form:

from friendly_captcha.fields import FrcCaptchaField


class ContactForm(forms.ModelForm):

    class Meta:
        model = ContactMessage
        fields = (
            'name', 'email', 'subject', 'text'
        )

    captcha = FrcCaptchaField()

As of version 0.1.7 the javascript static assets are included in the widget, so there is no need to do that in your project templates. Version 0.1.10 includes friendly captcha version 0.9.15 javascript files. If you need a different version you can set these by providing them in your settings:

FRC_WIDGET_MODULE_JS = 'https://unpkg.com/friendly-challenge@0.9.8/widget.module.min.js'
FRC_WIDGET_JS = 'https://unpkg.com/friendly-challenge@0.9.8/widget.min.js'

For version 0.1.6 and below you need to include the script tags from Friendly Captcha to your forms template (see https://docs.friendlycaptcha.com/#/installation)

<script type="module" src="https://unpkg.com/friendly-challenge@0.9.8/widget.module.min.js" async defer></script>
<script nomodule src="https://unpkg.com/friendly-challenge@0.9.8/widget.min.js" async defer></script>

If you build up your form from single fields, dont't forget to include the captcha form field.

Configuration

[!NOTE] FRC_CAPTCHA_VERSION defaults to 'v1', so if you omit this setting or set to None v1 is used. There's no need to take any action if you stick to version 1.

v1

Register to Friendly Captcha at https://friendlycaptcha.com/signup to get your site key and captcha secret.

FRC_CAPTCHA_VERSION = 'v1'
FRC_CAPTCHA_SECRET = '<yourCaptchaSecret'
FRC_CAPTCHA_SITE_KEY = '<yourCaptchaSiteKey>'

There's no need to specif the captcha verification URL anymore, this is handled automatically.

v2

Instead of a secret you now get new API-Key with your registration. If you're already registered reach out to the friendly-captcha Website to get your API-Key.

FRC_CAPTCHA_VERSION = 'v2'
FRC_CAPTCHA_API_KEY = '<yourCaptchaApiKey'
FRC_CAPTCHA_SITE_KEY = '<yourCaptchaSiteKey>'

There's also a new setting to specify the endpoint region ("EU" or "global"). Please note that you need to have a special plan to choose a special endpoint. (See the friendly captcha docs for more information).

FRC_CAPTCHA_ENDPOINT = 'eu | global'

The setting defaults to 'global'.

For Friendly Captcha v2, the backend verification uses an API key. The old [secret]{.title-ref} field is no longer used for v2 verification. Point the verification URL at the v2 endpoint:

FRC_CAPTCHA_API_KEY = '<yourCaptchaApiKey>'
FRC_CAPTCHA_VERIFICATION_URL = 'https://global.frcapi.com/api/v2/captcha/siteverify'

You can also set the version explicitly:

FRC_CAPTCHA_VERSION = 2

If [FRC_CAPTCHA_VERSION]{.title-ref} is omitted, the package switches to v2 automatically when it sees a v2 verification URL or an API key.

The Risk Intelligence feature mentioned in the v2 docs is separate from captcha verification. It adds extra risk data to the successful siteverify response when enabled, but it does not replace the API key needed for backend verification.

In default the form will fail with an error ('Captcha test failed'). You can change this behaviour by setting FRC_CAPTCHA_FAIL_SILENT to True.

FRC_CAPTCHA_FAIL_SILENT = False

When setting FAIL_SILENT to True it's up to you to handle captcha verification:

# in your form view
def form_valid(self, form):
    captcha_verified = form.cleaned_data['captcha']
    if captcha_verified:
        # send mail or whatever ...
    else:
        # captcha verification failed, do nothing ...

If the captcha response returns with some http code other than 200, that doesn't mean the captcha result is invalid, it simply wasn't able ot resolve the puzzle (because i.e. the friendly-captcha server is down or there are network problems). You can specify how to deal with those responses by setting

FRC_CAPTCHA_ACCEPT_UNVERIFIED = False|True

FRC_CAPTCHA_ACCEPT_UNVERIFIED defaults to False.

As of version 0.1.11 there's a new settings option to get a mocked value from the captcha verification. You can set FRC_CAPTCHA_MOCKED_VALUE to True or False, depending on the value you need for testing. The default value is unset which equals to None.

FRC_CAPTCHA_MOCKED_VALUE = None|False|True

Custom widget attributes

You can add custom widget attrs to the FrcCaptchaField like in any other Django field:

captcha = FrcCaptchaField(widget=FrcCaptchaWidget(attrs={'data-start': 'auto'}))

See https://docs.friendlycaptcha.com/#/widget_api for additional widget attrs. The data-lang attr is set from your Django configured language.

Logging

If you want to log the results of the captcha verifications you can add a logger to your logging configuration:

'django.friendly_captcha': {
    'handlers': ['default'],
    'level': 'INFO',
}

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_friendly_captcha-0.2.0.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_friendly_captcha-0.2.0-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file django_friendly_captcha-0.2.0.tar.gz.

File metadata

  • Download URL: django_friendly_captcha-0.2.0.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for django_friendly_captcha-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6fcdaa6a277767f88ce89d67a26b5e6a58a2ac2e106f50ce4b8e7f002978549b
MD5 f6c0aab21dc5ef1f6895ad59607162d0
BLAKE2b-256 f9d8ad1fd1d83ec5dcc25606da0c77760a6c2c5608baabce718b3ff09d226658

See more details on using hashes here.

File details

Details for the file django_friendly_captcha-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_friendly_captcha-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 18f9cf7830b93dc86dcf953942c8e65d3852d342124eaa5fc239e177a07c060c
MD5 9d3da3f37a8d21b5c81104621ae5b232
BLAKE2b-256 3cace67913e1646c0de4f60b94b47e9d0777120147ec941c8cefbb2bb3da1c0e

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.3

2 files

0.2.1

2 files

This release

0.2.0 This release

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page