| Blog Info | Adam Johnson |
|---|---|
| Blog website | Link |
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 MoreSept. 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 MoreSept. 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 MoreSept. 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 MoreSept. 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 MoreSept. 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 MoreAug. 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 MoreAug. 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 MoreJuly 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 MoreJuly 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