Django community: RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Weeknotes (2025 week 43)
Weeknotes (2025 week 43) I published the last weeknotes entry in the first half of September. Drama in OSS I have been following the Ruby gems debacle a bit. Initially at Feinheit we used our own PHP-based framework swisdk2 to build websites. This obviously didn’t scale and I was very annoyed with PHP, so I was looking for alternatives. I remember comparing Ruby on Rails and Django, and decided to switch from PHP/swisdk2 to Python/Django for two reasons: The automatically generated admin interface and the fact that Ruby source code just had too much punctuation characters for my taste. It’s a very whimsical reason and I do not put any weight on that. That being said, given how some of the exponents in Ruby/Rails land behave I’m very very glad to have chosen Python and Django. While not everything is perfect (it never is) at least those communities agree that trying to behave nicely to each other is something to be cheered and not something to be sneered at. Copilot I assigned some GitHub issues to Copilot. The result wasn’t very useful. I don’t know if I want to repeat it, local tools work fine for when I really need … -
My favorite Django packages
My favorite Django packages Inspired by other posts I also wanted to write up a list of my favorite Django packages. Since I’ve been working in this space for so long and since I’m maintaining quite a large list of packages I worry a bit about tooting my own horn too much here; that said, the reasons for choosing some packages hopefully speak for themselves. Also, I’m sure I’m forgetting many many packages here. Sorry for that in advance. Core Django speckenv: Loads environment variables from .env and automatically converts them to their Python equivalent if ast.literal_eval understands it. Also contains implementations for loading database, cache, email and storage configuration from environment variables (similar to dj-database-url). I added this functionality to speckenv when some of the available environment configuration apps’ maintenance state was somewhat questionable. django-cors-headers: CORS header support for Django. This would be a nice addition to Django itself. sentry-sdk: I’m using Sentry in almost all projects. django-template-partials: Template partials for Django! This has been added to the upcoming 6.0 release of Django. While the Django template language has always been evolving and improving, this feels like the first larger step in a long time. As I and others … -
An Introduction of sorts
I realised this week after a short conversation on Mastodon that I haven't ever shared my personal Django journey, so hear goes! As a recent graduate in 2012, I first encounter Django while working at Ocado Technology, tasked with building internal tools for other developers. I was shown the ropes of Django by Ben Cardy (@benbacardi) and Mike Bryant. Essentially this was about putting a frontend to some scripts which would provision users and allow them to upload their ssh keys. This progressed to automating application provisioning with some hackery using the rubypython package if I remember correctly and storing data in an LDAP database. I started using Django 1.4, explored packaging these projects into .deb files, setup an internal pypi instance and tried to created a unified UI package across multiple projects. Finally we did start to open source a few packages on Github. 2015 saw me leave Ocado to join a small charity startup using Django. Here I joined Bruno Alla (@browniebroke) building out a Django application hosted on heroku. For a long time it was just us two as developers, but this eventually grew to a team of 6. Again we published a few packages that we … -
Django on the Med - Paolo Melchiorre
🔗 LinksDjango on the Med and #DjangoOnTheMed hashtagPaolo Melchiorre’s Website and LinkedInMy Django on the Med postDjango GitHub Issues for Django on the Meddjango-rapid and django-boltDjango: One ORM to Rule Them All📦 Projectsdjango-http-compressionbasedpyrightPython 3.14 uuid📚 BooksHow Infrastructure Works by Deb ChachraDjango for Professionals by William VincentMore Everything Forever by Adam Becker🎥 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! -
Async Django: a solution in search of a problem?
A client recently asked me a seemingly simple question: “If we switch our Django backend to run on an ASGI server, will it get faster?” The short answer is no. The slightly longer answer is that switching the server from WSGI to ASGI does nothing on its own. To see any change, you have to start rewriting your views to be async, and even then, the benefits are marginal at best for 99% of web applications. For their specific workload, offloading heavy tasks to a background worker is a far simpler and more effective solution. This conversation got me thinking. My experience with async in the Django ecosystem limited to Django Channels for WebSocket support. It works, but the setup is complex. If I were starting today, I’d probably use Server-Sent Events, or maybe build a tiny, separate WebSocket server in TypeScript and have my Django app post updates to it. Simple, decoupled, and far less cognitive overhead. But I have never used async views, and nobody that I know has used Async Django apart from Channels. No async views or async database calls. So if the performance gains are elusive and the complexity is high, why did the Django … -
Moving a Domain to Another Registrar
The Situation The domain for my first SaaS project 1st-things-1st.com was registered with GoDaddy. Even though the whole project was already running under my company’s name, I never really bothered to move the domain to my company’s account at Namecheap. Last week I noticed that the domain was about to expire, and I thought, alright, time to finally do it. I had never transferred a domain before, so I wasn’t sure how it would go or whether I could pull it off without any downtime. Here’s how it went. The Story Namecheap has this feature called “Transfer to Us.” You just follow a few simple steps: request a transfer for your domain, enter a one-time Auth code (also called as EPP - Extensible Provisioning Protocol - code) from another registrar to confirm you’re the owner, and pay for another year. At GoDaddy’s side, there was a whole confirmation process to make sure I really wanted to transfer the domain and understood it couldn’t be undone. Once that was done, I got the code I needed for Namecheap. Then came the waiting part. It took almost a week to get the confirmation that the transfer was successful, which was expected according … -
Fixing the `Query` import error while upgrading Wagtail from 5 to 7
While upgrading an old project from Wagtail 5 to 7, I encountered this error: ImportError: cannot import name 'Query' from 'wagtail.search.models' After some searching, I found out what’s wrong. It turns out Wagtail moved the Query model from wagtail.search.models to wagtail.contrib.search_promotions in version 5, but until version 6, you … Read now -
Django News - 2025 Malcolm Tredinnick Memorial Prize awarded to Tim Schilling - Oct 17th 2025
News 2025 Malcolm Tredinnick Memorial Prize awarded to Tim Schilling The Malcolm Tredinnick Memorial Prize for 2025 was awarded to Tim Schilling. Check out Tim's post about winning it too. djangoproject.com 2026 DSF Board Nominations DSF board nominations are now open, inviting candidates to help shape Django governance, marketing, and global event outreach through strategic leadership. djangoproject.com Python 3.15.0 alpha 1 Python 3.15.0 alpha 1 introduces experimental features including a dedicated profiling package, default UTF-8 encoding, a new PyBytesWriter C API, and improved error messages. blogspot.com Python 3.13.9 is now available! Python 3.13.9 quickly fixes a regression in inspect.getsourcelines when decorators are followed by comments or empty lines, enhancing introspection reliability for modern development. blogspot.com Announcing PSF Community Service Award Recipients! PSF Community Service Awards recognize exemplary Python community contributions with awardees like Katie McLaughlin whose diverse efforts include advancing Django and open source outreach. blogspot.com Updates to Django Today, "Updates to Django" is presented by Raffaella from Djangonaut Space! 🚀 Last week we had 9 pull requests merged into Django by 7 different contributors - including 1 first-time contributor! Congratulations to Tim Kamanin for having their first commits merged into Django - welcome on board! In Django 5.2 it's … -
Pycon NL: programming, past and future - Steven Pemberton
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). (Note: I've heard a keynote by Steven at pygrunn 2016.) Steven is in the python documentary, he co-designed the abc programming language that was the predecessor to python. ABC was a research project that was designed for the programmer's needs. He also was the first user of the open internet in Europe in November 1988, as the CWI at the university had the first 64kbps connection in Europe. Co-designer of html, css, xhtml, rdf, etc. 1988, that's 37 years ago. But only about 30 years earlier, the first municipality (Norwich, UK) got a computer. 21 huge crates. It ran continuously for 10 years. A modern Raspberry pi would take 5 minutes to do the same work! Those early computers were expensive: an hour of programming time was a year's salary for a programmer. So, early programming languages were designed to optimize for the computer. Nowadays, it is the other way around: computers are almost free and programmers are expensive. This hasn't really had an effect on the way we program. He's been working on declarative programming languages. One of the declarative systems is xforms, an xml-based declarative … -
Pycon NL: typing your python code like a ninja - Thiago Bellini Ribeiro
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). By now, the basics of python type hints are well known: def something(x: int) -> float: ... def get_person(name: str, age: int|None) -> Person: ... Note: I've tried typing (...) fast enough, but my examples will probably have errors in them, so check the typing documentation! His slides are here so do check those :-) Sometimes you can have multiple types for some input. Often the output also changes then. You can accept both import types and suggest both output types, but with @overload you can be more specific: from typing import overload @overload def something(x: str) -> str: ... def something(x: int) -> int: ... Tyou can do the same with a generic: from typing import TypeVar T = TypeVar("T") @overload def something(x: T) -> T: ... # New syntax def something[T](x: T) -> T: ... # Same, but restricted to two types def something[T: str|int](x: T) -> T: ... Generic classes can be handy for, for instance, django: class ModelManager[T: Model]: def __init__(self, model_class: type[T]) -> None: .... def get(self, pk: int) -> T: ... Type narrowing. Sometimes you accept a broad range of items, … -
Pycon NL: from flask to fastapi - William Lacerda
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). Full title: from flask to fastapi: why and how we made the switch. He works at "polarsteps", a travel app. Especially a travel app that will be used in areas with really bad internet connectivity. So performance is top of mind. They used flask for a long time. Flask 2 added async, but it was still WSGI-bound. They really needed the async scaling possibility for their 4 million monthly users. Type hinting was also a big wish item for improved reliability. They switched to fastapi: True async support. It is ASGI-native Typing and validation with pydantic. Pydantic validates requests and responses. Type hints help a lot. Native auto-generated docs (openapi). Built-in swagger helps for the frontend team. This meant they gave up some things that Flask provided: Flask has a mature ecosystem. So they left a big community + handy heap of stackoverflow answers + lots of ready-made plugins behind. Integrated command-line dev tools. Flask is handy there. Simplicity, especially for new devs. They did a gradual migration. So they needed to build a custom fastapi middleware that could support both worlds. And some api versioning to … -
Pycon NL: tooling with purpose - Aris Nivortis
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). Full title: tooling with purpose: making smart choices as you build. Aris uses python and data to answers research questions about everything under the ground (as geophysicist). As a programmer you have to make lots of choices. Python environment, core project tooling, project-specific tooling, etc. First: python environment management: pyenv/venv/pip, poetry, uv. And conda/pixi for the scientific python world. A show of hands showed uv to be real popular. Now core project tooling. Which project structure? Do you use a template/cookiecutter for it? Subdirectories? A testing framework? Pytest is the default, start with that. (He mentioned "doctests" becoming very popular: that surprised me, as they were popular before 2010 and started to be considered old and deprecated after 2010. I'll need to investigate a bit more). Linting and type checking? Start with ruff for formatting/checking. Mypy is the standard type checker, but pyright/vscode and pyre are options. And the new ty is alpha, but looks promising. Also, part of the core tooling: do you document your code? At least a README. For domain specific tooling there are so many choices. It is easy to get lost. What … -
Pycon NL: don't panic, a developer's guide to security - Sebastiaan Zeeff
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). He showed a drawing of Cornelis "wooden leg" Jol, a pirate from the 17th century from Sebastiaan's hometown. Why is he a pirate? He dresses like one, has a wooden leg, murders people like pirate and even has a parrot, so he's probably a pirate. For python programmers used to duck typing, this is familiar. The 17th century, the Netherlands were economically wealthy. And had a big sea-faring empire. But they wanted a way to expand their might without paying for it. So... privatization to the rescue. You give pirates a vrijbrief, a government letter saying they've got some kind of "permission" from the Dutch government to rob and pillage and kill everybody as long it aren't Dutch people and ships. A privateer.So it looks like a pirate and behaves like a pirate, but it isn't technically a real pirate. Now on to today. There are a lot of cyber threats. Often state-sponsored. You might have a false sense of security in working for a relatively small company instead of for a juicy government target. But... privateers are back! Lots of hacking companies have coverage of governments … -
Pycon NL: kedro, lessons from maintaining an open source framework - Merel Theisen
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). Full title: leading kedro: lessons from maintaining an open source python framework. Merel is the tech lead of the python open source framework kedro. What is open source? Ok, the source code is publicly available for anyone to use, modify and share. But it is also a concept of sharing. Developing together. "Peer production". It also means sharing of technical information and documentation. In the 1990s the actual term "open source" was coined. Also, an important milestone: Github was launched in 2008, greatly easing open source development. Kedro is a python toolbox that applies software engineering principles to data science code, making it easier to go from prototype to production. Started in 2017, it was open sourced in 2019. (Note: Kedro has now been donated to the Linux foundation). This made it much easier to collaborate with others outside the original company (Quantumblack). Open source also means maintenance challenges. It is not just code. Code is the simple part. How to attract contributors? How to get good quality contributions? What to accept/reject? How to balance quick wins with the long term vision of the project? How to … -
Pycon NL: workshop: measuring and elevating quality in engineering practice - Daniele Procida
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). Daniele works as director of engineering at Canonical (the company behind Ubuntu). What he wants to talk about today is how to define, measure and elevate engineering quality at scale. That's his job. He needs to influence/change that in an organization with a thousand technical people in dozens of teams with 100+ projects. They ideally must converge on the standards of quality he has defined and there's only one of me. Engineering people are opinionated people :-) Your personal charm and charisma wears thin after a while: there needs to be a different way. So: how can you get 1000+ to do what you want, the way you want. Ideally somewhat willingly? You cannot make people do it. You'll have to be really enthousiastic about it. He suggests three things: Principle. Description of quality as objective conditions, allowing it to be defined and measured. Tool. A simple dashboard, that reinforces your vision of quality and reflects it back to your teams. Daniele focuses on documentation, and showed a dashboard/spreadsheet that showed the documentation status/progress of various projects. You can do the same for "security" for instance. Method. … -
Pycon NL: keynote: how not to get fooled by your data while AI engineering - Sofie van Landeghem
(One of my summaries of the Pycon NL one-day conference in Utrecht, NL). (Sofie helps maintain FastAPI, Typer and spaCy; this talk is all about AI). Sofie started with an example of a chatbot getting confused about the actual winner of an F1 race after disqualification of the winner. So you need to have a domain expert on board who can double-check the data and the results. Let's say you want your chatbot output to link to Wikipedia for important terms. That's actually a hard task, as it has to do normalization of terms, differentiating between Hamilton-the-driver, Hamilton-the-town, Hamilton-the-founding-father and more. There's a measure for quality of output that's called an "F-score". She used some AI model to find the correct page and got a 79.2% F-score. How good or bad is it? For this, you can try to determine a reasonable bottom line. "Guessing already means 50%" is what you might think. No, there are 7 million Wikipedia pages, so random guessing gives 0% F-score. Let's pick all the pages which actually mention the word "Hamilton". If we then look at more words like "Alexander Hamilton" or "Lewis Hamilton", we can reason that a basic non-AI regular approach should … -
Developing and building with AI
Earlier this year, how to use Agentic AI/LLM 'clicked' in my head, mainly when I tried out Zed's agentic mode and it could take a codebase as context and do simple tasks for me to review. This was great for adding admin classes to my existing project or creating __str__ methods for my models. But I often found myself going in circles when building out a larger feature. Over the summer Brian Casel launched Agent OS and along with it came another term - spec-driven development. It took me some time to get my head around the concept, but I really have gotten in to the flow over the last month. Using Agent OS has allowed me to build out features with remarkable speed. Features that probably would have taken weeks were compressed into days or even hours. The key with this process is getting the AI to have layers of context (standards, product, specs) and it starts way before code, most of my time is spent reviewing markdown files, then it's prompting the AI of choice to execute a task one at a time (or a few in a row) with me reviewing the output and making manual adjustments … -
My Django On The Med 2025 🏖️
A summary of my experience at Django On The Med 2025 told through the posts I published on Mastodon during the conference. -
Django News - 🥧 Python 3.14 is released! - Oct 10th 2025
News Python 3.14.0 (final) is here! Python 3.14.0 release offers new free-threaded support, deferred annotations, template string literals, multiple interpreters, and performance optimizations beneficial to Django backends. blogspot.com Python Insider: Python 3.13.8 is now available Python 3.13.8 releases approximately 200 bug fixes, build improvements, and documentation updates for enhanced stability and performance, benefiting Django projects and upgrades. blogspot.com Python 3.x security release This week we saw security releases for every active Python version: Python 3.9.24, Python 3.10.19, Python 3.11.14, and Python 3.12.12. Django Newsletter Updates to Django Today 'Updates to Django' is presented by Pradhvan from Djangonaut Space!🚀 Last week we had 13 pull requests merged into Django by 7 different contributors - including a first-time contributor! Congratulations to Chaitanya Keyal for having their first commits merged into Django - welcome on board! 🎉 This week's Django highlights 🌟 Django dropped support for PostgreSQL 14 and PostGIS 3.1, completing the transition to newer database versions as these older releases reach end-of-life. QuerySet.values_list(flat=True) without a field is now deprecated, clarifying the API by requiring explicit field specification rather than relying on implicit primary key selection. Documented unique constraint requirement when migrating ManyToManyField to use a through model, helping developers avoid subtle … -
Django: Introducing django-http-compression
HTTP supports response compression, which can significantly reduce the size of responses, thereby decreasing bandwidth usage and load times for users. It’s a cheap and valuable technique for improving website performance. Lighthouse, Google’s web performance auditing tool, recommends enabling compression where it is not enabled, presenting estimated bandwidth savings. For example, on one client site, it estimated a 64KiB (65%) saving on a dashboard page: For Django projects, many deployment situations will let you enable response compression at the web server or CDN level. But there are still cases where you may not have that option or it’s inconvenient, such as with some PaaS providers. In such situations, you can use Django’s built-in GZipMiddleware to use Gzip compression—pop it in MIDDLEWARE, above any middleware that modifies the response content: MIDDLEWARE = [ ..., "django.middleware.gzip.GZipMiddleware", ..., ] …and hey presto, instant site-wide compression! Browsers and HTTP clients have supported Gzip for decades, so practically all visitors will benefit. Django’s Gzip support dates back to 2005, before its 1.0 release. Since then, two newer compression algorithms have been developed and achieved wide support: Brotli and Zstandard. Both offer better compression ratios than Gzip, with Zstandard even matching Gzip on speed. Python 3.14, … -
Django & REST & APIs
While lamenting that I'm not in Spain for Django on the Med (but do have other events to go to), I have been reading the recent forum thread about Django & REST and it has provoked some thoughts, some of which I shared directly in the thread, but I hope to expand on them here and likely in another post as I'm not quite done prototyping my ideas. First there is some obvious core work that needs to be done: Document the current options as a how-to/guide for building with Django and some measure of guidance for how to choose perhaps. Personally I would be happy with getting an AI agent to do a first pass of a page like this. Get the in progress tickets finished. That mostly being modernising content negotiation in the request object. Once we have those in place we are a starting point to focus the main components that make up an API in Django. Primarily it's as follows: URLs or groups of URLs Views or groups of URLs Serializing data & deserializing data. Most of the focus has mostly been on the serialization component, in terms of which option to pick to include or … -
Run Django tests using PostgreSQL in GitHub Actions
Did you know that you can run unit tests for your Django app, in GitHub Actions, using PostgreSQL? I’m a little bit ashamed to admit that I had absolutely no idea until today. I really thought that I was forced to run my unit tests using Sqlite. And while most of the time that works perfectly fine, there are times when your Django app is using PostgreSQL-exclusive features and having to work around that in CI becomes a real pain. It’s also just a good idea to stay as close to the production setup as possible when running your tests. Turns out that it’s actually really simple to use a real PostgreSQL database in GitHub Actions! Here’s a minimal example workflow that installs your dependencies, starts a PostgreSQL 15 service, and runs your Django tests, all inside CI: .github/workflows/tests.yml name: Unit tests on: push: branches: ["develop"] pull_request: branches: ["develop"] env: DEBUG: "True" DATABASE_URL: "postgres://postgres:postgres@postgres:5432/test_soundradix" SECRET_KEY: "unit-tests" jobs: build: runs-on: ubuntu-latest services: postgres: image: postgres:15 env: POSTGRES_PASSWORD: postgres POSTGRES_DB: test_soundradix options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 strategy: max-parallel: 4 steps: - uses: actions/checkout@v3 - uses: astral-sh/setup-uv@v3 - run: uv python install - run: uv sync --group dev … -
DjangoCon US 2025: A Celebration of Community, Code and 20 Years of Django
Celebrating 20 years of Django DjangoCon US 2025 was a milestone year for the community, as we gathered in Chicago to celebrate 20 years of Django. Attendees from around the world came together to learn about the latest developments, share their work, and strengthen the bonds that make DjangoCon such a special event. Caktus was well-represented once again, with our team contributing as organizers, speakers, and active participants throughout the week. -
Django: one ORM to rule all databases 💍
Comparing the Django ORM support across official database backends, so you don’t have to learn it the hard way. -
My DjangoCon US 2025
A summary of my experience at DjangoCon US 2025 told through the posts I published on Mastodon during the conference.