Разрешение суперпользователю Django определять новые значки в компоненте геймификации - PullRequest
3 голосов
/ 21 декабря 2011

Мы реализуем компонент геймификации проекта в Джанго.Мы бы хотели, чтобы суперпользователь мог определять новые значки и переопределять существующие внутри интерфейса администратора Django.

Проблема, как мы видим, заключается в том, что определение иногда сложных условий для значков должно выполняться в коде.Суперпользователь будет технически осведомлен, но не будет программистом.

Как бы вы позволили суперпользователю делать это в интерфейсе администратора Django, а не изменять приложение?

ВотВот несколько примеров значков:

  • Создано 10 тегов, которые использовались в 10 вопросах 10 различными участниками.
  • Ответили на 10 вопросов без ответа.
  • Написал 20 комментариев квопрос (комментарии набрали не менее 5 баллов).

1 Ответ

2 голосов
/ 21 декабря 2011

Вы не говорите, ожидаете ли вы, что суперпользователь будет программистом или нет.

Если вы можете предположить это, вы можете включить код Python в поле базы данных и использовать eval или execчтобы запустить его.

Например:

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

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

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

Очевидно, что это имеет много возможностей для злоупотреблений или ошибок, и, конечно, не подойдет, если вы ожидаете, что нетехнические пользователи будутсоздание значков.

В зависимости от сложности правил, которые вам нужно создать, вы можете создать механизм правил для их выполнения.В этом случае вы создаете своего рода мини-язык, где каждый шаг в процессе принятия решения о присвоении значка или нет определяется строкой в ​​базе данных.Механизмы правил - сложная тема, поэтому я не буду вдаваться в подробности.

Возможно, вам лучше жестко программировать правила для значков в своем коде, чем использовать любое из этих предложений.

...