Django

Thin integration over Core. Pair with uploadkit-security for the default validator stack. Python 3.10–3.13, Django 4.2+.

Install

Shell
pip install uploadkit-django uploadkit-security
Shell
uv add uploadkit-django uploadkit-security
Shell
poetry add uploadkit-django uploadkit-security

Adapter glue

Policy setup, validators, UploaderError, and the JSON response shape are shared — see Common patterns.

Uses get_storage_provider()Boto3S3Storage (AWS S3 or MinIO) and as_uploadable().

views.py
from django.conf import settings
from django.http import JsonResponse
from uploadkit import Uploader, UploadPolicy, UploaderError
from uploadkit_django import as_uploadable, get_storage_provider, json_error_response
from uploadkit_security import default_validators

def notify(result):
    ...

def upload_view(request):
    storage = get_storage_provider()
    policy = UploadPolicy(
        max_size=5 * 1024 * 1024,
        allowed_extensions=frozenset({"png"}),
        allowed_mime_types=frozenset({"image/png"}),
        validators=default_validators(),
    )
    uploaded = request.FILES["file"]
    try:
        result = Uploader(policy, storage).upload(
            as_uploadable(uploaded),
            bucket=settings.UPLOADKIT_BUCKET,
            object_name=uploaded.name,
            after_upload=notify,  # or Celery-like .delay
        )
    except UploaderError as exc:
        return json_error_response(exc)
    return JsonResponse({
        "object_name": result.object_name,
        "sha256": result.sha256,
        "etag": result.etag,
    })

AWS: leave AWS_S3_ENDPOINT_URL unset. MinIO: set it to your endpoint.

settings.py + storage.py
# settings.py — AWS S3
AWS_ACCESS_KEY_ID = "AKIA..."
AWS_SECRET_ACCESS_KEY = "..."
AWS_S3_REGION_NAME = "eu-west-1"
UPLOADKIT_STORAGE_PROVIDER = "myapp.storage.get_provider"
UPLOADKIT_BUCKET = "my-prod-bucket"

# settings.py — MinIO (instead of / in addition to keys)
# AWS_S3_ENDPOINT_URL = "http://127.0.0.1:9000"
# AWS_ACCESS_KEY_ID = "minioadmin"
# AWS_SECRET_ACCESS_KEY = "minioadmin"

# myapp/storage.py — Boto3S3Storage + get_provider()
# (full class in /docs/storage/)
def get_provider():
    from django.conf import settings
    return Boto3S3Storage(
        access_key=settings.AWS_ACCESS_KEY_ID,
        secret_key=settings.AWS_SECRET_ACCESS_KEY,
        region=getattr(settings, "AWS_S3_REGION_NAME", "us-east-1"),
        endpoint_url=getattr(settings, "AWS_S3_ENDPOINT_URL", None),
    )

After-upload hooks: Common patterns · Full Boto3S3Storage class: Storage · uploadkit-django README