📜  FileField – Django 模型(1)

📅  最后修改于: 2023-12-03 14:41:11.400000             🧑  作者: Mango

FileField – Django 模型

FileField 是 Django 中的一种模型字段,用于存储上传的文件。FileField 可以作为您的 Django 应用程序中任何模型的字段之一,因此您可以将文件添加到您的模型中,并将它们存储在服务器上。

如何使用 FileField?
创建一个简单的 FileField

要创建一个简单的 FileField,您需要使用 models.FileField 类。该类需要两个参数:

  • upload_to: 用于存储文件的目录路径。
  • null: 表示该字段可以为 Null(即空),True 表示可以为空,False 表示不可以为空。
from django.db import models

class MyModel(models.Model):
    file = models.FileField(upload_to='uploads/', null=True)

以上代码将创建一个名为“file”的 FileField 字段,用于存储上传到 “uploads/” 目录下的文件。由于 null=True,该字段可以为 Null。

访问上传的文件

要访问上传的文件,您可以使用文件的相对 URL,如下所示:

mymodel = MyModel.objects.get(pk=1)
mymodel.file.url

输出:

'/media/uploads/myfile.jpg'

将上述 URL 传递给客户端即可在浏览器上查看文件。

验证上传的文件

在某些情况下,您可能希望验证上传的文件。例如,您可能希望文件仅为特定类型,如 PNG 或 PDF,或者文件大小在一定范围内。

为了验证上传的文件,您可以使用 validators 属性。 validators 属性允许您使用 Django 内置的验证器,也可以创建自己的自定义验证器。

from django.core.validators import FileExtensionValidator, MaxFileSizeValidator

class MyModel(models.Model):
    file = models.FileField(upload_to='uploads/', null=True,
                            validators=[FileExtensionValidator(['pdf', 'docx']),
                                        MaxFileSizeValidator(50 * 1024 * 1024)])

以上代码用于验证上传的文件必须是 pdf 或 docx 类型,并且文件大小不得超过 50 MB。

图像文件

如果您需要存储图像文件,可以使用 ImageField 字段。该字段是 FileField 的子类,与 FileField 相同,但还提供有关图像的额外属性和实用程序方法。

from django.db import models

class MyModel(models.Model):
    image = models.ImageField(upload_to='images/', null=True)
更多注意事项
  • 如果您正在使用本地文件系统存储文件,请注意,您可能需要在服务器上运行与为 Django 提供 Web 服务的用户相同的用户以进行读写操作。
  • 如果您正在使用其他存储,例如 Amazon S3,请按照 Django 的文档中提供的指南进行配置。
结论

FileField 让您可以轻松上传和存储文件。您可以使用 FileField 为 Django 应用程序中的任何模型添加文件上传功能。在使用时,请务必记住要正确验证和处理上传的文件。