13

「Pythonパスのどこにでも保存できる」ことは承知していますが、プロジェクトのミドルウェアクラスを保存するために使用できる整理されたパターンは何ですか?

mod_wsgi を使用して、プロジェクトのルート ディレクトリとプロジェクト ディレクトリを sys パスに追加しています。

sys.path.append( '/srv/' )
sys.path.append( '/srv/workarounds/' )

後者の行はプロジェクトのルートです。例として、次のミドルウェア クラスを適用するとします: http://djangosnippets.org/snippets/1179/

スニペットの内容を middleware.py ファイルにコピーして、プロジェクト ルートにダンプしますか? ミドルウェア用のディレクトリを作成し、そのディレクトリを Python パスに追加しますか?

4

2 に答える 2

7

django サイトの私の通常のレイアウトは次のとおりです。

projects/
templates/
common/
local/

どこ:

  • プロジェクトには、メイン プロジェクトとその他のプロジェクトが含まれます
  • common には、サイト間で共有できるもの、または python/site-packages に直接置くのではなく、django-profile と django-registration をダウンロードする必要がある場合など、少なくともプロジェクト固有のものではないものが含まれます
  • テンプレートにはそれだけが含まれています
  • local には現在のマシンに固有のものが含まれているため、データベースの場所やパスワードなどのデータを適切に分離できます。次に、マシン固有のバージョン (「machine1-localconfig.py」など) をソフトリンクします。 local/localconfig.py で、settings.py で「localconfig をインポート」できます

私は通常、プロジェクト固有のミドルウェアをプロジェクト内に配置し、プロジェクト固有でないミドルウェアを common/middleware/ に配置します。

設定の適切な場所にテンプレート ディレクトリを追加してください (または、おそらく localconfig.py を設定にインポートします)。そして、プロジェクト、共通、およびローカル ディレクトリを PYTHONPATH に追加してください。

于 2010-07-11T22:45:16.483 に答える
5

密結合されたミドルウェア クラスが 2 つしかない場合は、それらをmiddleware.pyアプリ ルートの下のモジュールに配置します。(これがdjango.contribアプリのやり方です。セッションのアプリ ミドルウェアはこちらを参照してください)。

さまざまなミドルウェア クラスが多数ある場合は、関連するミドルウェア クラスのサブモジュールを含むミドルウェア パッケージを作成します。ただし、このような状況に陥った場合は、プロジェクトをいくつかのミニアプリにリファクタリングして、すべてが特定のニーズを解決する方法を検討してください (そしてそれらをオープンソースにします:))。

LoginRequiredMiddleware個人的には、共通のミドルウェア (リンクされたクラスなど) をパッケージにダンプする共通の django パッケージがありmiddlewareます。これがプロジェクトのコンテキストで理にかなっている場合は、強くお勧めします。これにより、数え切れないほどの複製とバグ修正の時間を節約できました。 django-commondjango-annoyingは、この種のプロジェクト レイアウトの良い例です。

于 2010-07-11T23:36:51.837 に答える