2011-02-03 3 views
2

Djangoアプリケーションのユーザーが「インストールされたアプリケーション」に何も追加することなく、プラグインや拡張機能をアプリケーションに追加できるように、適切なアプローチやプログラミングのパターンを適用したい'または任意の設定を編集します。私のDjangoアプリケーションに「サードパーティ」のプラグインを許可します。設定変更は不要ですか?

おそらくWordPressプラグインが最適な例です。新しいオプション/設定/メニューが利用可能になりますが、WordPressの設定ファイルやコアファイルを編集する必要はありません。管理者に表示されます。

Django/Pythonでは、プラグインアーキテクチャのタイプを開発するためにどのようなアプローチやプログラミング "パターン"を使用しますか?

私はWordPressが(例では、与えられた)私の質問は関与パターン、および初期段階についてですなど、「プラットフォーム」そのものであり、そしてプラグインAPIを提供していることを知っている -前に、プラグインのためのアプリケーションの準備その機能を後で追加しようとするのではなく、構築されています。

具体的に言えば、私のアプリは「コンテンツ」を受け入れています。そのコンテンツの出力をさらに出力するモジュール式の「トランスフォーマー」をユーザーに提供する方法を提供したいと思います。いくつかの基本設定を受け入れる必要はないかもしれません。

答えて

2

私の提案は、Djangoシグナルシステムを使用することです。あなたのアプリは、特定のアクションが発生したときにシグナルを送信し、次のステージが発生したときにそれらのシグナルを聞く必要があります。誰かがあなたのアプリの振る舞いを変えたいのであれば、アプリが送信した関連するシグナルを聞いて、適切にデータを変更するだけです。

これにより、アプリケーションのソースコードに触れることなく、アプリケーションを非常に簡単に拡張したり変更したりすることができます。

誰かがあなたのアプリを使っているのであれば、プロジェクトフォルダにインストールされることはまずありませんので、あなたのアプリケーションフォルダをコードに配置する必要はありません。これは、virtualenv内にモジュールとしてインストールされる可能性が高いです。上で概説したシグナルメソッドを使用すると、あなたのアプリを使っている人は、自分のプロジェクトのハンドラーをアプリケーションに追加するだけでハンドラーを置くことができます。したがって、アプリケーションのソースコードディレクトリに触れる必要はありません。

+0

は、いずれか1つの特定の場所にある場所であるために、モジュラーコードのための要件を削除し、しかし:「アプリケーションをインストールするためにそれを追加し、ユーザーせずにこのモジュラーコードを有効にするエレガントな方法があります"?私の代わりに、ユーザーがこれらのモジュールをアップロード/有効化/無効化/削除できる「プラグイン管理」機能があります。また、アプリの初期読み込みでは単純にインポートされます(.pyファイルですか?私はただのpythonの教祖ではないので、その分野で「受け入れられる」もの、それともそのようなものでのベストプラクティスですらわからない。 –

+0

@anonymous coward私はあなたのインストールのアプリリストに新しいアプリを追加しないというあなたの要求は本当に少し不必要だと思います。つまり、既存のコードベースにコードを追加しなければならないということです。新しいバージョンをリリースした場合、アップグレードするのがずっと難しくなります。可能であれば、元のコードと追加や変更を別々に保つ方が常に良いです。次のコメントを参照してください。 – Cromulent

+0

@anonymous coward従来の方法では、特定のアクションが発生したときにコードによって呼び出されるユーザーコードでコールバック関数を使用するメソッドのグループを持つことがあると判断された場合。したがって、ユーザは、渡されたデータに基づいて特定のコールバック機能の実装を提供します。これは非常に良い文書を必要としますが、これまでの変更をすべて破らずに簡単にAPIを変更できないため、維持するのが苦労します。ユーザーコールバック関数が提供されていない場合は、単に独自の実装にフォールバックするだけです。 – Cromulent

0

pypiには「プラグインポイント」を定義することができるdjango-pluginsがあり、アプリにプラグインを簡単に追加できるようにします。

参照:信号を用いて http://pypi.python.org/pypi/django-plugins

関連する問題