Cloudflare Images integration for Django
Project description
django-cloudflare-images
This is a Django library to add support to Cloudflare Images to the ImageField.
It supports:
- Django 3
- Django 4
- Django 5
Installation
pip install django-cloudflare-images
Setup
You need to add the following your settings.py:
- If you are running Django 4.2+:
STORAGES = {"default": {"BACKEND": "cloudflare_images.storage.CloudflareImagesStorage"}}
- Else:
DEFAULT_FILE_STORAGE = "cloudflare_images.storage.CloudflareImagesStorage"
And then add the remaining of the configuration:
CLOUDFLARE_IMAGES_ACCOUNT_ID = "XXX"
CLOUDFLARE_IMAGES_API_TOKEN = "YYY"
CLOUDFLARE_IMAGES_ACCOUNT_HASH = "ZZZ"
If you wish to use a default variant for a specific field you need to change your ImageField to a CloudflareImagesField see example below:
from cloudflare_images.field import CloudflareImagesField
from django.db import models
class MyModel(models.Model):
image = CloudflareImagesField(variant="custom")
Please note that you will need to migrate your model(s) once you swapped the field(s). No SQL will actually be applied (you can check by running sqlmigrate <module> <number>).
If you wish to use a custom domain to serve your images you need to add the following to your settings.py:
CLOUDFLARE_IMAGES_DOMAIN = "example.com"
If you wish to use a default variant other than "public" to serve your images you need to add the following to your settings.py:
CLOUDFLARE_IMAGES_VARIANT = "custom"
If you wish to override the default timeout of 60 seconds for API requests, you need to add the following to your settings.py:
CLOUDFLARE_IMAGES_API_TIMEOUT = 120
Direct Creator Upload
If you want to leverage Cloudflare's Direct Creator Upload (client side upload, similar to S3/Minio presigned URL concept), you need to do the following:
Modify your settings:
INSTALLED_APPS = [
"cloudflare_images",
]
Modify your urls:
from cloudflare_images.views import WidgetAPI
# And add inside your router:
path("ext/cloudflare_images/api", WidgetAPI.as_view(), name="widget-api"),
Please note that it is much safer to implement your own endpoint to retrieve the one time URL from cloudflare
You can override the endpoint to use like so:
CLOUDFLARE_IMAGES_UPLOAD_ENDPOINT="/my/endpoint/api"
Please refer to this file for the base implementation details
Modify/Add to your model:
from cloudflare_images.field import CloudflareImageIDField
# in your model:
image = CloudflareImageIDField(variant="test")
If you are changing from a CloudflareImagesField, please note that you need to generate a migration (python manage.py makemigrations) and that this new field is not backward compatible in particular to access the .url field.
Modify your HTML template using a django form to load the JS/CSS:
{{ form.media.js }}
{{ form.media.css }}
And you should be good to go. For basic troubleshooting, check your browser's console for hints or open a ticket.
Development
Installing for development:
make install
Cleaning the installation:
make clean
Format the code:
make format
Check the code (for linting errors):
make check
Check the code (python type checker):
make static-check
Running all tests:
make test
Create a sdist+bdist package in dist/:
make package
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_cloudflare_images-1.0.0.tar.gz.
File metadata
- Download URL: django_cloudflare_images-1.0.0.tar.gz
- Upload date:
- Size: 12.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
949b3e5aeb6d236c3d30501684c1f4c8b0519940e5bf504f8282cc742cbccb13
|
|
| MD5 |
6a2bdb7b5fc8fd9d7bc6d7c6612adb8f
|
|
| BLAKE2b-256 |
fe6825fa209e3985f74fcb693ffb7c8e8df2da2894a8c6410ce2c3f745057266
|
File details
Details for the file django_cloudflare_images-1.0.0-py3-none-any.whl.
File metadata
- Download URL: django_cloudflare_images-1.0.0-py3-none-any.whl
- Upload date:
- Size: 11.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d852ddfc1451ec8cd0b8df1209f1d306fc38b870f1ba54d9e15a0b314783e2ab
|
|
| MD5 |
c3adba5e8ca7fbd50d0dc17c10ecff3e
|
|
| BLAKE2b-256 |
bcb78db71b3a03769a874940a198adb4a5a20c87dc125c71b355b1dd8468d8fc
|