Read the documentation

Local Image Captchaimage

Distorted characters drawn locally with Pillow. No third party, no network. Rendered through CaptchaField("image"), like any other form field.

CAPTCHA challenge image

The code

class ContactForm(forms.Form):
        name = forms.CharField(max_length=100)
        email = forms.EmailField()
        message = forms.CharField(widget=forms.Textarea)
        captcha = CaptchaField("image")

The POST field this widget submits is named by the service, not by the form. Look at the request payload: the value arrives under image's own field name, and the widget finds it anyway.

See the same provider through the template tag · Package docs