Наличие в Django загружаемых файлов - PullRequest
227 голосов
/ 21 июля 2009

Я хочу, чтобы пользователи на сайте могли загружать файлы, пути которых скрыты, поэтому их нельзя напрямую загрузить.

Например, я бы хотел, чтобы URL был примерно таким: "http://example.com/download/?f=somefile.txt

А на сервере я знаю, что все загружаемые файлы находятся в папке "/home/user/files/".

Есть ли способ заставить Django обслуживать этот файл для загрузки, в отличие от попыток найти URL и просмотреть его для просмотра?

Ответы [ 14 ]

2 голосов
/ 21 июля 2009

Django рекомендует использовать другой сервер для обслуживания статических носителей (другой сервер, работающий на той же машине, подходит.) Они рекомендуют использовать такие серверы как lighttp .

Это очень просто настроить. Тем не мение. если 'somefile.txt' генерируется по запросу (контент динамический), вы можете захотеть, чтобы django его обслуживал.

Django Docs - Статические файлы

0 голосов
/ 01 апреля 2014

Обеспечение защищенного доступа к статической html-папке с использованием https://github.com/johnsensible/django-sendfile: https://gist.github.com/iutinvg/9907731

0 голосов
/ 02 мая 2012

Я сталкивался с той же проблемой более одного раза и поэтому реализовал ее с помощью модуля xsendfile и декораторов вида auth django-filelibrary . Не стесняйтесь использовать его как вдохновение для вашего собственного решения.

https://github.com/danielsokolowski/django-filelibrary

0 голосов
/ 13 января 2012

Еще один проект, который стоит посмотреть: http://readthedocs.org/docs/django-private-files/en/latest/usage.html Выглядит многообещающе, сам еще не проверял.

По сути, проект абстрагирует конфигурацию mod_xsendfile и позволяет вам делать такие вещи как:

from django.db import models
from django.contrib.auth.models import User
from private_files import PrivateFileField

def is_owner(request, instance):
    return (not request.user.is_anonymous()) and request.user.is_authenticated and
                   instance.owner.pk = request.user.pk

class FileSubmission(models.Model):
    description = models.CharField("description", max_length = 200)
        owner = models.ForeignKey(User)
    uploaded_file = PrivateFileField("file", upload_to = 'uploads', condition = is_owner)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...