【问题标题】:How to restrict static files to the user who uploaded them in Django?如何将静态文件限制为在 Django 中上传它们的用户?
【发布时间】:2014-05-10 15:22:05
【问题描述】:

根据我的阅读,静态文件应该由服务器直接提供,而不是使用 Python 和 Django。但我需要限制上传文件的用户访问文件。不幸的是,该文档没有关于在生产环境中提供用户上传的静态文件的部分。

如果我是对的,Facebook 会使用难以猜测的长网址。这听起来对我来说是一个合理的方法。如何在 Django 中自动生成长 id 并将其用于上传的媒体文件?

【问题讨论】:

    标签: django security random static-files


    【解决方案1】:

    您可以使用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

    希望对你有帮助!

    【讨论】:

      【解决方案2】:

      如果您想以正确的方式执行此操作,则应在支持它们的 Web 服务器(Apache、NGinx 等)中使用 X-SendFile/X-Accel-Redirect 标头。您可能需要在 Web 服务器上启用模块(例如 Apache 中的 mod_xsendfile)。

      X-SendFile 所做的是它指示前端 Web 服务器将响应的正文替换为 X-SendFile 标头中提到的文件。这样,您可以让 Django 应用程序检查文件的访问权限,同时将文件下载服务卸载到前端服务器。

      【讨论】:

      猜你喜欢
      • 2015-12-24
      • 1970-01-01
      • 2016-11-22
      • 2014-09-01
      • 1970-01-01
      • 2014-11-27
      • 2014-12-06
      • 2015-04-06
      • 1970-01-01
      相关资源
      最近更新 更多