限制每个用户django的用户存储大小

时间:2014-08-02 00:53:58

标签: python django python-2.7 django-admin

我正在尝试限制用户存储我已经设置了外键,但我想知道如何才能实现这一点。如果有人能指出我正确的方向,我就会陷入困境。

这是我的model.py

class Document(models.Model):
    docfile = models.FileField(upload_to=only_filename)
    created_at = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User, related_name='uploaded_files')

2 个答案:

答案 0 :(得分:2)

更改设置变量FILE_UPLOAD_MAX_MEMORY_SIZE以限制最大大小 检查此uploadfile

答案 1 :(得分:0)

您是否试图为用户提供存储空间的总大小限制?每个用户都有相同的金额,还是可以不同?

我认为如果它可能不同,您首先需要一个custom user model或其他一些跟踪用户存储限制的模型。或者,如果您只是让所有用户都具有相同的限制,则可以跳过创建模型。

之后,您需要一些程序来计算用户使用的存储空间。实现这一目标的一种方法是将upload_to字段上传到特定于用户的目录,例如:

class Document(models.Model):
    docfile = models.FileField(upload_to=USERNAME + '/' + only_filename)

然后,在文件上传之前的某个地方,你可以做这样的事情(在带参数的自定义模型验证器的views.py中?):

import os
def get_user_storage(username):
    user_files = os.listdir(os.path.join(os.path.abspath(UPLOAD_PATH), username)
    total = sum(os.path.getsize(fl) for fl in user_files)
    return total < WHATEVER_THE_MAXIMUM_IS

一旦你有这个功能,你传递一个用户名,如果用户没有超过他们的存储,它会返回True,如果他们有,则返回False。这个问题的一个大问题是它将返回True,直到用户超过​​他/她的存储空间,但它并不关心多少。因此,如果您将存储限制设置为1gb,并且没有先前上传的文件的用户上传了一些特殊内容,则此功能本身就可以实现。

为防止这种情况发生,您可以设置最大文件上传限制。

我没有尝试过任何此类代码,但我认为它可能会让您开始拼凑解决方案。