home blog portfolio Ian Fisher

Django

A stalwart web framework for Python. More fully-featured than Flask – includes an ORM, for instance. Co-created in 2005 by Simon Willison, now of LLM fame.

Cheatsheet

https://docs.djangoproject.com/en/5.2/

Model fields

Template tags

Querysets

class Book(models.Model):
    title = models.TextField()
    author = models.TextField()

Book.objects.filter(title="...")
# return dicts with a subset of fields
Book.objects.all().values("title")

try:
    book = Book.objects.get(title="...")
except Book.DoesNotExist:
    ...

Bulk create

models = [
  MyModel(...),
  MyModel(...),
]

MyModel.objects.bulk_create(models, batch_size=100)

Get current time

from django.utils import timezone

timezone.now()

Request authentication

request.user.is_authenticated
request.user.is_staff

Transactions

from django.db import transaction

@transaction.atomic
def my_view(request):
    ...

Handler imports

from django.http import Http404, HttpResponse, HttpResponseRedirect, JsonResponse
from django.shortcuts import render
from django.views.decorators.http import require_GET, require_POST

HTTP error

from django.http import HttpResponse

def my_view(request):
  # ...
  return HttpResponse(status=400)

HTTP redirect

from django.http import HttpResponseRedirect

return HttpResponseRedirect("/path/to/target")

Handle missing model

from django.http import Http404

try:
    page_model = Page.objects.get(path=path)
except Page.DoesNotExist:
    raise Http404

URLs

from django.urls import include, path

urlpatterns = [
    path("blog", views.blog_page),
    path("blog/<int:year>/<slug:slug>", views.blog_post_page),
    path("myapp", include("myapp.urls")),
]

Management commands

# in <app>/management/commands/
from django.core.management.base import BaseCommand

class Command(BaseCommand):
    help = "Create an API key for a user"

    def add_argument(self, parser):
        # ...

    def handle(self, *args, **options):
        # ...

Custom admin field name

Use the verbose parameter for the field in the model class.

Undo migration

You can undo a database migration by migrating to the previous migration:

$ ./manage.py migrate APP 0013