Skip to content
Back to skills

Django Knowledge Patch

ASecurity

Django

  • 24 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
developmentpythongoshellsqlexpressdjangotestingapidatabasebackend

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add Nevaberry/nevaberry-plugins --skill django-knowledge-patch --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Django Knowledge Patch?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Django Knowledge Patch
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nevaberry-django-knowledge-patch/badge)](https://www.skillsdirectory.com/skills/nevaberry-django-knowledge-patch)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: django-knowledge-patch
description: Django
version: "6.0.8"
license: MIT
metadata:
  author: Nevaberry
---


# Django Knowledge Patch

Use this patch when implementing, reviewing, or upgrading Django applications and
extensions. Start with compatibility boundaries, then load only the references for
the affected subsystem.

## Reference index

| Reference | Topics |
| --- | --- |
| [upgrading.md](references/upgrading.md) | Runtime and database floors, release status, removals, deprecations, upgrade boundaries |
| [orm-and-databases.md](references/orm-and-databases.md) | Composite keys, queries, expressions, migrations, backend options and extension APIs |
| [http-security-auth.md](references/http-security-auth.md) | CSP, authentication, sessions, redirects, negotiation, URL handling, DRF |
| [tasks.md](references/tasks.md) | Task declaration, backends, enqueueing, serialization, transactions, context and results |
| [templates-forms-admin.md](references/templates-forms-admin.md) | Template partials and tags, form rendering, accessibility and admin behavior |
| [email-and-feeds.md](references/email-and-feeds.md) | Modern mail objects, attachments, keyword-only calls, mail backends and feed stylesheets |
| [gis.md](references/gis.md) | Geometry APIs, spatial operations, GeoIP2, widgets and input limits |
| [tooling-testing-serialization.md](references/tooling-testing-serialization.md) | Shell imports, commands, testing, pagination, serializers, scaffolding and static files |

## Check compatibility before changing code

Read [upgrading.md](references/upgrading.md) before modifying dependencies or
compatibility shims. In particular:

- Match Python, database, GIS library and `asgiref` versions to the target Django
  series.
- Confirm whether a development series is actually finalized before choosing it as
  an upgrade target.
- Search for removed APIs before treating import, argument or extension-hook errors
  as local bugs.
- Review deprecations against the application's next intended upgrade boundary.
- Test third-party database, field, constraint, mail, middleware, admin, prefetch and
  widget extensions against their changed contracts.

High-impact removals and transitions include:

- Replace `DEFAULT_FILE_STORAGE`, `STATICFILES_STORAGE` and
  `get_storage_class()` with `STORAGES` and storage aliases.
- Replace `Meta.index_together` and removed PostgreSQL case-insensitive field APIs.
- Remove legacy SHA1 and unsalted password hashers from configured hasher lists.
- Give `ModelAdmin.lookup_allowed()` overrides a `request` argument.
- Pass arguments to `format_html()` and keyword arguments to `BaseConstraint`.
- Replace removed joining-column, singular prefetch and field-cache extension hooks.
- Return ORM SQL parameters as tuples and make custom `Field.pre_save()` methods
  idempotent.
- Update custom mail classes for the standard-library message object and modern
  email policy; pass optional core-mail parameters by keyword.

## Work with composite primary keys

Declare a virtual primary key whose component order defines tuple semantics:

```python
class OrderLineItem(models.Model):
    pk = models.CompositePrimaryKey("product_id", "order_id")
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    order = models.ForeignKey(Order, on_delete=models.CASCADE)

item = OrderLineItem.objects.get(pk=(1, "A755H"))
```

Account for these boundaries:

- Do not ask migrations to add, remove or convert a composite primary key or its
  component fields. Change the schema separately and synchronize migration state.
- Foreign keys, generic relations and the admin do not support composite-key models.
- The virtual `pk` is omitted from `ModelForm`; inspect `_meta.pk_fields` in
  reusable code because component fields do not set `primary_key=True`.
- Most single-expression database functions reject a composite expression;
  `Count("pk")` is supported.
- Use tuple values for assignment and filtering in component declaration order.
- Raw queries and composite-key subqueries have additional version-dependent
  support; consult [orm-and-databases.md](references/orm-and-databases.md).

## Queue work with the Tasks API

Declare tasks with `@django.tasks.task`, then enqueue them:

```python
from django.tasks import task

@task(priority=2, queue_name="emails")
def email_users(user_ids):
    ...

result = email_users.enqueue([1, 2])
```

The built-in backends are development and testing facilities:

- `ImmediateBackend` executes synchronously.
- `DummyBackend` records enqueue operations without executing them.
- Production execution requires a third-party backend and worker.

Pass JSON-round-trippable identifiers rather than model instances, datetimes or
tuples. Enqueue database-dependent work from `transaction.on_commit()`. Use
`aenqueue()` from async code. Read [tasks.md](references/tasks.md) before relying
on delayed execution, priorities, result lookup or backend-specific capabilities.

## Configure Content Security Policy deliberately

Install `ContentSecurityPolicyMiddleware` and define `SECURE_CSP`,
`SECURE_CSP_REPORT_ONLY` or both. Use `django.utils.csp.CSP` constants so quoted
source expressions are correct.

```python
from django.utils.csp import CSP

SECURE_CSP_REPORT_ONLY = {
    "script-src": [CSP.SELF, CSP.NONCE, CSP.STRICT_DYNAMIC],
    "report-uri": "/csp-reports/",
}
```

Remember:

- Report-only policy needs a reporting directive and receiver; Django supplies no
  receiver.
- Add the CSP context processor before rendering `nonce="{{ csp_nonce }}"`.
- Do not full-page-cache responses containing a per-request nonce.
- View decorators replace the global mapping rather than merging with it.
- An empty override mapping disables that header for the view.

See [http-security-auth.md](references/http-security-auth.md) for middleware,
authentication, sessions, redirects, negotiation and URL behavior.

## Use current HTTP helpers

- Call `request.get_preferred_type()` with producible media types in
  server-preference order and handle `None`.
- Pass `query=` and `fragment=` to `reverse()` or `reverse_lazy()`.
- Use `preserve_request=True` when a redirect must retain method and body.
- Pass `query_params=` to test clients and request factories for any HTTP method.
- Expect `URLField` to assume HTTPS for schemeless input.
- Configure API authentication in DRF itself; `LoginRequiredMiddleware`
  intentionally does not govern DRF API views.

## Render reusable template fragments

Define and render a named partial in a template:

```django
{% partialdef filter_controls inline %}
  <form>{{ filter_form }}</form>
{% endpartialdef %}

{% partial filter_controls %}
```

Append `#<partial-name>` to a template name to render only that fragment from a
view. Use `simple_block_tag()` for paired tags whose implementation only needs the
rendered block content. See
[templates-forms-admin.md](references/templates-forms-admin.md) for custom
`BoundField` selection, accessible error markup, form media and admin changes.

## Use current ORM capabilities safely

- Expect `values()` and `values_list()` projections to follow call-site order.
- Wrap a literal `StringAgg` delimiter in `Value()` because the delimiter is an
  expression.
- Supply `Aggregate.order_by` only to aggregate classes that opt in with
  `allow_order_by`.
- Use `AnyValue` when grouping rules require an arbitrary non-null representative.
- Treat expression and `GeneratedField` values after `save()` according to backend
  returning support; some backends defer refresh until access.
- Catch the model-specific `Model.NotUpdated` after a forced update affects no rows.
- Use `AsyncPaginator` and `AsyncPage` in asynchronous code.
- Validate fetch policy and database-level foreign-key behavior before adopting
  their newer APIs.

Load [orm-and-databases.md](references/orm-and-databases.md) for backend-specific
behavior and extension contracts.

## Modernize email integrations

Prefer `email.message.MIMEPart` for structured and inline attachments. Expect
`EmailMessage.message()` to return the standard-library message class under the
modern policy. Treat attachments and alternatives as named tuples where Django
exposes them, and add alternatives only with `attach_alternative()`.

Read [email-and-feeds.md](references/email-and-feeds.md) before maintaining custom
mail classes, legacy MIME attachment code, multiple backend configurations,
header-error handling, or `ADMINS` and `MANAGERS` settings.

## Apply async and testing updates

- Use native async authentication, permission, session, pagination and task APIs
  where available.
- Let `method_decorator()` wrap async view methods directly.
- Use a database-enabled test class for database access from threads.
- Expect assertion failures and `test --pdb` to stop at the calling test frame.
- Account for fixture data being available during
  `TransactionTestCase.setUpClass()`.
- Parallel tests can run under the multiprocessing `forkserver` start method.

## Implementation workflow

1. Identify the affected topic and load its reference file.
2. Check removals and future boundaries before selecting a compatibility approach.
3. Distinguish core support from backend-specific support and opt-in capabilities.
4. Preserve async behavior when wrapping views, middleware, authentication or
   database work.
5. Run Django system checks and targeted tests after changing extension points.
6. Test migrations against both model state and database state when an operation
   is state-only.
7. Test generated SQL and parameter types for custom ORM components.
8. Verify security headers, nonce uniqueness, redirects and content negotiation at
   the HTTP level.

Files in this skill

  • SKILL.md7.3 KB
  • references/background-tasks.md1.9 KB
  • references/csp.md1.3 KB
  • references/migration-guide.md1.9 KB
  • references/models-and-orm.md2.9 KB
  • references/templates.md1.6 KB
  • references/views-and-http.md1.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…