ファイルストレージAPI
現在のストレージクラスを取得する
Djangoは、現在のストレージクラスにアクセスするための2つの便利な方法を提供します。
- class DefaultStorage
- DefaultStorage は、:setting: `DEFAULT_FILE_STORAGE` で定義されている現在のデフォルトストレージシステムへの遅延アクセスを提供します。 DefaultStorage は、内部で get_storage_class()を使用します。
- get_storage_class(import_path=None)
ストレージAPIを実装するクラスまたはモジュールを返します。
import_path
パラメータなしで呼び出されると、get_storage_class
は、:setting: `DEFAULT_FILE_STORAGE` で定義されている現在のデフォルトのストレージシステムを返します。import_path
が指定されている場合、get_storage_class
は指定されたパスからクラスまたはモジュールをインポートしようとし、成功した場合はそれを返します。 インポートが失敗した場合、例外が発生します。
FileSystemStorageクラス
- class FileSystemStorage(location=None, base_url=None, file_permissions_mode=None, directory_permissions_mode=None)
FileSystemStorage クラスは、ローカルファイルシステムに基本的なファイルストレージを実装します。 Storage から継承し、そのすべてのパブリックメソッドの実装を提供します。
- location
ファイルを保持するディレクトリへの絶対パス。 デフォルトは、:setting: `MEDIA_ROOT` 設定の値です。
- base_url
この場所に保存されているファイルを提供するURL。 デフォルトは、:setting: `MEDIA_URL` 設定の値です。
- file_permissions_mode
ファイルが保存されたときに受け取るファイルシステムのアクセス許可。 デフォルトは:setting: `FILE_UPLOAD_PERMISSIONS` です。
- directory_permissions_mode
ディレクトリが保存されたときに受け取るファイルシステムのアクセス許可。 デフォルトは:setting: `FILE_UPLOAD_DIRECTORY_PERMISSIONS` です。
ノート
FileSystemStorage.delete()
メソッドは、指定されたファイル名が存在しない場合でも例外を発生させません。- get_created_time(name)
システムのctimeの
datetime
を返します。os.path.getctime()
。 一部のシステム(Unixなど)では、これが最後のメタデータ変更の時間であり、他のシステム(Windowsなど)では、ファイルの作成時間です。
Storageクラス
- class Storage
Storage クラスは、ファイルを保存するための標準化されたAPIと、他のすべてのストレージシステムが必要に応じて継承またはオーバーライドできる一連のデフォルトの動作を提供します。
ノート
メソッドがナイーブな
datetime
オブジェクトを返す場合、使用される有効なタイムゾーンはos.environ['TZ']
の現在の値になります。 これは通常、Djangoの:setting: `TIME_ZONE` から設定されることに注意してください。- delete(name)
name
で参照されているファイルを削除します。 ターゲットストレージシステムで削除がサポートされていない場合、代わりにNotImplementedError
が発生します
- exists(name)
指定された名前で参照されているファイルがストレージシステムにすでに存在する場合は
True
を返し、名前が新しいファイルで使用できる場合はFalse
を返します。
- get_accessed_time(name)
ファイルの最終アクセス時刻の
datetime
を返します。 最後にアクセスした時刻を返すことができないストレージシステムの場合、これによりNotImplementedError
が発生します。:setting: `USE_TZ` が
True
の場合、対応するdatetime
を返します。それ以外の場合は、ローカルタイムゾーンでナイーブなdatetime
を返します。
- get_alternative_name(file_root, file_ext)
バージョン3.0の新機能。
file_root
およびfile_ext
パラメーターに基づいて代替ファイル名を返します。拡張子の前に、アンダースコアとランダムな7文字の英数字の文字列がファイル名に追加されます。
- get_available_name(name, max_length=None)
name
パラメーターに基づいてファイル名を返します。このファイル名は無料で、ターゲットストレージシステムに書き込む新しいコンテンツに使用できます。ファイル名の長さは、提供されている場合、
max_length
を超えることはありません。 空きの一意のファイル名が見つからない場合、 SuspiciousFileOperation 例外が発生します。name
のファイルがすでに存在する場合は、 get_alternative_name()が呼び出されて代替名が取得されます。
- get_created_time(name)
ファイルの作成時刻の
datetime
を返します。 作成時間を返すことができないストレージシステムの場合、これによりNotImplementedError
が発生します。:setting: `USE_TZ` が
True
の場合、対応するdatetime
を返します。それ以外の場合は、ローカルタイムゾーンでナイーブなdatetime
を返します。
- get_modified_time(name)
ファイルの最終変更時刻の
datetime
を返します。 最終変更時刻を返すことができないストレージシステムの場合、これによりNotImplementedError
が発生します。:setting: `USE_TZ` が
True
の場合、対応するdatetime
を返します。それ以外の場合は、ローカルタイムゾーンでナイーブなdatetime
を返します。
- get_valid_name(name)
name
パラメータに基づいて、ターゲットストレージシステムでの使用に適したファイル名を返します。
- generate_filename(filename)
get_valid_name()を呼び出して
filename
を検証し、 save()メソッドに渡されるファイル名を返します。filename
引数には、 FileField.upload_to によって返されるパスを含めることができます。 その場合、パスは get_valid_name()に渡されませんが、結果の名前の前に追加されます。デフォルトの実装では、
os.path
操作が使用されます。 ストレージに適さない場合は、このメソッドをオーバーライドしてください。
- listdir(path)
指定されたパスの内容をリストし、2タプルのリストを返します。 最初の項目はディレクトリで、2番目の項目はファイルです。 このようなリストを提供できないストレージシステムの場合、代わりに
NotImplementedError
が発生します。
- open(name, mode='rb')
name
で指定されたファイルを開きます。 返されるファイルはFile
オブジェクトであることが保証されていますが、実際にはサブクラスである可能性があることに注意してください。 リモートファイルストレージの場合、これは読み取り/書き込みが非常に遅くなる可能性があることを意味するため、注意してください。
- path(name)
Pythonの標準
open()
を使用してファイルを開くことができるローカルファイルシステムパス。 ローカルファイルシステムからアクセスできないストレージシステムの場合、代わりにNotImplementedError
が発生します。
- save(name, content, max_length=None)
ストレージシステムを使用して、できれば指定された名前で新しいファイルを保存します。 この名前
name
のファイルがすでに存在する場合、ストレージシステムは、一意の名前を取得するために必要に応じてファイル名を変更する場合があります。 保存されたファイルの実際の名前が返されます。max_length
引数は、 get_available_name()に渡されます。content
引数は、 django.core.files.File のインスタンス、またはFile
でラップできるファイルのようなオブジェクトである必要があります。
- size(name)
name
によって参照されるファイルの合計サイズをバイト単位で返します。 ファイルサイズを返すことができないストレージシステムの場合、代わりにNotImplementedError
が発生します。
- url(name)
name
が参照するファイルの内容にアクセスできるURLを返します。 URLによるアクセスをサポートしていないストレージシステムの場合、代わりにNotImplementedError
が発生します。