Skip to main content

Django REST File Manager

A package that provides authenticated file management (upload/download) using REST Framework and Amazon S3 (optionally)

Install app:

pip install djangorestfilemanager

Add in installed apps:

INSTALLED_APPS = [..., 'rest_framework', 'django_filters', 'djangorestfilemanager.apps.DjangoRestFileManagerConfig']

/proyect/settings.py

Specific app settings, by default will save in /files/....

REST_FILE_MANAGER = {
    'UPLOADS_DIR': '...'
}

S3 storage setup.

If AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_STORAGE_BUCKET_NAME is not provided, files will save in local storage

STATIC_URL = '/static/'
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media', 'files')

S3_STORAGE = False
AWS_DEFAULT_ACL = None

if env('AWS_ACCESS_KEY_ID') and env('AWS_SECRET_ACCESS_KEY') and env(
        'AWS_STORAGE_BUCKET_NAME'):
    S3_STORAGE = True
    AWS_ACCESS_KEY_ID = env('AWS_ACCESS_KEY_ID')
    AWS_SECRET_ACCESS_KEY = env('AWS_SECRET_ACCESS_KEY')
    AWS_STORAGE_BUCKET_NAME = env('AWS_STORAGE_BUCKET_NAME')
    AWS_LOCATION = 'media'
    AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'
    AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
    AWS_S3_FILE_OVERWRITE = False
    AWS_S3_ENCRYPTION = True
    AWS_IS_GZIPPED = True
    GZIP_CONTENT_TYPES = (
        'application/pdf', 'application/json', 'text/csv', 'application/xml', 'application/xhtml+xml',
        'application/msword', 'application/vnd.oasis.opendocument.presentation',
        'application/vnd.oasis.opendocument.spreadsheet', 'application/vnd.oasis.opendocument.text',
        'application/vnd.ms-powerpoint', 'application/x-rar-compressed', 'application/xhtml+xml',
        'application/vnd.ms-excel', 'application/xml', 'application/zip',
        'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
    )

.env:

AWS_DEFAULT_ACL=''
AWS_ACCESS_KEY_ID=''
AWS_SECRET_ACCESS_KEY=''
AWS_STORAGE_BUCKET_NAME=''
AWS_CACHE_CONTROL=86400
AWS_LOCATION=''
AWS_S3_FILE_OVERWRITE=False

urls.py

from djangorestfilemanager.urls import router as file_manager_router

urlpatterns = [
    ...,
    path('', include(file_manager_router.urls))

]

#API REST ENDPOINTS:

Permission: Authentication is required.

If user is superuser, can download all files.

If user is file owner, that user can download this file.

If file is shared (share==True) and user have perms, can download this file.

Upload File

param description
url /{{api}}/files/
methods post
--- ---
file file object
type string, max length 10 not required
permission string content_type.model +.+ permission.name Example: user.can_create_user, default ''
share bool, default true
data jsonfield
--- ---
return_data uuid

Download File

param description
url /{{api}}/files/{{uuid}}/
--- ---
methods get
--- ---
return download file.

#OVERRIDE ENDPOINTS

DJANGO_REST_FILE_MANAGER_SERIALIZERS = {
    'FILE_SERIALIZER': '...',
    'FILE_VIEW_SERIALIZER': '...',
}

#OVERRIDE SETTINGS

REST_FILE_MANAGER = {
    'UPLOADS_DIR': os.environ.get('UPLOADS_DIR', default='media/'),
    'STATUS_CHOICES': (
        (PENDING, 'Pending'),
        ....
    )
    'DEFAULT_CHOICE':'' #STRING VALUE,
    'DEFAULT_SHAREABLE': Boolean, default True
}

How to update to Pypi

When a new release is ready we have to make the package. Exec the following command (Remember to update setup.py with the current version of the package.)

python setup.py sdist

After that, we have to push our package to Pypi with twine (the first time we will have to install it)

twine upload dist/*

This command will upload every version existing on dist folder, we can specify one changing dist/* to the new dist file dist/package_filename.gz.

Release files for djangorestfilemanager 2.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for djangorestfilemanager 2.0.3
File Size Uploaded
djangorestfilemanager-2.0.3.tar.gz 11.6 kB Details

Release files / djangorestfilemanager-2.0.3.tar.gz

Download URL djangorestfilemanager-2.0.3.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
d49ea373f1bff27c3cfdec1eaa8d075d1396c405941ed6d33bea88496b84ed8d
BLAKE2b-256 checksum
How to use checksums
fdd01a2b85c67e7e44dc890b159e974bf7f4ab253b9172b31a9ab54eed42732a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.16

Release history Release notifications | RSS feed

This release

2.0.3 This release

1 release file

2.0.2

1 release file

2.0.1

1 release file

2.0

1 release file

1.1.11

1 release file

1.1.10

1 release file

1.1.9

1 release file

1.1.8

1 release file

1.1.7

1 release file

1.1.6

1 release file

1.1.5

1 release file

1.1.4

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.10

1 release file

1.0.9

1 release file

1.0.8

1 release file

1.0.7

1 release file

1.0.6

1 release file

1.0.5

1 release file

1.0.4

1 release file

1.0.3

1 release file

1.0.2

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.3.6

1 release file

0.3.5

1 release file

0.3.3

1 release file

0.3.2

1 release file

0.3.1

1 release file

0.3.0

1 release file

0.2.2

1 release file

0.2.1

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page