3

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

我们看到的问题是,有时需要在代码中定义徽章的复杂条件。超级用户将具有技术知识,但不会是程序员。

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

以下是一些徽章示例:

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

1 回答 1

2

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

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

例如:

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

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

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

显然,这有很大的滥用或错误空间,如果您希望非技术用户创建徽章,那么肯定不适合。

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

与使用这些建议中的任何一个相比,您最好在代码中对徽章规则进行硬编码。

于 2011-12-21T17:08:07.093 回答