Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Django: what’s new in 6.0
Django 6.0 was released today, starting another release cycle for the loved and long-lived Python web framework (now 20 years old!). It comes with a mosaic of new features, contributed to by many, some of which I am happy to have helped with. Below is my pick of highlights from the release notes. Upgrade with help from django-upgrade If you’re upgrading a project from Django 5.2 or earlier, please try my tool django-upgrade. It will automatically update old Django code to use new features, fixing some deprecation warnings for you, including five fixers for Django 6.0. (One day, I’ll propose django-upgrade to become an official Django project, when energy and time permit…) Template partials There are four headline features in Django 6.0, which we’ll cover before other notable changes, starting with this one: The Django Template Language now supports template partials, making it easier to encapsulate and reuse small named fragments within a template file. Partials are sections of a template marked by the new {% partialdef %} and {% endpartialdef %} tags. They can be reused within the same template or rendered in isolation. Let’s look at examples for each use case in turn. Reuse partials within the same … -
Safe Django database migrations on Coolify
Deploying Django on Coolify has been fantastic so far: automatic builds, atomic releases, ephemeral containers, and simple scaling. In a previous article I explained how I set up my Django projects in Coolify, including the fact that migrations run as part of the build step. This works great for most migrations: failures abort the build, no partial deploys, no surprises. But it breaks down for one specific class of migrations: schema-destructive migrations, i.e. migrations that remove fields, drop tables, rename columns, or otherwise make the existing running code incompatible with the current database schema. Coolify builds your new container, applies the migrations, and only afterwards starts replacing the running container with the new one. During that in-between period (usually 1–2 minutes depending on your image size) your old Django container is still running code that expects the old schema. If a column has just been removed… boom: 500 errors for users until the new container becomes healthy and takes over. Why you can’t just move the migration step Your first instinct might be to change when the migrations run. Let’s look at some alternatives and why they don’t solve the root problem. Strategy A: the post-deploy hook You could remove … -
Safe Django migrations without server errors
One of the best features of modern container-based deployment platforms (Coolify included) is that they give you zero downtime rolling updates out of the box. When you push code, a new image is built, migrations run, and traffic only shifts to the new container when it’s healthy. However, this convenience creates a hidden trap for Django developers. Because Coolify performs a rolling update, there is a window of time (usually 1–2 minutes) where both the old and new versions of your application are running simultaneously against the same database. This works fine if you are just adding a new table. But if you run a destructive migration, like removing a field or renaming a column, your deployment becomes a race condition. The new container runs the migration, the database schema changes, and your old container (which is still serving live traffic) immediately starts throwing 500 errors because it’s trying to query a column that no longer exists. This isn’t a limitation of Coolify; it is a fundamental constraint of rolling deployments. Heroku, Render, Fly.io, ECS, Kubernetes — anything that swaps containers while the old version is still serving traffic has the same constraint. You cannot fix this by changing where … -
Django News - Sales and AI in the Real World - Nov 28th 2025
News Python Black Friday & Cyber Monday sales (2025) More Black Friday and Cyber Monday deals for Python and Django developers! LearnDjango has 50% off courses too! treyhunner.com Django Software Foundation DSF member of the month - Akio Ogasahara Akio Ogasahara, DSF member of the month, contributes extensive Japanese documentation translation, advocates Django admin for operations and highlights Django security alongside AI assisted development. djangoproject.com Python Software Foundation PyPI and Shai-Hulud: Staying Secure Amid Emerging Threats PyPI warns developers about the Shai-Hulud npm supply chain campaign, revoking exposed tokens and recommending trusted publishers, CI workflow audits, and token rotation. pypi.org Wagtail CMS News Wagtail 7.2.1 Wagtail shipped several fixes that improve userbar previews, document and image handling, search stability, and reference index performance, along with a small search test cleanup. github.com Sponsored Link 1 Sleep tight with HackSoft and our Django services! While you recharge, we keep your software running smoothly - secure, stable, and ready for tomorrow. We are HackSoft - your Django development partner, beyond code. Learn more! hacksoft.io Articles Django: implement HTTP bearer authentication Shows how to implement simple single token HTTP Bearer authentication in Django views with secure compare, unit tests, and a reusable decorator. adamj.eu … -
Stop scrolling the admin apps
Below is a tiny javascript snippet to add to the end of the admin/base.html. This little snippet with ensure the current app in the left hand navigation is always at the top of the viewport when navigating between admin pages. Very handy when you have lots of apps and models! <script> const current_app_nav = document.querySelector(".current-app"); current_app_nav.scrollIntoView(true, {block: 'center', container: 'nearest', inline: 'nearest'}); window.scrollBy(0, -100); </script> Enjoy! -
AI in the Real World - Marlene Mhangami & Tim Allen
Marlene’s personal website and Tim’sKeynote: Django Reimagined For The Age of AI by Marlene at DjangoCon US and GitHub repoWhat a Decade! by Tim at DjangoCon USDjango Girls OfflineSponsorThis episode was brought to you by HackSoft, your development partner beyond code. From custom software development to consulting, team augmentation, or opening an office in Bulgaria, they’re ready to take your Django project to the next level! -
Django and password manager SDKs
In my current project, I'm going to be storing a fair number of different API credentials, first those that we own and then plenty of OAuth credentials from our customers. Today I am pondering the first scenario and wondering what how I can store these securely and with the prinicple of least privilege. Currently I'm using django-allauth's socialaccount models to store these details, it's a nice abstraction and I can add relationships from my models to the models allauth provides to dynamically select the appropriate credentials I need to access the relevant API. However the secrets are stored in plain CharFields and are accessible from the admin. That's fine for now, but soon that's not going to fly. I could store these as environment variables, but this goes against the current dynamic design of holding configuration in the database, which allows me to switch API clients and tokens without a code deploy. Last night I was listening to a 1password advert about their SDK which goes beyond a CLI interface allowing developers to interact with their platform. Bitwarden (my password manager of choice) also has this capability and this got me wondering, what would Django integration to these providers look … -
Django: implement HTTP bearer authentication
HTTP has a general authentication framework that defines a pattern into which various authentication schemes can fit. Clients may provide an authorization request header that contains a credential. If authorization is missing or invalid, the server may respond with a 401 (Unauthorized) status code, including a www-authenticate header advertising what authentication schemes are supported. Otherwise, the server can respond with the authenticated resource. The simplest authentication scheme in this framework is called Bearer, where the client needs to provide a valid token (typically a randomly generated string) in authorization. Bearer authentication is commonly used in APIs, where it’s convenient to provide a single token rather than a username and password. Django-based API frameworks provide built-in support for Bearer authentication, such as Django REST Framework’s TokenAuthentication or django-ninja’s authentication layer. But for simple cases, such frameworks can be a bit heavyweight, and you might want to implement Bearer authentication yourself, which only takes a few lines of code. Here’s an example implementing single-token Bearer authentication for a Django view returning JSON data: import os import secrets from http import HTTPStatus from django.http import JsonResponse SECRET_STUFF_TOKEN = os.environ.get("SECRET_STUFF_TOKEN", "") def secret_stuff(request): authorization = request.headers.get("authorization", "") if not SECRET_STUFF_TOKEN or not secrets.compare_digest( f"Bearer … -
Django News - Django 6.0 release candidate 1 released - Nov 21st 2025
News Django 6.0 release candidate 1 released Django 6.0 release candidate 1 is now available. It represents the final opportunity for you to try out a mosaic of modern tools and thoughtful design before Django 6.0 is released. djangoproject.com Python Insider: Python 3.15.0 alpha 2 This release, 3.15.0a2, is the second of seven planned alpha releases. Alpha releases are intended to make it easier to test the current state of new features and bug fixes and to test the release process. blogspot.com Django Software Foundation Twenty years of Django releases Since we’re celebrating Django’s 20th birthday this year, here are a few release-related numbers that represent Django’s history: djangoproject.com Python Software Foundation New Login Verification for TOTP-based Logins PyPI has added email verification for TOTP-based logins pypi.org Updates to Django Today, "Updates to Django" is presented by Raffaella from Djangonaut Space! 🚀 Last week we had 17 pull requests merged into Django by 9 different contributors - including 2 first-time contributors! Congratulations to Hong Xu and Benedict Etzel for having their first commits merged into Django - welcome on board! News in Django 6.1: The admin site login view now redirects authenticated users to the next URL, if available, instead … -
Django-related Deals for Black Friday 2025
Here are some Django-related deals for this year’s Black Friday (28th November) and Cyber Monday (1st December), including my own. I’ll keep this post up to date with any new deals I learn about. If you are also a creator, email me with details of your offer and I’ll add it here. My books My four books have a 50% discount, for both individual and team licenses, until the end of Cyber Monday (1st December), including Boost Your GitHub DX, which I released last week. This deal stacks with the bundle offers and purchasing power parity discount for those in lower-income countries. Individual books: Boost Your GitHub DX - $22 instead of $44 Boost Your Git DX - $22 instead of $44 Boost Your Django DX - $22 instead of $44 Speed Up Your Django Tests - $24.50 instead of $49 Bundles: Boost Your Git* DX Bundle - the Git and GitHub “Boost Your DX” books, $39 instead of $78 Boost Your DX Bundle - all three “Boost Your DX” books, $58.50 instead of $117 Aidas Bendoraitis’ paid packages Aidas Bendoraitis of djangotricks.com has created three paid packages. Use the links below for a 20% discount, available until the end … -
Ansible-lint pre-commit problem + "fix"
I'm used to running pre-commit autoupdate regularly to update the versions of the linters/formatters that I use. Especially when there's some error. For example, a couple of months ago, there was some problem with ansible-lint. You have an ansible-lint, ansible and ansible-core package and one of them needed an upgrade. I'd get an error like this: ModuleNotFoundError: No module named 'ansible.parsing.yaml.constructor' The solution: pre-commit autoupdate, which grabbed a new ansible-lint version that solved the problem. Upgrading is good. But... little over a month ago, ansible-lint pinned python to 3.13 in the pre-commit hook. So when you update, you suddenly need to have 3.13 on your machine. I have that locally, but on the often-used "ubuntu latest" (24.04) github action runner, only 3.12 is installed by default. Then you'd get this: [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/astral-sh/ruff-pre-commit. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/ansible-community/ansible-lint.git. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... An unexpected error has occurred: CalledProcessError: command: ('/opt/hostedtoolcache/Python/3.12.12/x64/bin/python', '-mvirtualenv', '/home/runner/.cache/pre-commit/repomm4m0yuo/py_env-python3.13', … -
Understanding the Different POST Content Types
After more than 20 years of building for the web, this topic somehow kept slipping past me. It always felt obvious, so I never looked deeper. Recently I finally took the time to explore it properly, did some quick research, and now I’m sharing the results. Here’s a simple walkthrough of the different content types you can send in POST requests. Standard Form Data When you submit a basic HTML form like <form method="post" action=""></form>, for example a login form, the browser sends the data using the application/x-www-form-urlencoded content type. The body of the request looks like a URL-encoded query string, the same format typically used in GET requests. Example: username=john_doe&password=pass123. A POST request with this content type using the fetch API looks like this: async function sendURLEncoded() { const params = new URLSearchParams(); params.append('username', 'john_doe'); params.append('email', '[email protected]'); params.append('password', 'Secret123'); params.append('bio', 'This is a multi-line\nbio text.\nIt supports newlines!'); const response = await fetch('/api/urlencoded/', { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'X-CSRFToken': getCSRFToken() }, body: params }); const result = await response.json(); console.log(result); } On the Django side, validation with a Django form is the usual approach: from django import forms from django.http import JsonResponse from django.views.decorators.http import require_http_methods from .forms … -
Django News - PyCharm 30% Promotion Extended! - Nov 14th 2025
News Support the Django Software Foundation by buying PyCharm at a 30% Discount The Django Software Foundation’s primary fundraiser has been extended, so you can get 30 percent off PyCharm Pro and support Django until November 19. jetbrains.com Call for Proposals for DjangoCon US 2026 Website! DjangoCon US 2026 requests proposals to redesign branding, illustrations, and the 11ty and Tailwind website for Chicago, including swag, signage, and starter code. defna.org “Boost Your GitHub DX” out now Boost Your GitHub DX by Adam Johnson provides practical guidance on GitHub features, gh CLI, and Actions to streamline collaboration and speed software delivery. adamj.eu Django Software Foundation Five ways to discover Django packages New Django ecosystem page plus resources like State of Django survey, Django Packages, Awesome Django, Reddit and newsletters help developers discover third-party Django packages. djangoproject.com Django at PyCon FR 2025 Highlights from PyCon France where 27 contributors joined together in sprints, discussions of Django's direction, htmx presentations, and more. djangoproject.com Python Software Foundation Trusted Publishing is popular, now for GitLab Self-Managed and Organizations Django projects can now use PyPI Trusted Publishing to securely publish packages, with GitLab Self Managed beta support and organization pending publishers. pypi.org Updates to Django Today, … -
How to use UUIDv7 in Python, Django and PostgreSQL
Learn how to use UUIDv7 today with stable releases of Python 3.14, Django 5.2 and PostgreSQL 18. A step by step guide showing how to generate UUIDv7 in Python, store them in Django models, use PostgreSQL native functions and build time ordered primary keys without writing SQL. -
django-deadcode: idea to release in under 2 hours
A few weeks ago I noticed a toot from Jeff Triplett about Anthrophic releasing Claude Code for the Web. This was the final spark that coalesced a few different thoughts that had been lingering in the back of my head, some of I have written a bit about before. The first thought was the speed of prototyping that agentic AI enables. Essentially ideas or tasks can simply be executed rather than being written down and the time allocated to develop these ideas go from weeks to days or even hours. The second thought is related to the first in that tools like Agent OS allows for AI to build out products in a more reliable way for the most part. I have also been pondering how I can use my mobile more as an engineer, the Github app is ok for PR reviews, but to date building anything needs a larger screen. The final thought goes back to the toot from Jeff and Claude Code on the being possibly the cloest thing so far to my post from day 282 about how our tooling doesn't yet fully leverage what AI can do for us. Well this led to me creating … -
Python Leiden (NL) meetup summaries
My summaries from the sixth Python meetup in Leiden (NL). Python and MongoDB, a perfect marriage - Mathijs Gaastra His first experience with Mongodb was when he had to build a patient data warehouse based on literature. He started with postgres, but the fixed table structure was very limiting. Mongodb was much more flexible. Postgres is a relational database, Mongodb is a document database. Relational: tables, clearly defined relationships and a pre-defined structure. Document/nosql: documents, flexible relationships and a flexible structure. Nosql/document databases can scale horizontally. Multiple servers, connected. Relational databases have different scaling mechanisms. Why is mongo such a nice combination with python? The PyMongo package is great and has a simple syntax. It is easily scalable Documents are in BSON format ("binary json") which is simple to use and pretty efficient. He showed example python code, comparing a mysql example with a Mongodb version. The Mongodb version did indeed look simpler. The advantage of Mongodb (the freedom) also is its drawback: you need to do your own validation and your own housekeeping, otherwise your data slowly becomes unusable. Mathijs is now only using Mongodb, mostly because of the speed of development he enjoys with it. Identifying “blast beats” … -
Django 20 Years Later - Adrian Holovaty
🔗 LinksAdrian’s personal websiteSoundsliceDjango BookMusicXMLMNX specification🎥 YouTubeYouTube Channel: @djangochatSponsorThis episode was brought to you by HackSoft, your development partner beyond code. From custom software development to consulting, team augmentation, or opening an office in Bulgaria, they’re ready to take your Django project to the next level!https://www.hacksoft.io/solutions/django -
Behind the Curtain as a Conference Chair
This post is the first in a three-part series reflecting on DjangoCon US 2025 — In this post, I’m taking you behind the scenes of DjangoCon US 2025 to share what it taught me about leadership, community, and the power of holding space for others. -
Django-Tailwind v4.4: Now with Zero Node.js Setup via Standalone Tailwind CLI
I've just released version 4.4 of Django-Tailwind, and it comes with a major new feature: you can now use Tailwind CSS without needing Node.js. This is made possible by another one of my packages — Pytailwindcss — which brings support for Tailwind's Standalone CLI into the Python ecosystem. … Read now -
The Role of Artificial Intelligence in Software Development
Artificial Intelligence has become the backbone of modern software development, driving efficiency and innovation across every phase of the lifecycle. From AI-powered code generation and automated bug detection to intelligent testing, refactoring, and DevOps optimization, AI is reshaping how software gets built and delivered. Developers now spend less time on repetitive tasks and more on solving complex problems, leading to faster releases, higher quality, and greater team productivity. In today’s competitive landscape, integrating AI isn’t optional—it’s the new standard for staying ahead. -
Django Girls Pescara 2025
The second-ever Django Girls workshop in Pescara, organised by the Python Pescara community and hosted inside DevFest Pescara 2025 by GDG Pescara. -
Django News - Django security releases issued: 5.2.8, 5.1.14, and 4.2.26 - Nov 7th 2025
News Django security releases issued: 5.2.8, 5.1.14, and 4.2.26 Django 5.2.8, 5.1.14, and 4.2.26 fix a Windows NFKC redirect DoS and a high severity SQL injection via QuerySet Q _connector; upgrade now. djangoproject.com 2026 DSF Board Candidates DSF presents 19 candidates for three 2026 board seats with voting open to eligible members until November 26, 2025, 23:59 AOE. djangoproject.com Announcing DjangoCon Europe 2026 in Athens, Greece! ☀️🏖️🏛️🇬🇷 DjangoCon Europe 2026 will take place in Athens April 15 to 17 with Django and Python talks, workshops, sprints, and community engagement opportunities. djangoproject.com Django Software Foundation Django Developers Survey 2025 results 2025 Django Developers Survey reveals key trends, tooling preferences, and actionable recommendations for Django development, with a full report and JetBrains analysis. djangoproject.com Python Software Foundation Connecting the Dots: Understanding the PSF’s Current Financial Outlook PSF reports declining revenue, increased costs, and paused grants, urging community support and sponsorships to sustain PyPI, PyCon US, and core Python infrastructure. blogspot.com Wagtail CMS News A new approach to search and more in Wagtail 7.2 With fully revamped search, readability checks, and more, this is a collection of new features you don't want to miss wagtail.org The 2025 State of Django’s top packages The … -
Hitting Limits and Noticing Clues in Graphs
Sometimes the limit you hit when dealing with high traffic on a website isn’t the limit that needs to be raised. We encountered this recently on a site we’re helping to maintain and upgrade. The site has been around since the very early days of Django. It was built back in the days when Apache with mod_wsgi (or even mod_python!) was one of the more common Django deployment environments. -
Cursor vs. Claude for Django Development
This article looks at how Cursor and Claude compare when developing a Django application. -
Thoughts about Django-based content management systems
Thoughts about Django-based content management systems I have almost exclusively used Django for implementing content management systems (and other backends) since 2008. In this time, content management systems have come and gone. The big three systems many years back were django CMS, Mezzanine and our own FeinCMS. During all this time I have always kept an eye open for other CMS than our own but have steadily continued working in my small corner of the Django space. I think it’s time to write down why I have been doing this all this time, for myself and possibly also for other interested parties. Why not use Wagtail, django CMS or any of those alternatives? Let’s start with the big one. Why not use Wagtail? The Django administration interface is actually great. Even though some people say that it should be treated as a tool for developers only, recent improvements to the accessibility and the general usability suggest otherwise. I have written more about my views on this in The Django admin is a CMS. Using and building on top of the Django admin is a great way to immediately profit from all current and future improvements without having to reimplement anything. …