我们正在实现Django项目的游戏化组件。我们希望超级用户能够在Django管理界面中定义新徽章并重新定义现有徽章。
我们认为问题在于,需要在代码中定义徽章的有时复杂条件。超级用户在技术上知识渊博,但不会是程序员。
如何让超级用户在Django管理界面中执行此操作,而不是更改应用程序?
以下是徽章的一些示例:
答案 0 :(得分:2)
你没有说你是否希望超级用户成为程序员。
如果您可以假设这样,那么您可以在数据库字段中包含Python代码,并使用eval
或exec
来运行它。
例如:
badge.function = """
def award_badge(user):
return False
"""
vars = {}
exec(badge.function, vars)
if vars["award_badge"](user):
...
显然,这有很多滥用或错误的范围,如果您希望非技术用户创建徽章,则肯定不合适。
根据您需要创建的规则的复杂性,您可以创建用于执行它们的规则引擎。在这种情况下,您可以创建一种迷你语言,其中决定是否授予徽章的过程中的每个步骤都由数据库中的行指定。规则引擎是一个复杂的主题,所以我不在这里详细介绍。
对于代码中的徽章规则进行硬编码可能比使用其中任何一种建议更好。