As part of refreshing the Reveal IT website, I have moved| Mikkel Høgh
HTTP Strict Transport Security or HSTS is a new security feature in| Mikkel Høgh
Have you ever wanted to password-protect your Django-site, without| Mikkel Høgh
So, I finally did it. I’ve long wanted to do something about this blog,| Mikkel Høgh
“Variables in JavaScript are fundamentally the same as object properties”| Mikkel Høgh
Whether you’re building APIs, dashboards, or machine learning pipelines, choosing the right framework can make or break your project. Every year, we survey thousands of Python developers to help you understand how the ecosystem is evolving, from tooling and languages to frameworks and libraries. Our insights from the State of Python 2025 offer a snapshot […]| The JetBrains Blog
Talk Python: Celebrating Django's 20th Birthday With Its Creators I recorded this podcast episode recently to celebrate Django's 20th birthday with Adrian Holovaty, Will Vincent, Jeff Triplet, and Thibaud Colas.We didn’t know that it was a web framework. We thought it was a tool for building local newspaper websites. [...] Django’s original tagline was ‘Web development on journalism deadlines’. That’s always been my favorite description of the project. Tags: adrian-holovaty, django,...| Simon Willison's Weblog
A recap of my fantastic DjangoCon Africa, UbuCon Africa 2025 experience. It was the first time I travelled to Africa, keynoted a conference and went on a safari.| Better Simple
I have recently got into Django and built a small project with it which is this blog. Then came the time for me to deploy the project on an unmanaged VPS, the process went fine yet with a few problems here and there due to the lack of a definitive ...| The Code Ship
The iommi docs are more correct than most projects because we take a different approach to documentation: part of the test suite is the documentation. Let’s look at an example:| En kodare
Starting in Django 5.0, you can use db_default to define database-level default values for model fields. It’s a great feature but comes with a subtle and dangerous gotcha that can silently break your code before the object is ever saved. The Gotcha in Action Let’s say you’re building a simple task manager, and you want to track whether a task is completed: from django.db import models class Task(models.Model): is_completed = models.BooleanField(db_default=False) The db_default option en...| Johnny Metz
Here’s a little tip based on some work that I did recently. The project has a URL pattern where the first part of the URL matches the current role the user is viewing the site as. Let’s say the roles are “chef”, “gourmand”, and “foodie”—example URLs might …| Adam Johnson
Within Django’s popular admin site, you can override ModelAdmin.get_queryset() to customize the queryset used by the admin views. It’s often used for performance optimizations, such as adding a select_related() call to batch-fetch related objects:| adamj.eu
MP 58: Yes, but not for the reason I originally thought.| Mostly Python
Squashing merges multiple database migrations into a single consolidated file to speed up database setup and tidy up history. Django’s squashmigrations command promises to handle this, but it’s error-prone and unnecessarily complex. A clean reset is faster and simpler. ⚠️ Why squashmigrations Falls Short Broken in Practice In medium-to-large projects, I’ve consistently seen squashmigrations generate poor results, such as failing to optimize basic no-ops (like adding and deleting the...| Johnny Metz
I’ve found it useful, on occasion, to iterate through all registered URL patterns in a Django project. Sometimes this has been for checking URL layouts or auditing which views are registered. In this post, we’ll look at a pattern for doing that, along with an example use case …| Adam Johnson
A quick post on why we should include references to third-party packages in Django's documentation. Mainly, we've already solved curation and developers are doing to develop!| Better Simple
The flows I use for exploratory programming using a REPL and their advantages.| Luke Plant's home page
I recently released a new package called inline-snapshot-django. It’s a tool for snapshot testing SQL queries in Django projects, described shortly.| adamj.eu
Django 5.2 added a new warning that shows up when you start your development server with python manage.py runserver:| Anže’s Blog
Deploy Django 5.1's native connection pooling in 10 minutes to cut database latency by 50-70ms, reduce connection overhead by 60-80%, and improve response times by 10-30% with zero external dependencies.| Saurabh Kumar
Another Friday, another Django related post. I guess this blog is becoming a bit monothematic. I promise the next ones will bring the much-needed diversity of contents, but today let’s explore a very useful feature of the Django’s ORM. | Gonçalo Valério
Revisiting the state of Django Commons a year after I published a call for help.| Better Simple
A discussion about how small meetups could help us bridge the mentorship gap and how we can put them into practice today.| Better Simple
How Djangonaut Space has expanded my worldview and created meaningful global connections.| Better Simple
This week, I’ll continue on the same theme of my previous “Django Friday Tips” post. Essentially, we will keep addressing small annoyances that can surface while developing your multilingual project.| Gonçalo Valério
In Django 5.2 we got a way to easier customize attributes of forms. Adam Johnson posted an example on mastodon, which I’ve slightly abbreviated below:| En kodare
DjangoCon US 2025 is accepting talk proposals for a few more weeks. If folks are on the fence about submitting a talk, here are some ideas that I would personally be interested in.| Better Simple
Here is how to start a process inside a test suite, using a pytest fixture. This comes straight from this post. defrun_websocket_server(server_running_file=None):ds_proc=subprocess.Popen(["umap","run_websocket_server",],stdout=subprocess.PIPE,stderr=subprocess.STDOUT,)time.sleep(2)# Ensure it started properly before yieldingassertnotds_proc.poll(),ds_proc …| (not) my ideas
I had to change the primary key of a django model, and I wanted to create a migration for this. The previous model was using django automatic primary key fields I firstly changed the model to include the new uuid field, and added the id field (the old primary key …| (not) my ideas
After adding a regexp for uuids (which are quite hard to regexp for), I discovered that Django offers path converters, making this a piece of cake. I was using old school re_path paths in my urls.py, but it's possible to replace them with path, like this: url_patterns=(path("datalayer …| (not) my ideas
When removing multi-table inheritance in Django, you need to remove your Model's bases from the migration's model state. This post goes into detail on when this comes up and how to resolve it.| Better Simple
I talk about the similarities between internships and contributor mentorship programs. Specifically through my own internship and my perspective of Djangonaut Space.| Better Simple
Making service layers work with Django admin.| Roman Imankulov
Phil Gyford wrote an article about how nice it is that the Django admin pre-populates inputs from the GET parameters if there are any. This can be used for bookmarklets as in his examples, or just general bookmarks where you can quickly go to a page with parts of a form prefilled.| En kodare
At Dryft I have the luxury of a small production database, so I can mirror prod to my local dev machine in ~3 minutes. I use this a lot to get quick local reproduction of issues. I used to copy-paste the relevant URL part to my local dev and felt quite happy with it. Then I realized that I could just paste the entire URL after http://localhost:8000/! My browser autocompleted that part anyway, and URLs like http://localhost:8000/https://[...] are obviously invalid for normal uses cases, so can...| En kodare
Python has been a top programming language for the past decade, known for its simplicity and rich ecosystem.| Atlas | Manage your database schema as code Blog
Disclosure: This blog post is part of the Panamax Template Contest. In my blog post about the Dell C6100 server I’ve been using, I mentioned that I run a full LXC userland for each application I deploy, and that I’d like to try out Docker but that this setup is in conflict with Docker’s philosophy […]| Chris Ball
Since my blog post arguing that Technical talks should be recorded, I’ve continued to record talks – here are the new recordings since that post, mostly from the Django Boston meetup group: Adam Marcus – How I Learned to Stop Worrying and Love the Crowd TC39 JavaScript Panel at Bocoup, 2013-09-18 Matt Makai – Staying […]| Chris Ball
In this episode, I completed the simplified sign up process for my JourneyInbox app. I finished off the final features that add account verification and initial engagement features to make sign up and nice and functional experience.| Matt Layman
Personal blog for Anders Hovmöller. Mostly programming stuff.| En kodare
With 5.2 Django will finally support 307 and 308 status codes on redirects. Still going to have to keep implementing 303 myself but it's a…| Decade City
This article explains how to create a middleware that extracts the messages from Django's messages framework to make them available to HTMX.| Good Code Smell
This is a follow-up to my previous article about modal forms with Django anbd HTMX. We'll see how to show a toast to notify the user.| Good Code Smell
In this article we'll use Django and HTML how to implement a modal dialog containing a form with server side validation.| Good Code Smell
In this episode, we began an update to the signup process to simplify things. I am replacing email and password with just email. Users will receive 'magic links' via their email client to sign in. To do this, we are using django-sesame.| Matt Layman
There’s a lot of tools out there to automate taking screenshots for documentation of web apps/libraries. Screenshots are certainly sometimes a good idea, but they have some serious downsides:| En kodare
Here we go again for another post of this blog’s irregular column, entitled Django’s Friday Tips. Today let’s address a silent issue, that any of you that have formerly worked with internationalization (i18n) almost certainly already faced.| Gonçalo Valério
In this episode, when worked on the newly migrated JourneyInbox site and focused on the database. Since me moved from Postgres to SQLite, I needed to make sure that SQLite was ready for users. We examined common configuration to optimize the database and applied that config to JourneyInbox.| Matt Layman
In this episode, the third portion of the stream covers how I migrated my Heroku-backed Postgres database to SQLite. I finished the migration of my app from running on Heroku to running on DigitalOcean.| Matt Layman
Inside are ideas on things the Steering Council I would like to attempt if elected next term.| Better Simple
In this episode, I continued a migration of my JourneyInbox app from Heroku to DigitalOcean. I switched how environment configuration is pulled and converted cron jobs to use Huey as a background worker. Then I integrated Kamal configuration and walked through what the config means.| Matt Layman
Managing URL mappings in Django can become a bit of a mess as a project grows, and you often end up with many tabs in your editor named urls.py which is not very helpful. In several discussions on the Unofficial Django Discord, cb109 kept mentioning that he’s got a single big urls.py file. At some point I started noticing every time I navigated to the wrong urls.py and how I got a little annoyed every time.| En kodare
How to set a single value as blank for your Django FileField and ImageField.| Start Coding Now
I have been working on a file upload feature for a Django project. We use django-storages to store files in AWS S3, but we store them on the filesystem for local development.| startcodingnow.com
Carlton Gibson has released a package called Neapolitan to make it easier to do CRUD stuff in your app. The short description:| En kodare
A quick outline of how to create a custom migration in Django.| Start Coding Now
A by-no-means-comprehensive list of notes from DjangoCon US 2024.| Start Coding Now
Something I hear a lot is that iommi is weird (or “magical and weird”). I would maybe use the word “different”, but it’s true!| En kodare
A revisit on Community and Reliability within Django| Better Simple
I recently got to work on prototyping a small Django-based website that was somewhat like a message board. One of the features requested was allowing users to upload a profile picture, which necessitated storing said pictures somewhere. Django is very opinionated about storing such files in a filesystem, but I prefer storing them in a DB. Here are my reasons:| BackSlasher
This is part there in a three-part series: Making React and Django play well together Making React and Django play well together - the “hybrid app” model Making React and Django play well together - the “single page app” model --- Making React and Django play well together - the “single page app” model This message continues my analysis of the trade-offs involved in choosing an architecture for integrating React with Django. I’m focusing on the alternative between two models: Th...| Fractal Ideas
This is part two in a three-part series: Making React and Django play well together Making React and Django play well together - the “hybrid app” model Making React and Django play well together - the “single page app” model --- Making React and Django play well together - the “hybrid app” model In my last post I discussed the trade-offs involved in choosing an architecture for integrating React with Django. I described an alternative between two models: The “single page app” ...| Fractal Ideas
This is part one in a three-part series: Making React and Django play well together Making React and Django play well together - the “hybrid app” model Making React and Django play well together - the “single page app” model --- Making React and Django play well together Building a frontend with React and create-react-app and the corresponding backend with Django is a popular combination. Indeed, even though the Node.js ecosystem is growing rapidly, JavaScript backend frameworks still...| Fractal Ideas
Managing multiple geographies and time zones in Django - part 2 Last month, I demonstrated how to handle geographies in a Django app, so that: users can only interact with objects attached to their geography; users see datetimes in the local time zone of their geography. This is an example of multi-tenancy: each geography is a tenant. Then I had an uncommon requirement: let a user account interact with several geographies. It’s interesting because it doesn’t fit into the data model at all...| Fractal Ideas
Managing multiple geographies and time zones in Django| fractalideas.com
I have been working on a project where we might want to delete models even just for testing purposes, but we don't want to accidentally delete models.| startcodingnow.com
An explanation of how to use django-tables2, HTMX, Alpine and Bootstrap to render a table with a form to create new rows.| Better Simple
argparse, the standard library module that Django uses for parsing command line options, supports sub-commands. These are pretty neat for providing an expansive API without hundreds of individual commands. Here’s an example of using sub-commands in a Django management command:| adamj.eu
DjangoViz has been deprecated. Please refer to the Atlas Django Provider documentation for up to date instructions.| atlasgo.io
A thorough description of why downtime occurs during Django deployments and how to reduce it with django-safemigrate.| Better Simple
MP 103: Generating sample data for local development. Note: This is the eleventh post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. The BlogMaker Lite project is coming along nicely,| Mostly Python
MP 101: Adding a page for each individual blog. Note: This is the ninth post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. At this point the BlogMaker Lite project| Mostly Python
There are times when we need to stop trying to make everything sync automatically, and just test that it is synced. Tips for Python and web dev.| Luke Plant's home page
This week, I’m back at my tremendously irregular Django tips series, where I share small pieces of code and approaches to common themes that developers face when working on their web applications.| Gonçalo Valério
Django requires every change to model fields and meta classes to be reflected in database migrations. This applies even to things that don’t typically affect the database, such as Field.choices. When iterating on code, it’s easy to make a model change and forget to update the migrations accordingly. If you don’t have any protection, you might even deploy code that crashes due to out-of-date migrations!| adamj.eu
MP 98: Incorporating a minimal CSS framework, and adding custom styles. Note: This is the seventh post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. When you're building out a| Mostly Python
So we’re already on astrid.tech v2, despite the fact that the footer still| astrid.tech
My website currently only has a frontend. Now, that’s cool and all, but I want| astrid.tech
Methodology and sample code for using pyastgrep to do custom linting tasks on Python source code.| Luke Plant's home page
MP 95: Modeling blog posts, and retrieving specific data from the database. Note: This is the fifth post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. In the last post| Mostly Python
How to do proper release tracking on Opbeat with Ansible.| blog.dbrgn.ch
How to create proper initial data migrations for django-oscar.| blog.dbrgn.ch
How to solve an ImproperlyConfigured exception in Django Rest Framework related to improper use of the SerializerMethodField.| blog.dbrgn.ch
How to migrate from django-social-auth to python-social-auth.| blog.dbrgn.ch
How to plot registered Django users using matplotlib.| blog.dbrgn.ch
How to test Dajaxice views using the Django test client.| blog.dbrgn.ch
How to make AJAX detection used by Django and Flask work with d3.js.| blog.dbrgn.ch
How to mark some South migrations as new.| blog.dbrgn.ch
How to sort a SphinxSearch instance.| blog.dbrgn.ch
How to validate Django forms in a DRY way using multiple inheritance.| blog.dbrgn.ch
MP 94: Modeling data, and working with a database. Note: This is the fourth post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. In the last post we used Django's| Mostly Python
MP 92: A better home page, using templates. Note: This is the third post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. In the last post we wrote a single| Mostly Python
MP 91: A single file, serving a basic version of the project's home page. Note: This is the second post in a series about building a full Django project, starting with a single file. This series will be free to everyone, as soon as each post comes out. In this| Mostly Python
Some code and tips to combine Python and Django introspection APIs to enforce naming conventions in your Django models.| Luke Plant's home page
Hello Row Level Security is one of the lesser known great addition to PostgreSQL 9.5. The documentation about it is of PostgreSQL documentation quality of course, but there is a lack of online examples and usages without relying on distinct PostgreSQL users for multi-tenant websites. I recently built a proof of concept using RLS to secure access … Continue reading "Using Row Level Security with a Django application"| Pinaraf's website
We can be more confident that our application will not break during runtime if we validate our data is of an expected size/shape/range.| startcodingnow.com
Fletcher Heisler's first week as the CEO at Authentik Security, and his experience with getting authentik up and running using Docker Compose.| goauthentik.io
The goal of this article is to discuss the caveats of the default Django user model implementation and also to give you some advice on how to address them. It is important to know the limitations of the current implementation so to avoid the most common pitfalls. Something to keep in mind is that the Django user model is heavily based on its initial implementation that is at least 16 years old. Because user and authentication is a core part of the majority of the web applications using Django...| Simple is Better Than Complex
In this tutorial I’m going to show you how I usually start and organize a new Django project nowadays. I’ve tried many different configurations and ways to organize the project, but for the past 4 years or so this has been consistently my go-to setup. Please note that this is not intended to be a “best practice” guide or to fit every use case. It’s just the way I like to use Django and that’s also the way that I found that allow your project to grow in healthy way. Index Premises ...| Simple is Better Than Complex