Django Rule Engine

PyPI version Python Versions Django Versions License: MIT

Um pacote Django completo que integra a biblioteca rule-engine ao Django com editor visual interativo, validação em tempo real, API REST e suporte nativo ao Django Admin.

Perfeito para construir regras de negócios flexíveis, controle de acesso, políticas de desconto, regras de elegibilidade e qualquer lógica dinâmica configurável pelo usuário.

📋 Sobre o Projeto

O django-rule-engine fornece um campo Django customizado (RuleField) e um widget especializado para a criação e avaliação de expressões lógicas baseadas em rule-engine.

✨ Recursos Principais

🎨 Editor Visual de Regras

  • Destaque de sintaxe: Leitura e edição intuitivas.

  • Validação em tempo real: Feedback instantâneo sobre erros de sintaxe ou avaliação.

  • Formatador de JSON: Para validar regras diretamente contra payloads de exemplo.

  • Atalhos de teclado: Pressione Ctrl+Enter para validar a regra rapidamente.

  • Suporte a Dark Mode: Compatível com o tema nativo do Django Admin.

🔌 Integração Simples

from django.db import models
from django_rule_engine.fields import RuleField

class RegraAcesso(models.Model):
    nome = models.CharField(max_length=100)
    regra = RuleField(
        verbose_name="Regra de Permissão",
        example_data={
            "idade": 25,
            "status": "ativo",
            "funcao": "admin"
        }
    )

⚡ API REST Embutida

Endpoint para validação via frontend ou integrações externas:

POST /api/validate-rule/

Payload de requisição:

{
  "rule": "idade >= 18 and status == 'ativo'",
  "example_data": {"idade": 20, "status": "ativo"}
}

🎯 Método matches() de Conveniência

Valide dados diretamente a partir do objeto ou do campo:

# Validação simples
dados = {"idade": 25, "status": "ativo"}
if objeto.regra_field.matches(dados):
    # Regra válida
    pass

🚀 Instalação Rápida

Via PyPI:

pip install django-rule-engine

No settings.py:

INSTALLED_APPS = [
    # ...
    'django_rule_engine',
]

No urls.py:

from django.urls import path, include

urlpatterns = [
    # ...
    path('', include('django_rule_engine.urls')),
]

💡 Casos de Uso

  • ✅ Controle de Acesso: Defina dinamicamente permissões de acesso a recursos.

  • ✅ Políticas de Desconto: Implemente regras de preços e campanhas promocionais.

  • ✅ Elegibilidade: Determine se um cliente/aluno atende aos critérios do programa.

  • ✅ Validação Dinâmica: Crie regras de validação sem alterar o código-fonte.

👥 Contribuindo

Contribuições são bem-vindas! Consulte o Guia de Contribuição para detalhes de setup local e execução de testes.

📝 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.

📧 Contato

Kelson da Costa Medeiros