24

Djangoに画像ファイルを保存する典型的なシナリオは何ですか?具体的には、画像はローカルファイルシステムまたはAmazon S3のデータベースBLOB(MongoDB GridFSなど)に直接保存されますか?3つのケースすべてについて、画像を保存して生活を簡素化するために利用できるツールまたはdjangoパッケージはありますか?

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

4

4 に答える 4

24

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

これは、アプリサーバーのハードディスク容量よりも多くの画像を保存する必要がある場合、複数のアプリサーバーが必要な場合、またはCDNを使用してレイテンシを短縮したい場合などに問題になる可能性があります。 。

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

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

于 2012-05-02T05:45:05.777 に答える
9

デフォルトでは、Djangoはすべてのファイル(および画像)をMEDIA_ROOTに保存します。ただし、他の場所に保存するために、カスタムファイルストレージを作成することはできます。

何を選ぶ?それは本当に依存します。
いくつのファイルを保存する予定ですか?彼らはどのくらいのストレージを使用しますか?どのくらいの帯域幅ですか?非常に高い使用率のピークがあると思いますか?

通常、ローカルファイルシステムが最速のオプションです。ただし、これらのイメージが帯域幅を使いすぎることがわかった場合、特に使用パターンに高いピークが見られる場合は、それらをオフロードすることをお勧めします。逆に、複数のサーバーにスケールアウトする必要がある場合は、それらをデータベースに移動すると便利な場合があります。

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

于 2012-05-02T06:23:56.013 に答える
5

それ自体は悪い習慣ではありません。それを言った人は少し混乱していると思います。Djangoは、静的リソースをDjangoで提供してはならない、つまり、Djangoのリバースプロキシとして使用しているWebサーバー(Apache、nginxなど)から直接提供する必要があると述べていますが、静的リソースをオンにする必要があるかどうかについては競合しません。別のサーバーまたは同じサーバー。

単純なアプリやWebサイトを使用している場合、静的ファイルにまったく異なるサーバーを使用するのはおそらくやり過ぎです。これは、同時実行性が高い場合(Twitter、Facebookなど)でのみ問題になります。この場合、アプリケーションは、アプリ自体へのリクエストの転送以外のことをWebサーバーに心配させる余裕がありません。現在、一部のWebホストは、VPSに対応する「クラウド」ストレージを提供しています(たとえば、Rackspace)。このようなホストを使用している場合は、必ず自分の持っているものを利用してください。ただし、ほとんどの場合、その必要はありません。

ただし、別のサブドメインで静的リソースを提供することに利点があります。同じサーバーを使用できますが、サブドメイン(static.mysite.comなど)を使用すると、ブラウザーがより多くの並列ダウンロードを実行できるようになり、少なくとも、メインWebサイトからのCookieが各静的サーバーに接続されるのを防ぐことができます。リクエスト。

于 2012-05-02T14:43:09.747 に答える
1

それは本当にあなたが解決しようとしている解決策に依存します。s3がローカルファイルストレージよりもはるかに優れたソリューションになる場合があります。s3は、さまざまなWebアプリからデータにアクセスでき、使用しているサーバーから切り離されているという点で、より柔軟性があります。たくさんの画像を使うつもりなら、s3が行く道だと思います。使用する画像の量が限られていると思われる場合は、サーバー上のローカルストレージが適切な実装になると思います(私は思います)。

使用できるツールについては、PILを検討します。http://www.pythonware.com/products/pil/

于 2012-05-02T07:54:54.080 に答える