Adam Johnson

Blog Info Adam Johnson
Blog website Link

Django: serve apple-app-site-association and assetlinks.json

Oct. 1, 2026 » Adam Johnson » [Archived Version]

If your site has companion Apple or Android apps, you probably want links to your site to open in those apps, when installed. Both platforms support this, with Apple calling the feature Universal Links and Android calling it App Links. But an app can’t just claim to handle your …

Read More

Django: serve a security.txt file

Sept. 30, 2026 » Adam Johnson » [Archived Version]

When a security researcher finds a vulnerability in your site, they need a way to tell you about it. Without a clear contact, they may resort to guessing at addresses like security@<yourdomain>, messaging random folks on social media, or give up. And of course, in the worst case, they …

Read More

Software Engineering: join my meetup in Lisbon, 8th October

Sept. 27, 2026 » Adam Johnson » [Archived Version]

I previously announced my Python optimization workshop in Lisbon, on 10th October (which still has a few places). I am now pleased to add a Python/Django meetup on the Thursday before. Here are the details: What: Software Engineering meetup When: Thursday 8th October 2026, 18:00–20:00 Where …

Read More

Python: join my optimization workshop in Lisbon, 10th October

Sept. 18, 2026 » Adam Johnson » [Archived Version]

I’m running a workshop in Lisbon next month, and you’re invited! It’s a small, in-person, hands-on session on optimizing Python code, with a Django flavour. Here are the details: What: Python optimization workshop When: Saturday 10th October 2026, 10:00–13:00 Where: Martinhal Lisbon Oriente, Parque …

Read More

Django: serve the change password well-known URL

Sept. 15, 2026 » Adam Johnson » [Archived Version]

When a password manager detects that a user’s password has been leaked or reused, it can prompt them to change it, but the password change URL varies by site. The web’s answer to such discovery problems is the reserved /.well-known/ URL namespace (RFC 8615), home to machine-readable files …

Read More

Django: introducing django-mcpz, for making MCP servers

Sept. 14, 2026 » Adam Johnson » [Archived Version]

I made another package! Say hello to django-mcpz, for building Model Context Protocol (MCP) servers in your Django project. The package tagline is easy peasy MCP servers in Django. MCP, the place to be? MCP specifies a way for LLMs to interact with external data sources. MCP servers can expose …

Read More

Django: django-upgrade 1.32.0 out now, with 44 AI-assisted bug fixes

Aug. 17, 2026 » Adam Johnson » [Archived Version]

django-upgrade is my tool for automatically upgrading your project code for new Django versions. It rewrites your Python files to fix deprecations and adopt some new features, taking a chunk of the monotony out of upgrading between Django versions. Yesterday, I released version 1.32.0, which fixes 44 bugs …

Read More

Django: introducing django-msgspec

Aug. 7, 2026 » Adam Johnson » [Archived Version]

It’s another day, another new package day here. Say hello to django-msgspec, a package of drop-in replacements for Django and Django REST Framework (DRF) components backed by msgspec. msgspec is a C-based serialization library covering JSON, MessagePack, YAML, and TOML, with optional schema validation through typed Struct classes. Its …

Read More

Django: release code words up to 6.1

July 23, 2026 » Adam Johnson » [Archived Version]

Did you know that each Django release has a “code word” associated with it? It’s hidden in plain sight, in the announcement blog post describing the list of features coming in the next version. I think this is a lovely little tradition. I last covered the list back in …

Read More

Django: introducing django-crawl

July 21, 2026 » Adam Johnson » [Archived Version]

I recently migrated one of my client projects from the legacy django-csp package to Django 6.0’s built-in Content Security Policy (CSP) support (release note). This security header is a powerful tool for preventing unwanted content from being loaded on your site, so configuration correctness is paramount. The migration …

Read More