How to migrate your Poetry project to uv

So, like me you’ve decided to switch from Poetry to uv, and now you’re wondering how to actually migrate your pyproject.toml file? You’ve come to the right place!

read more

Revisiting uv

Almost two months ago I compared Poetry with uv, and for me uv had some pretty significant drawbacks that kept me from switching over. The situation has changed quite a bit since then!

read more

How to change MEDIA_URL for one FileField

I wanted to use a different MEDIA_URL for one of our FileField instances. It was very easy to do!

read more

Django REST Framework versus Django Ninja

Let’s compare Django REST Framework with new kid on the block, Ninja.

read more

Automatically deploy your site when you push the main branch

The best feature of Heroku is the ability to just push a branch, and it gets deployed. How do we replicate a workflow like that on our own server?

read more

Trying out PDM (and comparing it with Poetry and uv)

After comparing uv to Poetry, I am trying out PDM. On paper it combines all the best things of Poetry and uv, without their downsides. How does it hold up?

read more

How I configure my Django projects

There are many ways to configure Django, like multiple settings files or .env files. Here’s how I do it.

read more

Validate PayPal webhooks using Python

Paypal’s documentation only shows a JavaScript example. How do you validate the webhooks in Python though?

read more

Poetry versus uv

Comparing two Python package managers: Poetry and new kid on the block uv.

read more

Changing the way Django 5.1 generates admin list labels

Django 5.1 adds related field lookup to the model admin’s list_display, but with an annoying quirk. Let’s fix that!

read more

Extend Django’s autocomplete widget actions

Extending Django’s autocomplete widget with a new action which copies the linked user’s email address to the clipboard.

read more

Deleting anonymous users' baskets when their sessions expire

How do you delete baskets belonging to anonymous users when their sessions expires? It wasn't quite as simple as I thought.

read more

Adding custom actions to the Django Admin

Let's add custom actions to Django's admin site - but to the change form, not the list view.

read more

Setting up a Debian 11 server for SvelteKit and Django

I recently had to set up a brand new server for a website running on SvelteKit and its API running on Django. I am a software developer and setting up servers and hosting isn't something I normally do, so I followed a bunch of different tutorials. In this article I want to combine all these tutorials, mostly for future me, but hopefully you'll find it useful as well.

read more

Vapor 4 versus Django REST Framework

Over two years ago I wrote an article where I compared Vapor 3 to Django REST Framework. It's time for a rematch with Vapor 4.

read more

Vapor 3 versus Django REST Framework

A little while ago I wrote about starting a new side project, where I was using Vapor 3 to build the backend. My initial impressions were extremely positive, but I ended up running into a few issues that made working with the framework a little bit...

read more

Review roundup: the search for the perfect Python IDE (for Django)

When I first started working with Python in September 2009, I needed a good IDE. I quickly settled for Netbeans and I’ve been using it ever since, even though there are some things that really irritate me. But at least it works, and fits well in my...

read more

Django-CMS backend usability

Yesterday I wrote an article comparing Django-CMS, FeinCMS and Mezzanine. One of the conclusions was that while Django-CMS is the best CMS on paper, I don’t like its backend interface that much. I thought it would be a good idea to properly explain...

read more

Django-CMS vs. FeinCMS vs. Mezzanine

When you need a content management system for Django, there is enough choice. Maybe even too much: the very helpful site djangopackages.com lists 13. Some are mature and very feature-complete, while others are barely more than a basic model and a...

read more

Looking for a Django CMS which suits my needs

I need to build a content-based website for a client, in Django. Well, that’s easy right? Pick one of the content management systems available, build some templates and css, and ta-da, done. Since I have used Django-CMS in previous projects, that...

read more

Serving 5000 pages per second with Django

Okay, this website wasn’t slow and will never need to serve 5000 pages per second, but hey, it’s possible now! Oh right, and it was fun to play around with a nice caching system. Almost everything on mixedCase.nl needs to come from the database: the...

read more

Django 1.2, a great release

I’ve been playing with the Beta release of Django 1.2 (get it here) and I love many of the new improvements. I’d like to list the best and biggest new features, and also some problems I encountered while using it. Smarter if tag I was already using...

read more

Using Jinja2 templates in Django

In my previous post Things I “hate” about Python and Django, I said that one of the things I “hate” about Django is its template language. While very easy to use and pretty extensible, it’s missing some important (and basic, to be honest) features...

read more

Things I “hate” about Python and Django

I have been a PHP programmer for the last 9 years, and only in September of 2009 I switched to Python and the Django framework. While I really love the Python language and the Django framework (especially compared to something like the Zend PHP...

read more

Using the Google Visualization API in Django

In a project I am working on, I need to show a lot of graphs and charts. Together with the client we chose to use the Visualization API by Google, which provides a Python library, offers many different kinds of charts and very important: the data is...

read more

How to dynamically add fields to a Django model

For a project I needed to create a Django model from a list of fields that were defined somewhere else. It took me hours to get this to work, so to save you the time, here is the solution: fields = ['field_a', 'field_b', 'field_c'] # the base model...

read more