123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- ===================
- The ``File`` object
- ===================
- The :mod:`django.core.files` module and its submodules contain built-in classes
- for basic file handling in Django.
- .. currentmodule:: django.core.files
- The ``File`` class
- ==================
- .. class:: File(file_object, name=None)
- The :class:`File` class is a thin wrapper around a Python
- :py:term:`file object` with some Django-specific additions.
- Internally, Django uses this class when it needs to represent a file.
- :class:`File` objects have the following attributes and methods:
- .. attribute:: name
- The name of the file including the relative path from
- :setting:`MEDIA_ROOT`.
- .. attribute:: size
- The size of the file in bytes.
- .. attribute:: file
- The underlying :py:term:`file object` that this class wraps.
- .. admonition:: Be careful with this attribute in subclasses.
- Some subclasses of :class:`File`, including
- :class:`~django.core.files.base.ContentFile` and
- :class:`~django.db.models.fields.files.FieldFile`, may replace this
- attribute with an object other than a Python :py:term:`file object`.
- In these cases, this attribute may itself be a :class:`File`
- subclass (and not necessarily the same subclass). Whenever
- possible, use the attributes and methods of the subclass itself
- rather than the those of the subclass's ``file`` attribute.
- .. attribute:: mode
- The read/write mode for the file.
- .. method:: open(mode=None, *args, **kwargs)
- Open or reopen the file (which also does ``File.seek(0)``).
- The ``mode`` argument allows the same values
- as Python's built-in :func:`python:open()`. ``*args`` and ``**kwargs``
- are passed after ``mode`` to Python's built-in :func:`python:open`.
- When reopening a file, ``mode`` will override whatever mode the file
- was originally opened with; ``None`` means to reopen with the original
- mode.
- It can be used as a context manager, e.g. ``with file.open() as f:``.
- .. method:: __iter__()
- Iterate over the file yielding one line at a time.
- .. method:: chunks(chunk_size=None)
- Iterate over the file yielding "chunks" of a given size. ``chunk_size``
- defaults to 64 KB.
- This is especially useful with very large files since it allows them to
- be streamed off disk and avoids storing the whole file in memory.
- .. method:: multiple_chunks(chunk_size=None)
- Returns ``True`` if the file is large enough to require multiple chunks
- to access all of its content give some ``chunk_size``.
- .. method:: close()
- Close the file.
- In addition to the listed methods, :class:`~django.core.files.File` exposes
- the following attributes and methods of its ``file`` object:
- ``encoding``, ``fileno``, ``flush``, ``isatty``, ``newlines``, ``read``,
- ``readinto``, ``readline``, ``readlines``, ``seek``, ``tell``,
- ``truncate``, ``write``, ``writelines``, ``readable()``, ``writable()``,
- and ``seekable()``.
- .. currentmodule:: django.core.files.base
- The ``ContentFile`` class
- =========================
- .. class:: ContentFile(content, name=None)
- The ``ContentFile`` class inherits from :class:`~django.core.files.File`,
- but unlike :class:`~django.core.files.File` it operates on string content
- (bytes also supported), rather than an actual file. For example::
- from django.core.files.base import ContentFile
- f1 = ContentFile("esta frase está en español")
- f2 = ContentFile(b"these are bytes")
- .. currentmodule:: django.core.files.images
- The ``ImageFile`` class
- =======================
- .. class:: ImageFile(file_object, name=None)
- Django provides a built-in class specifically for images.
- :class:`django.core.files.images.ImageFile` inherits all the attributes
- and methods of :class:`~django.core.files.File`, and additionally
- provides the following:
- .. attribute:: width
- Width of the image in pixels.
- .. attribute:: height
- Height of the image in pixels.
- .. currentmodule:: django.core.files
- Additional methods on files attached to objects
- ===============================================
- Any :class:`File` that is associated with an object (as with ``Car.photo``,
- below) will also have a couple of extra methods:
- .. method:: File.save(name, content, save=True)
- Saves a new file with the file name and contents provided. This will not
- replace the existing file, but will create a new file and update the object
- to point to it. If ``save`` is ``True``, the model's ``save()`` method will
- be called once the file is saved. That is, these two lines:
- .. code-block:: pycon
- >>> car.photo.save("myphoto.jpg", content, save=False)
- >>> car.save()
- are equivalent to:
- .. code-block:: pycon
- >>> car.photo.save("myphoto.jpg", content, save=True)
- Note that the ``content`` argument must be an instance of either
- :class:`File` or of a subclass of :class:`File`, such as
- :class:`~django.core.files.base.ContentFile`.
- .. method:: File.delete(save=True)
- Removes the file from the model instance and deletes the underlying file.
- If ``save`` is ``True``, the model's ``save()`` method will be called once
- the file is deleted.
|