2011-12-21 7 views
3

Djangoでプロジェクトのガンマ化コンポーネントを実装しています。スーパーユーザは、新しいバッジを定義して、Django管理インターフェース内の既存のバッジを再定義することができます。Djangoのスーパーユーザーがガンマコンポーネントの新しいバッジを定義できるようにする

私たちが見ているように、問題は複雑な条件をコードで定義する必要があることです。スーパーユーザーは技術的には知識がありますが、プログラマーではありません。

アプリケーションを変更するのではなく、スーパーユーザがDjango管理インターフェースでこれを行うようにする方法はありますか?ここで

は、バッジのいくつかの例は以下のとおりです。

  • は、10種類の メンバーによる10個の質問に使用されている10個のタグを作成しました。
  • 答えられていない10の未回答の質問。
  • 質問に20件のコメントを書きました(コメントはそれぞれ少なくとも5ポイントあります)。
+1

プログラミング以外のプログラマーにプログラミング作業を依頼していますか?プログラマーにバッジを追加させることができない理由はありますか? –

+0

開発が終了した後、当社のウェブサイトは、将来のメンテナンスを担当する「スーパーユーザー」に引き渡される予定です。デザインによれば、バッジを取得するための要件、新しいバッジを作成するなどのさまざまな側面を調整して、サイトのバランスを保つ必要があるでしょう。 –

答えて

2

スーパーユーザーがプログラマーであると思っているかどうかは言いません。

これを仮定すると、データベースフィールドにPythonコードを組み込み、evalまたはexecを使用して実行できます。例えば

badge.function = """ 
def award_badge(user): 
    return False 
""" 

vars = {} 
exec(badge.function, vars) 

if vars["award_badge"](user): 
    ... 

は明らかにこれは虐待やミスのためのスコープをたくさん持っている、とあなたは非技術的なユーザーはバッジを作成することが予想される場合、確かに適切ではありません。

作成する必要のあるルールの複雑さによっては、それらを実行するためのルールエンジンを作成できる場合があります。この場合、バッジを付与するかどうかを決定するプロセスの各ステップがデータベースの行によって指定される、ミニ言語の並べ替えを作成します。ルールエンジンは複雑なトピックなので、ここでは詳しく説明しません。

これらの提案のいずれかを使用するよりも、コード内のバッジのルールをハードコーディングする方がよいでしょう。

関連する問題