Authentication for single-page (and other) apps

If you run a ReST-style web API, It can be a bit tricky to decide which authentication mechanism is right for your scenario. Even more so if you need to support multiple different types of clients. Plain tokens? JWT? Session cookies? OAuth2? What about CORS? Do you neec CSRF protection ...

more ...

Case-insensitive usernames in Django

Django's user model treats usernames case-sensitively by default. This is basically never what you want.

It is quite common these days to treat the e-mail address as the login name. E-mail addresses are case-sensitive according to the relevant standards, but in practice they are not. Users will arbitrarily switch ...

more ...

Moving a Django model to another app

Moving a Django model to another app can be tricky. Here is a quick rundown of the most convenient way I found so far. The idea is to simply rename the database tables, and force Django to consider this the new state of your models. Thanks to Marten Kenbeek who ...

more ...



Debugging Django production issues

Date Modified Tags django / python

From time to time, I run into a problem that only occurs in a production-like Django setup (DEBUG off, running under gunicorn, static asset compression in play, and so on).

Debugging such issues on a staging system can be time-consuming. Sometimes, there is no alternative. But often, it's easier ...

more ...

Django static files (and templates) in a nutshell

New to Django and confused about how to handle templates and static files? Don't worry, you are in good company. Many people get confused by this at some point.

Here is a quick example of how to handle your static files and templates in Django 1.8.

1   Settings ...

more ...

Dynamic forms for Django's admin

A question that pops up every once in a while is how to create Django admin forms dynamically.

This is actually trivial, thanks to the fact that Python has closures. But the fact that it is so simple may not be obvious to everybody, so I am documenting it here ...

more ...

Per-request caching in Django

One of my Django projects contains a function that looks like this:

1
2
3
4
def get_default_language_code():
    default_lang = Language.objects.filter(default=True).first()
    if default_lang is not None:
        return default_lang.code

This function gets called multiple times, and it will hit the database on each call. This is ...

more ...