Skip to main content

Serving files directly from Django

Project description

Welcome to django_fileresponse

Serve files directly from Django.

django_fileresponse is a library that allows you to serve files directly from Django.

Features of django_fileresponse

django_fileresponse provides the following features for developers:

  • Use asyncio to serve files with high concurrency directly from Django.
  • Uses aiofiles to asynchronously read from filesystem and aiobotocore to asynchronously read from s3 compatible object stores

Installing

django_fileresponse is on PyPI so you can just run pip install django_fileresponse.

Replace Default ASGIHandler

You have to replace Djangos ASGIHandler, because it synchronously calls __next__ in for part in response which makes it impossible to await reading from a filesystem/object-store.

So you have to replace the default ASGIHandler in asgi.py.

So instead of building your application like this:

from django.core.asgi import get_asgi_application

application = get_asgi_application()
<IPython.core.display.Javascript object>

You have to import a modified ASGIHandler from fileresponse:

from fileresponse.asgi import get_asgi_application

application = get_asgi_application()
<IPython.core.display.Javascript object>

If you use a different mechanism to launch your application, you could also just import the modified AsyncFileASGIHandler directly:

from fileresponse.handlers import AsyncFileASGIHandler

django.setup(set_prefix=False)
application = AsyncFileASGIHandler()
<IPython.core.display.Javascript object>

How to use Async Fileresponses in your Views

Add functions below to your views.py

Serving from Filesystem

from fileresponse.http import AiofileFileResponse as AiofileFileResponse


async def get_file(request, path):
    file_path = Path(path)
    return AiofileFileResponse(file_path)
<IPython.core.display.Javascript object>

Serve Files from an S3 Compatible Object Store

from fileresponse.http import AiobotocoreFileResponse


async def get_file(request, key):
    bucket = settings.FILERESPONSE_S3_ACCESS_KEY_ID
    return AiobotocoreFileResponse(bucket, key, chunk_size=4096)
<IPython.core.display.Javascript object>

Settings

Example Settings for an S3 Compatible Object Store

FILERESPONSE_S3_ACCESS_KEY_ID="minioadmin"
FILERESPONSE_S3_SECRET_ACCESS_KEY="minioadmin"
FILERESPONSE_S3_REGION="us-west-2"
FILERESPONSE_S3_STORAGE_BUCKET_NAME="fileresponse"
FILERESPONSE_S3_ENDPOINT_URL="http://localhost:9000"

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_fileresponse-0.1.0.tar.gz (12.5 kB view hashes)

Uploaded Source

Built Distribution

django_fileresponse-0.1.0-py3-none-any.whl (11.8 kB view hashes)

Uploaded Python 3

Supported by

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