$ cat django/week/2026-10-19.log
the week in review · Oct 19 – Oct 25, 2026
CVE records can scope regressions per branch
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Django's security checklist can now name the first affected release on each branch, cutting over-broad advisory ranges; CSP nonce fixes and a cached_property deprecation also landed.
[checklists] Allowed choosing the first affected release per branch in CVE records. django/djangoproject.com
The checklist previously forced every branch to be listed as affected from its feature version, which overstated the range for regressions introduced by an earlier security fix within the same series. Security team members composing advisory text get a per-branch starting point instead, so published ranges should stop covering releases that never carried the flaw.
Fixed #37419 -- Included CSP nonces in headers for streaming responses. django/django
The nonce now appears in headers for streaming responses, so a StreamingHttpResponse no longer loses its CSP nonce when the policy is attached. Reported by Michael Codispoti, reviewed by Jake Howard, Jacob Walls and Rob Hudson.
Fixed #37395 -- Emitted 'none' for CSP directives left empty by an unused nonce. django/django
When a directive's only source is CSP.NONCE and the nonce goes unused, the stripped sentinel left the directive empty and it was dropped from the header entirely, falling the browser back to the default. It now emits 'none', which is the difference between a policy and no policy at all.
Fixed #37431 -- Preserved frozendict values in migration serialization. django/django
MigrationWriter treated Python 3.15's built-in frozendict as a generic iterable and dropped its values when writing migrations. Keys and values now serialize, so migrations generated on 3.15 stop silently losing data.
Fixed #37433 -- Escaped database error messages logged by Q.check(). django/django
Database error messages can embed the values being validated, and those values may come from user input. Q.check() now escapes them before logging, closing a channel for input to land unescaped in logs.
Allow nesting ThreadSensitiveContext. (#596) django/asgiref
A provided executor lets thread-sensitive work move off the wrapping context's worker, which matters when nesting sync_to_async boundaries. Tracked back to ticket 33882.
Fixed #37396 -- Added gettext to PATH in Windows CI. django/django
Chocolatey's gettext bin directory was not on PATH for later steps, so tests needing msgfmt and xgettext were skipped on Windows and failures there could pass unnoticed. PoFileTests.test_no_write_access is skipped on Windows, where chmod() cannot make a directory read-only.
Results for ubuntu-latest added [skip ci] django/django-asv
by Github Bot
Alongside: the benchmark suite now collects ubuntu-latest results, build_doc_release runs each Sphinx build in its own sphinx-build subprocess, the annual release cycle is documented in the release process docs, UUIDTextMixin no longer mutates its lookup in place, and djangosnippets replaced a dependency that no longer exists on PyPI.
$ ls django/week/ # the briefings behind this review
Keep up with Django in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.
Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.