從我讀到的,靜態文件應由服務器直接提供,而不是使用Python和Django。但是我需要限制文件對上傳文件的用戶的訪問。不幸的是,該文檔沒有關於在生產環境中提供用戶上傳的靜態文件的部分。如何限制靜態文件的用戶在Django中上傳他們?
如果我是對的,Facebook使用很難猜測的長網址。這聽起來像是對我來說合理的做法。我如何自動生成長ID並將它們用於Django上傳的媒體文件?
從我讀到的,靜態文件應由服務器直接提供,而不是使用Python和Django。但是我需要限制文件對上傳文件的用戶的訪問。不幸的是,該文檔沒有關於在生產環境中提供用戶上傳的靜態文件的部分。如何限制靜態文件的用戶在Django中上傳他們?
如果我是對的,Facebook使用很難猜測的長網址。這聽起來像是對我來說合理的做法。我如何自動生成長ID並將它們用於Django上傳的媒體文件?
您可以使用slugify
和datetime
。
from django.template.defaultfilters import slugify
import datetime
class MyModel(models.Model):
title = models.CharField(max_length=150, db_index=True)
image = models.Charfield(max_length=150, unique=True)
....
....
def save(self):
super(MyModel, self).save()
date = datetime.date.today()
self.image = '%i/%i/%i/%s' % (
date.year, date.month, date.day, slugify(self.title)
)
super(MyModel, self).save()
或者只是
使用time
from time import time
def get_upload_file_name(instance, filename):
return "uploaded_files/%s_%s" %(str(time()).replace('.','_'), filename)
class MyModel(models.Model):
description = models.TextField()
image = models.ImageField(upload_to=get_upload_file_name)
def __unicode__(self):
return "%s --> %s" % (self.user, self.description)
或者
通過使用此模塊 - django-unique-random
希望它有幫助!
如果你想以正確的方式做到這一點,你應該在支持它們的Web服務器(Apache,NGinx,或許更多)中使用X-SendFile/X-Accel-Redirect頭。您可能需要在Web服務器上啓用模塊(例如Apache中的mod_xsendfile)。
X-SendFile的功能是指示前端Web服務器用X-SendFile標題中提到的文件替換響應正文。這樣,您可以讓您的Django應用程序檢查文件的訪問權限,同時將文件下載服務卸載到前端服務器。