Skip to content

jameelhamdan/django-gridfs-storage

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-gridfs-storage

Simple django GridFS storage engine

Usage:

  1. Install django_gridfs_storage:
    pip install django_gridfs_storage
    
  2. Into settings.py file of your project, add gridfs_storage to INSTALLED_APPS:
    INSTALLED_APPS = [
        ...,
        'gridfs_storage',
    ]
  3. add the following variables to your settings:
    # defaults to default local mongodb server
    DEFAULT_GRIDFS_URL = 'mongodb://127.0.0.1:27017' 
    # if set to None, it will refuse to serve files and raise an Exception
    DEFAULT_GRIDFS_SERVE_URL = None  
    DEFAULT_GRIDFS_COLLECTION = 'storage'
  4. To serve files through django (not recommended) you can use this in urls.py:
    urlpatterns = [
        path('admin/', admin.site.urls),
        ...,
        path('media/', include('gridfs_storage.urls')),
    ]

    and set the DEFAULT_GRIDFS_SERVE_URL to the prefix you specified in the path. in this case its /media/

  5. If you wish to use it on all FileField and ImageField set it as the default Storage:
    DEFAULT_FILE_STORAGE = 'gridfs_storage.storage.GridFSStorage'
  6. If you wish to use on individual field bases set it as the field storage:
    from django.db import models
    from gridfs_storage.storage import GridFSStorage
    
    class SampleModel(models.Model):
        attachment = models.FileField(storage=GridFSStorage())
        first_pic = models.ImageField(storage=GridFSStorage(location='sample/images'))
        
        # To store in a different collection than "storage"
        another_pic = models.ImageField(storage=GridFSStorage(collection='image_storage'))
        
        # Serve through custom cdn connected to the same gridfs or similar, the limit is the sky :)
        served_outside = models.ImageField(storage=GridFSStorage(base_url='https://img.cdn/serve/'))

Requirements:

  1. Python 3.6 or higher.
  2. Django 2.2 or higher.
  3. MongoDB 3.4 or higher.

Tests? None.

We crash production like real men