我们正在Django实现一个项目的游戏化组件。我们希望超级用户能够在Django管理界面中定义新的徽章并重新定义现有的徽章。
我们所看到的问题是,需要用代码来定义有时复杂的徽章条件。超级用户将是技术知识,但不会是一个程序员。
您将如何让超级用户在Django管理界面中这样做,而不是改变应用程序?
下面是一些徽章的例子:
members.
发布于 2011-12-21 17:08:07
你不会说你是否希望超级用户成为一个程序员。
如果您可以假设这一点,那么可以在数据库字段中包含Python代码,并使用eval
或exec
来运行它。
例如:
badge.function = """
def award_badge(user):
return False
"""
vars = {}
exec(badge.function, vars)
if vars["award_badge"](user):
...
显然,这有很大的滥用或错误的空间,如果你期望非技术用户创建徽章,那肯定是不合适的。
根据需要创建的规则的复杂性,您可能能够创建用于执行这些规则的规则引擎。在这种情况下,您可以创建一种微型语言,其中决定是否授予徽章的过程中的每一步都由数据库中的一行指定。规则引擎是一个复杂的话题,所以我不会在这里详细讨论。
您最好在代码中硬编码徽章规则,而不是使用这些建议中的任何一个。
https://stackoverflow.com/questions/8589408
复制相似问题