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