Да, было бы нормально разрешить django генерировать URL-адреса.Это исключительная возможность обработки URL-адресов с помощью urls.py.Как правило, вы не хотите, чтобы django управлял обслуживанием файлов, смотрите статические файлы docs [1] по этому поводу, так что получите представление об использовании шаблонов url из своей головы.
Что вы можете сделать, это сгенерировать случайный ключ, используя хеш, например, md5 / sha1.Сохраните файл и ключ, дату и время его добавления в базе данных, создайте каталог для загрузки в корневом каталоге, доступном с вашего веб-сервера, например, apache или nginx ... предложить nginx), поскольку он временный, вам нужно добавить cronЗадание, которое проверяет, истекло ли время с момента создания URL-адреса, очищает файл и удаляет запись в базе данных.Это должна быть команда django для manage.py
Обратите внимание, это пример кода, написанного только для этого и не проверенного!Это может не сработать так, как вы планировали достичь этой цели, но это работает.Если вы хотите, чтобы dl также был защищен pw, посмотрите в httpbasic auth.вы можете создавать и удалять записи на лету в файле httpd.auth с помощью htpasswd и модуля подпроцесса при создании ссылки или во время регистрации.
import hashlib, random, datetime, os, shutil
# model to hold link info. has these fields: key (charfield), filepath (filepathfield)
# datetime (datetimefield), url (charfield), orgpath (filepathfield of the orignal path
# or a foreignkey to the files model.
from models import MyDlLink
# settings.py for the app
from myapp import settings as myapp_settings
# full path and name of file to dl.
def genUrl(filepath):
# create a onetime salt for randomness
salt = ''.join(['{0}'.format(random.randrange(10) for i in range(10)])
key = hashlib('{0}{1}'.format(salt, filepath).hexdigest()
newpath = os.path.join(myapp_settings.DL_ROOT, key)
shutil.copy2(fname, newpath)
newlink = MyDlink()
newlink.key = key
newlink.date = datetime.datetime.now()
newlink.orgpath = filepath
newlink.newpath = newpath
newlink.url = "{0}/{1}/{2}".format(myapp_settings.DL_URL, key, os.path.basename(fname))
newlink.save()
return newlink
# in commands
def check_url_expired():
maxage = datetime.timedelta(days=7)
now = datetime.datetime.now()
for link in MyDlink.objects.all():
if(now - link.date) > maxage:
os.path.remove(link.newpath)
link.delete()
[1] http://docs.djangoproject.com/en/1.2/howto/static-files/