Django应用程序的规则引擎。
django-logical-rules的Python项目详细描述
一种在应用程序中管理逻辑规则的工具。逻辑规则比权限或规则表更强大,因为它们是用python编写的。注册一次规则,并在整个应用程序中从模板到通用视图混合。不要用规则样式和权限样式的方法将模型弄乱,而是在rules.py中定义这些规则,然后在视图和模板中轻松访问它们。
安装
使用pip从pypi安装:
pip install django-logical-rules
将logical_rules添加到settings.py文件:
INSTALLED_APPS = ( ... 'logical_rules', ... )
附加要求
如果要使用消息传递功能,请安装Django messages framework。
配置
规则在应用程序中的rules.py文件中定义。下面是一个规则示例:
import logical_rules def user_can_edit_mymodel(object, user): """ Confirms a user can edit a specific model ...owners only! """ return object.owner == user logical_rules.site.register("user_can_edit_mymodel", user_can_edit_mymodel)
要将您的模型包含在注册表中,您需要运行autodiscover,有点像django.contrib.admin(我通常将其放入urls.py):
import logical_rules logical_rules.autodiscover()
用法
模板标签
一旦创建了规则,就可以在模板中的任何位置轻松使用:
{% load logical_rules_tags %} {% testrule user_can_edit_mymodel object request.user %} <p>You are the owner!</p> {% endtestrule %}
注意:不要在模板中的规则名称周围使用引号。
如果你正在扩展Django的基于类的泛型视图,你可能会发现这个混合函数很有用。它允许您定义在呈现视图之前应应用的规则。下面是一个用法示例:
class MyView(RulesMixin, DetailView): def update_logical_rules(self): super(MyView, self).update_logical_rules() self.add_logical_rule({ 'name': 'user_can_edit_mymodel', 'param_callbacks': [ ('object', 'get_object'), ('user', 'get_request_user') ] })
param_callbacks是我们获取规则参数的技术。假设这些是类上的方法。{TT4} $在RuleMyXin中定义,因为它非常常见。get_object()是detailview类上的一个方法。
规则字典可以有其他属性,如redirect_url和response_callback。如果定义了redirect_url,则视图将向该url返回一个HttpResponseRedirect。如果定义了response_callback,则视图将返回该方法的结果。
可以使用message和message_level选项进行消息传递集成。
最后,我们添加了两个常用的规则。作为login_required的可选替代,我们有user_is_authenticated,要测试泛型表达式,我们有evaluate_expression。
直接呼叫
import logical_rules if logical_rules.site.test_rule(rule['name'], arg1, arg2): print "passed" else: print "failed"
贡献
你觉得这还需要别的吗?若要对django-logical-rules作出贡献,请在Bitbucket上创建一个fork。克隆您的fork,进行一些更改,然后提交一个pull请求。
虫子也是伟大的贡献!可以在Bitbucket:
上添加问题