2012-05-02 9 views
8

画像ファイルをDjangoに保存する典型的なシナリオは何ですか?具体的には、イメージはデータベースblob(MongoDB GridFSなど)、ローカルファイルシステムまたはAmazon S3に直接格納されていますか? 3つのケース全てに、画像を保存することで人生を簡単にするツールやdjangoパッケージがありますか?イメージファイルをDjangoに保存するには?

現在、ローカル開発サーバーのDjangoプロジェクトのフォルダに画像を保存していて、フォルダから配信しています。誰かが同じマシン上に静的ファイルを提供することは悪い習慣であると私に言った。だから、Djangoに静的な画像を保存して提供する典型的な現実のシナリオは何ですか?

答えて

8

典型的な、現実世界の例では、サイトのmedia/ディレクトリのサブディレクトリにアップロードした画像を保存することです:)

あなたはより多くの画像を保存する必要がある場合、これはあなたのアプリケーションサーバは、ハード・ディスクを持っているよりも、問題になることができます1つ以上のアプリケーションサーバーが必要な場合や、CDNを使用して待ち時間を短縮したい場合や、他の何千ものものの1つである場合などです。

しかし、特定の前提条件がない限り、心配する必要がある千のもののうちのどれを(もしあれば)知るための唯一の方法は、サイトを立ち上げることです。それはmedia/というサブディレクトリに画像を保存することです。

(たとえば、あなたがの.url()メソッドを使用を行う画像は、ローカルディスク上のファイルであることを、あなたはこのFileFieldを使用してください、とあなたが仮定しないようにあなたのコードに注意している、例えば場合FileFile.pathプロパティを使用していません)、時間が来たとき(およびその時)に、より適切なバックエンドに画像を移動することは簡単です。

4

デフォルトでは、Django saves all of your files (and images) in the MEDIA_ROOTです。ただし、他の場所に保存するためにcustom file storageと書くことができます。

お選びくださいそれは本当に依存しています。
保存するファイルの数はいくつですか?どれくらいのストレージを使用しますか?どのくらいの帯域幅ですか?非常に高い使用量のピークがあると思いますか?

通常、ローカルファイルシステムが最も高速です。それらの画像があなたの帯域幅を使いすぎるとわかったら、それらをオフロードすることができます。特に使用パターンが高いピークを見せている場合は特にそうです。逆に、複数のサーバーにスケールアウトする必要がある場合は、データベース内で移動することが有益な場合があります。

可能であれば、データを取得した後にのみ、実際のデータを決定する必要があります。別のストレージシステムに切り替えるのは非常に簡単なので、ローカルファイルシステムから始めて、問題を見てからだけ好きなものに切り替えます。

1

本当に解決しようとしているソリューションによって異なります。 s3がローカルファイルストレージよりもはるかに優れたソリューションになる場合があります。 s3は、さまざまなWebアプリケーションからのデータへのアクセスと、使用しているサーバーからの分離が可能であるという点で、より柔軟性があります。私はs3があなたがたくさんのイメージを使うことを計画しているなら行くべき道だと思う。限られた量のイメージを使用しようとしていると思うなら、サーバ上のローカルストレージは素晴らしい実装になるでしょう(私は思っています)。

あなたが使用できるツールの点では、私はPILを調べます。http://www.pythonware.com/products/pil/

3

それ自体がです。誰かがあなたに言ったことは、ちょっと混乱していると思います。 DjangoはDjangoで静的リソースを決して提供してはいけないと言います。つまり、あなたはDjango(Apache、nginxなど)のリバースプロキシとして使用しているWebサーバーから直接配信されるはずですが、別のサーバーまたは同じサーバー上に存在する必要があります。

単純なアプリやウェブサイトを使用している場合は、静的ファイルにまったく別のサーバーを使用するのはおそらく過剰です。アプリケーションがWebサーバーに何かを心配するのではなく、アプリケーション自体にリクエストを送信する余裕がない、並行性の高いインスタンス(Twitter、Facebookなど)でのみ重要です。現在、一部のWebホストは、VPS(Rackspaceなど)と一緒に使用できる「クラウド」ストレージを提供しています。あなたがそのようなホストを使用しているなら、是非あなたが持っているものを利用してください。しかし、大部分は必要ではありません。

しかし、は異なるサブドメインの下で静的リソースを提供中メリットがあります。同じサーバーを使用することもできますが、サブドメイン(例:static.mysite.com)を使用するとブラウザがより多くの並行ダウンロードを行うことができますが、少なくともメインのウェブサイトのCookieが静的要求。

関連する問題