让Django超级用户在游戏化组件中定义新徽章
我们正在Django实施一个项目的游戏化部分。我们希望超级用户能够在Django管理界面中定义新的徽章并重新定义现有的徽章 我们看到的问题是,有时为徽章定义复杂的条件需要在代码中完成。超级用户将具备技术知识,但不是程序员 您如何让超级用户在Django管理界面中执行此操作,而不是更改应用程序 以下是一些徽章示例:让Django超级用户在游戏化组件中定义新徽章,django,django-admin,badge,Django,Django Admin,Badge,我们正在Django实施一个项目的游戏化部分。我们希望超级用户能够在Django管理界面中定义新的徽章并重新定义现有的徽章 我们看到的问题是,有时为徽章定义复杂的条件需要在代码中完成。超级用户将具备技术知识,但不是程序员 您如何让超级用户在Django管理界面中执行此操作,而不是更改应用程序 以下是一些徽章示例: 创建了10个标签,10个不同的用户在10个问题上使用了这些标签 成员们 回答了10个未回答的问题 对一个问题写20条评论(每条评论至少得5分) 你不能说你是否希望超级用户成为程序员
- 创建了10个标签,10个不同的用户在10个问题上使用了这些标签 成员们
- 回答了10个未回答的问题
- 对一个问题写20条评论(每条评论至少得5分)
- 你不能说你是否希望超级用户成为程序员
如果可以假设这一点,那么可以在数据库字段中包含Python代码,并使用
eval
或exec
运行它
例如:
badge.function = """
def award_badge(user):
return False
"""
vars = {}
exec(badge.function, vars)
if vars["award_badge"](user):
...
显然,这有很大的滥用或错误的空间,如果您希望非技术用户创建徽章,那么这肯定不合适
根据需要创建的规则的复杂性,您可能能够创建用于执行这些规则的规则引擎。在本例中,您创建了一种小型语言,其中决定是否授予徽章的过程中的每个步骤都由数据库中的一行指定。规则引擎是一个复杂的主题,所以我在这里不详细介绍
您最好在代码中对徽章规则进行硬编码,而不是使用这些建议中的任何一个。您要求非程序员进行编程工作?有什么原因不能让程序员添加徽章吗?开发结束后,我们的网站应该交给一个“超级用户”,负责将来的维护。根据设计,他/她可能需要修改网站的各个方面,包括获取徽章的要求、创建新徽章等,以保持网站的平衡。