revision-up-to: | 8961 (1.0) |
---|
ファイルを遠隔のシステム上に保存したい場合のように、カスタムのファイルスト レージを作成したいときのために、カスタムストレージクラスを定義できます。 カスタムストレージは、以下のステップに従って作成します:
ストレージシステムは django.core.files.storage.Storage のサブクラス でなければなりません:
from django.core.files.storage import Storage
class MyStorage(Storage):
...
Django はストレージシステムを引数なしでインスタンス化できねばなりません。 すなわち、ストレージシステムに関する設定は、全て django.conf.settings から取り出さねばなりません:
from django.conf import settings
from django.core.files.storage import Storage
class MyStorage(Storage):
def __init__(self, option=None):
if not option:
option = settings.CUSTOM_STORAGE_OPTIONS
...
ストレージクラスは、 _open() および _save() メソッドを実装せねば なりません。また、実現したいストレージクラスによってはその他にも適切なメ ソッドを実装せねばなりません。これらのメソッドについては下記を参照してく ださい。
さらに、ローカルのファイルを扱うストレージを提供する場合は、 path() メソッドを提供せねばなりません。
カスタムのストレージシステムでは、以下のストレージメソッドをオーバライドで きます。メソッドの詳細は ファイルストレージ API で解説していますが、少な くとも以下のメソッドは 実装せねばなりません :
また、カスタムのストレージオブジェクトを実装するために用意されている、以下 のフックを使うことになるでしょう:
必須のメソッドです.
Storage.open() によって呼び出されます。このメソッドこそが、ストレージク ラスがファイルをオープンするときの実際のメカニズムです。このメソッドは File クラスのオブジェクトを返さねばなりません。とはいえ、たいていのケー スでは、バックエンドストレージに固有のロジックを備えた File のサブクラ スを返すことでしょう。
Storage.save() から呼び出されます。 name は get_valid_name() や get_available_name() で処理済の名前で、 content は File オブ ジェクトです。このメソッドの戻り値はありません。
背後にあるストレージシステムで扱うのに適したファイル名を生成して返します。 通常、このメソッドの name 引数は、サーバに送信されたもとのファイルパス ら、パス部分を取り除いたファイルの名前です。標準の方法とは違うやりかたで安 全なファイル名への変換を行いたいなら、このメソッドをオーバライドしてくださ い。
Storage の実装では、ファイル名から英数文字、ピリオド、アンダースコアを 除く全ての文字を取り去ります。
name に指定された名前をもとに、ストレージ機構で扱えるファイル名を構築し て返します。通常、 name 引数は、上で述べた get_valid_name() メソッ ドによって、ストレージシステムで扱うのに適した名前に変換済みです。
Storage の実装では、対象ディレクトリ下でファイル名が重複しそうな場合、 一意になるまでアンダースコアを付加したファイル名を作成して返します。
Aug 31, 2012