- Файл вне публичного доступа (не в
Папки MEDIA_URL)
- Проверьте, вошел ли пользователь в систему
- Служить файлы только через представление, с
уникальные ссылки для каждого пользователя
псевдокод:
class Mp3(models.Model):
file = models.FileField(upload_to=path_outside_of_public_access)
hash = models.CharField(unique=True)
def generate_link_hash(request, file):
return hashlib.md5("%s_%i_%s_%s" % (request.session.session_key, file.id, str(file.date_added), file.hash)) # or however u like
def files_list(request)
""" view to show files list """
for file in files:
file.link_hash = generate_link_hash(request, file)
@login_required
def download_file(request, file_hash, link_hash):
""" view to download file """
file = Mp3.objects.get(hash=file_hash)
if link_hash == generate_link_hash(request, file):
file = open(file.file)
return HttpResponse(file.read(), mimetype="audio/mpeg")
else:
raise Http404
Должен делать работу достаточно, но помните - к тому, к чему когда-то обращались, у вас нет контроля, куда он идет с этого момента. И что каждая загрузка файла требует чтения файла через приложение (оно не указано статически), что повлияет на производительность вашего приложения.