2014-05-10 27 views
3

從我讀到的,靜態文件應由服務器直接提供,而不是使用Python和Django。但是我需要限制文件對上傳文件的用戶的訪問。不幸的是,該文檔沒有關於在生產環境中提供用戶上傳的靜態文件的部分。如何限制靜態文件的用戶在Django中上傳他們?

如果我是對的,Facebook使用很難猜測的長網址。這聽起來像是對我來說合理的做法。我如何自動生成長ID並將它們用於Django上傳的媒體文件?

回答

5

您可以使用slugifydatetime

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

希望它有幫助!

1

如果你想以正確的方式做到這一點,你應該在支持它們的Web服務器(Apache,NGinx,或許更多)中使用X-SendFile/X-Accel-Redirect頭。您可能需要在Web服務器上啓用模塊(例如Apache中的mod_xsendfile)。

X-SendFile的功能是指示前端Web服務器用X-SendFile標題中提到的文件替換響應正文。這樣,您可以讓您的Django應用程序檢查文件的訪問權限,同時將文件下載服務卸載到前端服務器。

相關問題