django-thumborstorage
March 8, 2022 ยท View on GitHub
===================== django-thumborstorage
.. image:: https://coveralls.io/repos/github/Starou/django-thumborstorage/badge.svg?branch=master :target: https://coveralls.io/github/Starou/django-thumborstorage?branch=master
.. image:: https://img.shields.io/pypi/v/django-thumborstorage.svg :target: https://pypi.python.org/pypi/django-thumborstorage
A Django custom storage for Thumbor.
Provides 2 custom storages classes: ThumborStorage and ThumborMigrationStorage.
Use ThumborMigrationStorage on an Imagefield that started with a classic
FileSystemStorage you want to upgrade to Thumbor without migrating your old
media. That way, Django continues to serve them from the file system until the
image is changed.
Install
::
pip install django-thumborstorage
Dependencies ''''''''''''
- Python 3.6+
- Django 2.1 to 3.2
- Requests_
- Libthumbor_
Recommended:
- Django-thumbor_ (to manage thumbnails).
- Thumbor_
Usage
settings.py '''''''''''
Add django_thumborstorage in INSTALLED_APPS.
And set the following with your values:
.. code-block:: python
THUMBOR_SERVER = 'https://my.thumbor.server.com:8888'
THUMBOR_SECURITY_KEY = 'MY_SECURE_KEY'
# This may be a different host than THUMBOR_SERVER
# only reachable by your Django server.
THUMBOR_RW_SERVER = 'https://my.rw.thumbor.server.local:8888'
models.py '''''''''
Just set the storage parameter in the ImageField you want to manage with Thumbor:
.. code-block:: python
from django_thumborstorage.storages import ThumborStorage
class Stuff(models.Model):
def upload_path(instance, filename):
return 'stuffs/%s' % filename
photo = models.ImageField(upload_to=upload_path,
storage=ThumborStorage(),
height_field='photo_height',
width_field='photo_width')
photo_height = models.IntegerField(blank=True, null=True)
photo_width = models.IntegerField(blank=True, null=True)
In the code '''''''''''
You can get the Thumbor uuid from the <ImageField> instance using:
.. code-block:: python
my_stuff.photo.storage.key(my_stuff.photo.name)
This is useful to generate_url() with Django-thumbor_ when original files are stored on Thumbor. Thus,
you can pass the key as url parameter.
CHANGELOG
2.0.0 '''''
- Add support for Django 3.2.
Possible breaking change
The leading / in the path of the file stored in the database has been removed
due to a breaking change introduced un Django 3.2.11.
That release handle seamlessly both pre-2.0.0 style (/image/...) and post-2.0.0 style paths (image/...) so there is not need to migrate your database to replace /image/... with image/....
1.13.0 ''''''
- Drop support for Django < 2.1 and Python 2.7, 3.4 and 3.5
- Use GitHub actions for CI instead of Travis.
1.11.0 ''''''
- Drop support for Django < 1.11 and Python 3.4.
- Remove
mockfrom dependencies.
0.92.2 ''''''
- Fix
readonly_to_rw_url()to manage suffix in the urls.
0.92.1 ''''''
- Handle status code of the Thumbor server response when posting an image.
0.92.0 ''''''
- Added experimental Python 3.4 support (Thanks to Charlie 123.)
- Fixed broken support for Django < 1.7 (Thanks to Rizziepit.)
- Added unicode support in file names (Thanks to Rizziepit.)
0.91.6 ''''''
- Add
storages.readonly_to_rw_url(), a function to convert a read-only thumbor url in a rw url.
0.91.5 ''''''
- Use THUMBOR_SERVER to generate the original file url.
Backward imcompatibilities
THUMBOR_SERVERandTHUMBOR_SECURITY_KEYare required in settings.
0.91.4 ''''''
- Add
ThumborStorage.key(name)to retrieve the Thumbor uuid from the name.
0.91.3 ''''''
Backward imcompatibilities
THUMBOR_WRITABLE_SERVERsetting is replaced byTHUMBOR_RW_SERVERsince it is now used to retrieve the original file.
TODO
- PUT
.. _Requests: http://www.python-requests.org/en/latest/ .. _Thumbor: https://github.com/globocom/thumbor .. _Libthumbor: https://github.com/heynemann/libthumbor .. _Django-thumbor: https://django-thumbor.readthedocs.org/en/latest/