Lesson 22 / 22 · Commentail 1.3.2
This is the complete technical reference for 1.3.2, not a dictionary to paste in full. Keep library defaults unless a particular requirement calls for an override.
Read the table
Durations are integer seconds. None is Python's value, not the string "None". Callbacks use full import-path strings. Normal limits are positive; zero is supported only for explicitly documented disable switches. Run python manage.py check; commentail.E001 means configuration must be corrected before use.
Resolution is library default → default section → exact Site hostname. Merge tutorial examples into one COMMENTAIL dictionary. Multiple assignments do not merge; the last replaces earlier values.
Output format and object registration
| Setting | Default | Purpose |
|---|---|---|
STRUCTURED_DATA
|
"both"
|
Schema.org output: both, json_ld, microdata or off; per-host overrides supported. See Structured data.
|
OBJECT_ADAPTERS
|
{}
|
Model label → adapter class import path (project-wide). |
CSV rule imports
| Setting | Default | Purpose |
|---|---|---|
RULES_CSV_MAX_BYTES
|
5242880
|
Maximum CSV upload bytes (project-wide). |
RULES_CSV_MAX_ROWS
|
20000
|
Maximum imported rule rows (project-wide). |
Forms, editing and email confirmation
| Setting | Default | Purpose |
|---|---|---|
FORM_TICKET_SECONDS
|
3600
|
Private form/recovery ticket lifetime; also the local binding lifetime for bundled Google/Yandex widgets. |
FORM_IP_LIMIT_PER_MINUTE
|
120
|
New form/recovery tickets per IP/Site/minute, including registered users and navigation.
|
FORM_IP_LIMIT_PER_HOUR
|
1200
|
New form/recovery tickets per IP/Site/hour. Existing valid forms remain usable.
|
EDIT_WINDOW_SECONDS
|
900
|
Edit window from publication; accepted replies lock earlier. |
EMAIL_CONFIRM_SECONDS
|
86400
|
Confirmation deadline from initial acceptance. |
GUEST_GRANT_SECONDS
|
2592000
|
Browser proof lifetime from confirmation; never sliding. |
CAPTCHA and its limits
| Setting | Default | Purpose |
|---|---|---|
CAPTCHA_SECONDS
|
300
|
Arithmetic/custom CAPTCHA expiry. Bundled Google/Yandex bindings use FORM_TICKET_SECONDS; provider token expiry remains enforced remotely.
|
CAPTCHA_ATTEMPTS
|
5
|
Attempts per challenge. |
CAPTCHA_IP_LIMIT_PER_MINUTE
|
10
|
Challenge creations per IP/Site/minute.
|
CAPTCHA_IP_LIMIT_PER_HOUR
|
100
|
Challenge creations per IP/Site/hour.
|
CAPTCHA_BACKEND
|
None
|
Backend class import path; None selects arithmetic.
|
CAPTCHA_OPTIONS
|
{}
|
External adapter site_key, secret_key and optional timeout (1–10 seconds, default 3). Replaced as a whole per Site.
|
GUEST_CAPTCHA_MODE
|
'adaptive'
|
Remembered guests skip CAPTCHA unless enabled header signals apply; 'always' checks every guest.
|
Comment submissions and confirmation resends
| Setting | Default | Purpose |
|---|---|---|
AUTHOR_MIN_INTERVAL
|
30
|
Minimum seconds between author submissions. |
AUTHOR_LIMIT_PER_HOUR
|
20
|
Accepted submissions per account/email per Site/hour.
|
IP_LIMIT_PER_HOUR
|
100
|
Accepted submissions per IP per Site/hour.
|
RESEND_MIN_INTERVAL
|
60
|
Minimum seconds between confirmation resends. |
RESEND_LIMIT_PER_HOUR
|
5
|
Resends per author/Site/hour.
|
RESEND_IP_LIMIT_PER_HOUR
|
20
|
Resends per IP/Site/hour.
|
Proxies and additional spam signals
| Setting | Default | Purpose |
|---|---|---|
TRUSTED_PROXIES
|
[]
|
Trusted proxy networks; [] uses the direct peer and ignores forwarded IPs. Configure explicitly behind nginx; see the example and trust boundaries.
|
GUEST_REQUEST_CHECKS
|
['missing_user_agent', 'cross_site']
|
Supplemental guest header signals; [] disables these signals only.
|
GUEST_FORM_MIN_SECONDS
|
2
|
Fast-form review threshold, not a submission delay; 0 disables timing.
|
GUEST_ATTEMPTS_PER_MINUTE
|
10
|
Guest attempts per session/Site, including failed proofs.
|
GUEST_IP_ATTEMPTS_PER_MINUTE
|
30
|
Guest attempts per IP/Site/minute.
|
GUEST_IP_ATTEMPTS_PER_HOUR
|
300
|
Guest attempts per IP/Site/hour.
|
GUEST_DUPLICATE_WINDOW_SECONDS
|
3600
|
Review repeated guest text within this Site/window; 0 disables comparison and new fingerprint storage.
|
GUEST_DUPLICATE_MIN_LENGTH
|
80
|
Minimum normalized text length for duplicate checks. |
GUEST_LINK_REVIEW_THRESHOLD
|
3
|
Review guest text with at least this many explicit HTTP(S)/www link occurrences; 0 disables.
|
Mail queue and action links
| Setting | Default | Purpose |
|---|---|---|
MAIL_RETENTION_SECONDS
|
604800
|
Queued notification lifetime. |
MAIL_LEASE_SECONDS
|
300
|
Outbox worker claim lease. |
MAIL_RETRY_SECONDS
|
[60, 300, 900]
|
Automatic retry delay sequence in seconds. |
ACTION_LINK_SECONDS
|
2592000
|
General action-link lifetime, not an extension of edit eligibility. |
Project callbacks
| Setting | Default | Purpose |
|---|---|---|
CAN_SEND_GUEST_EMAIL
|
None
|
Offline guest recipient access-check callback import path. |
GET_COMMENT_TEMPLATES
|
None
|
Dynamic Page template dependency callback import path.
|
GET_AVATAR
|
None
|
Avatar callback import path. |
GET_AUTHOR_NAME
|
None
|
Current account name callback import path. |
Settings outside this dictionary
Open/Read only/Hidden, moderation, access, text length, clickable links and decision notices belong in Wagtail. Send emails and Highlight staff are Site-only; the other listed editorial fields support Page/object overrides. Mail transport uses EMAIL_BACKEND and Django/provider settings rather than COMMENTAIL keys.
Existing tokens retain their issued deadlines after a duration change. Raising quotas should not substitute for correcting proxy configuration. Hostname CAPTCHA_OPTIONS replaces the whole dictionary. OBJECT_ADAPTERS and RULES_CSV_* belong only in default.
After a change run check, restart affected processes and repeat the relevant reader flow. For delivery, verify both website and worker environments.
Related lessons
3. Site settings and the reader journey5. Environment variables without key confusion- 21. Troubleshoot a Commentail installation
Choose a sign-in method or comment as a guest below.