让Django超级用户在游戏化组件中定义新徽章

时间:2011-12-21 11:55:54

标签: django django-admin badge

我们正在实现Django项目的游戏化组件。我们希望超级用户能够在Django管理界面中定义新徽章并重新定义现有徽章。

我们认为问题在于,需要在代码中定义徽章的有时复杂条件。超级用户在技术上知识渊博,但不会是程序员。

如何让超级用户在Django管理界面中执行此操作,而不是更改应用程序?

以下是徽章的一些示例:

  • 创建了10个标签,这些标签已用于10个不同的10个问题 成员。
  • 回答了10个未回答的问题。
  • 在一个问题上写了20条评论(评论至少得到5分)。

1 个答案:

答案 0 :(得分:2)

你没有说你是否希望超级用户成为程序员。

如果您可以假设这样,那么您可以在数据库字段中包含Python代码,并使用evalexec来运行它。

例如:

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

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

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

显然,这有很多滥用或错误的范围,如果您希望非技术用户创建徽章,则肯定不合适。

根据您需要创建的规则的复杂性,您可以创建用于执行它们的规则引擎。在这种情况下,您可以创建一种迷你语言,其中决定是否授予徽章的过程中的每个步骤都由数据库中的行指定。规则引擎是一个复杂的主题,所以我不在这里详细介绍。

对于代码中的徽章规则进行硬编码可能比使用其中任何一种建议更好。