3

Django でプロジェクトのゲーミフィケーション コンポーネントを実装しています。スーパーユーザーが新しいバッジを定義し、Django 管理インターフェース内で既存のバッジを再定義できるようにしたいと考えています。

問題は、バッジの複雑な条件をコードで定義する必要があることです。スーパーユーザーは技術的な知識はありますが、プログラマーではありません。

アプリケーションを変更するのではなく、スーパーユーザーに Django 管理インターフェイスでこれを実行させるにはどうすればよいでしょうか?

バッジの例を次に示します。

  • 10 の異なるメンバーによって 10 の質問で使用された 10 のタグを作成しました。
  • 10の未回答の質問に回答しました。
  • 質問に対して 20 のコメントを書きました (コメントはそれぞれ 5 ポイント以上を獲得しました)。
4

1 に答える 1

2

スーパーユーザーがプログラマーであることを期待するかどうかは言いません。

これを想定できる場合は、データベース フィールドに Python コードを含めて、evalまたはを使用してそれexecを実行できます。

例えば:

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

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

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

明らかに、これには悪用や間違いの可能性がたくさんあります。また、技術に詳しくないユーザーがバッジを作成することを期待している場合は、適切ではありません。

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

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

于 2011-12-21T17:08:07.093 に答える