• Django Manage File


    default_storage

    >>> from django.core.files.base import ContentFile
    >>> from django.core.files.storage import default_storage
    
    >>> path = default_storage.save('/path/to/file', ContentFile('new content'))
    >>> path
    '/path/to/file'
    
    >>> default_storage.size(path)
    11
    >>> default_storage.open(path).read()
    'new content'
    
    >>> default_storage.delete(path)
    >>> default_storage.exists(path)
    False
    

    The built-in filesystem storage class

    from django.core.files.storage import FileSystemStorage
    from django.db import models
    
    fs = FileSystemStorage(location='/media/photos')
    
    class Car(models.Model):
        ...
        photo = models.ImageField(storage=fs)
    

    django提供了一系列api用来处理ImageField对象和FileField对象

    from django.db import models
    
    class Car(models.Model):
        name = models.CharField(max_length=255)
        price = models.DecimalField(max_digits=5, decimal_places=2)
        photo = models.ImageField(upload_to='cars')
    

    >>> car = Car.objects.get(name="57 Chevy")
    >>> car.photo
    <ImageFieldFile: chevy.jpg>
    >>> car.photo.name
    'cars/chevy.jpg'
    >>> car.photo.path
    '/media/cars/chevy.jpg'
    >>> car.photo.url
    'http://media.example.com/cars/chevy.jpg'
    

    django提供了 django.core.files.File来代表一个file文件

    大多数情况下,您将使用django提供的File类

    >>> from django.core.files import File
    
    # Create a Python file object using open()
    >>> f = open('/path/to/hello.world', 'w')
    >>> myfile = File(f)
    

    现在你就可以使用django提供的File api了。以这种方式创建的文件不会自动关闭,以下方法可以用于关闭文件

    >>> from django.core.files import File
    
    # Create a Python file object using open() and the with statement
    >>> with open('/path/to/hello.world', 'w') as f:
    ...     myfile = File(f)
    ...     myfile.write('Hello World')
    ...
    >>> myfile.closed
    True
    >>> f.closed
    True
    

    File storage

    在幕后,Django将决定如何以及在何处将文件存储到文件存储系统。这个对象实际上能够理解文件系统、打开和读取文件等内容。

    Django的默认文件存储由DEFAULT_FILE_STORAGE设置提供;如果您没有显式地提供存储系统,那么将使用这个系统。

    有关内置默认文件存储系统的详细信息,请参阅下面的“编写自定义存储系统”,了解如何编写自己的文件存储系统

    Storage object

    虽然在大多数情况下,您希望使用File对象(它将委托给该文件的适当存储),但是您可以直接使用文件存储系统。您可以创建某个自定义文件存储类的实例,或者(通常更有用)您可以使用全局默认存储系统

    Storage object api

    django提供了两种方便的方法使用当前storage class

    class DefalutStorage
    1. DefaultStorage提供对DEFAULT_FILE_STORAGE定义的当前默认存储系统的延迟访问。
    • DefaultStorage在内部使用get_storage_class()。
    get_storage_class
    1. 返回实现存储API的类或模块。
    2. 在没有调用import_path参数get_storage_class时,将返回DEFAULT_FILE_STORAGE定义的当前默认存储系统。如果提供了import_path, get_storage_class将尝试从给定的路径导入类或模块,如果成功,将返回它。如果导入失败,将引发异常。
    The FileSystemStorage class

    class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)

    文件系统存储类在本地文件系统上实现基本的文件存储。它从存储中继承并为其所有公共方法提供实现。

    location

        保存文件的目录的绝对路径。默认设置为MEDIA_ROOT设置的值

    base_url

        服务存储在此位置的文件的URL。默认为MEDIA_URL设置的值

    file_permissions_mode

        文件保存时将接收的文件系统权限。默认为FILE_UPLOAD_PERMISSIONS

    directory_permissions_mode

        保存目录时将接收的文件系统权限。默认为FILE_UPLOAD_DIRECTORY_PERMISSIONS。

    get_created_time

        返回系统的ctime的日期时间,即os.path.getctime()。在某些系统(如Unix)上,这是最后一次元数据更改的时间,而在其他系统(如Windows)上,这是文件的创建时间。

    The Storage class

    存储类为存储文件提供了标准化的API,以及所有其他存储系统可以根据需要继承或覆盖的一组默认行为。

    delete(name)

        删除按名称引用的文件。如果目标存储系统不支持删除,则会导致引起NotImplementedError

    exists(name)

        如果指定名称引用的文件已经存在于存储系统中,则返回True;如果新文件的名称可用,则返回False

    get_accessed_time(name)

        返回文件最后一次访问时间的日期时间。对于无法返回上次访问时间的存储系统,这将引起NotImplementedError。
    如果USE_TZ为真,则返回一个感知的datetime,否则返回一个本地时区的普通datetime

    get_available_name(name, max_length=None)

        返回一个基于name参数的文件名,该参数是免费的,可用于在目标存储系统上写入新内容。
    如果提供的话,文件名的长度将不会超过max_length。如果找不到免费的唯一文件名,就会引发可疑文件操作异常。
    如果文件名已经存在,则在扩展名前附加一个下划线和一个随机的7个字母数字字符串

    get_created_time(name)

        返回文件创建时间的日期时间。对于无法返回创建时间的存储系统,这将引起NotImplementedError。

    get_modified_time(name)

        返回文件最后修改时间的日期时间。对于无法返回最后一次修改时间的存储系统,这将引起NotImplementedError。

    get_valid_name(name)

        返回一个基于名称参数的文件名,该参数适用于目标存储系统。

    generate_filename(filename)

        通过调用get_valid_name()来验证文件名,并返回要传递给save()方法的文件名。
    filename参数可能包括FileField.upload_to返回的路径。在这种情况下,路径不会被传递给get_valid_name(),而是会被转回结果名。
    默认实现使用os。路径的操作。如果该方法不适用于您的存储,请重写此方法

    listdir(path)

        列出指定路径的内容,返回一个列表的二元组;第一项是目录,第二项是文件。对于无法提供此类清单的存储系统,这将引发NotImplementedError。

    open(name, mode='rb')

        打开名称指定的文件。注意,虽然返回的文件被保证为file对象,但它实际上可能是某个子类。在远程文件存储的情况下,这意味着读/写可能相当慢,所以要注意

    path(name)

        可以使用Python的标准open()打开文件的本地文件系统路径。对于无法从本地文件系统访问的存储系统,这将引起NotImplementedError。

    save(name, content, max_length=None)

        使用存储系统保存新文件,最好指定名称。如果已经存在具有此名称名称的文件,存储系统可以根据需要修改文件名以获得唯一名称。存储文件的实际名称将被返回。
    max_length参数传递给get_available_name()。
    内容参数必须是django.core.files的实例。文件或可以包装在文件中的类文件对象。

    size(name)

    返回按名称引用的文件的总大小(以字节为单位)。对于无法返回文件大小的存储系统,这将引起NotImplementedError。

    url(name)
    返回URL,在这里可以访问按名称引用的文件的内容。对于不支持通过URL访问的存储系统,这将引起NotImplementedError。

  • 相关阅读:
    Title
    Title
    Title
    Title
    Python生成随机验证码
    Time模块和datetime模块
    For循环的实质
    Python函数
    集合set
    字符串内置方法的使用
  • 原文地址:https://www.cnblogs.com/LTEF/p/9608893.html
Copyright © 2020-2023  润新知