Skip to main content

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:

  1. If you are running Django 4.2+:
STORAGES = {"default": {"BACKEND": "cloudflare_images.storage.CloudflareImagesStorage"}}
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_cloudflare_images-1.0.0.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_cloudflare_images-1.0.0-py3-none-any.whl (11.4 kB view details)

Uploaded Python 3

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

Hashes for django_cloudflare_images-1.0.0.tar.gz
Algorithm Hash digest
SHA256 949b3e5aeb6d236c3d30501684c1f4c8b0519940e5bf504f8282cc742cbccb13
MD5 6a2bdb7b5fc8fd9d7bc6d7c6612adb8f
BLAKE2b-256 fe6825fa209e3985f74fcb693ffb7c8e8df2da2894a8c6410ce2c3f745057266

See more details on using hashes here.

File details

Details for the file django_cloudflare_images-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_cloudflare_images-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d852ddfc1451ec8cd0b8df1209f1d306fc38b870f1ba54d9e15a0b314783e2ab
MD5 c3adba5e8ca7fbd50d0dc17c10ecff3e
BLAKE2b-256 bcb78db71b3a03769a874940a198adb4a5a20c87dc125c71b355b1dd8468d8fc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page