Django应用程序的规则引擎。

django-logical-rules的Python项目详细描述


https://pypip.in/v/django-logical-rules/badge.pnghttps://pypip.in/d/django-logical-rules/badge.pnghttps://drone.io/bitbucket.org/aashe/django-logical-rules/status.png

一种在应用程序中管理逻辑规则的工具。逻辑规则比权限或规则表更强大,因为它们是用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 %}

注意:不要在模板中的规则名称周围使用引号。

< H3>规则混合< EH3>

如果你正在扩展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_urlresponse_callback。如果定义了redirect_url,则视图将向该url返回一个HttpResponseRedirect。如果定义了response_callback,则视图将返回该方法的结果。

可以使用messagemessage_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

上添加问题

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何计算大于平均值的数字的百分比。?   JavaFX中后台执行任务的服务   xml解析用于解析java中推荐的xml解析器的小文档   java Nativescript+无法实例化接收器。。。。没找到上课的机会   maven是在数百个Java测试类上应用自定义JUnit测试运行程序的更简单方法   泛型如何引用接口在Java中实现的类类型?   java序列化程序SimpleXML只发送第一行   java字符串组合/排列   java无法创建EMRclient Sdkclientexception   JavaMaven不生成“persistence.xml”文件   java找不到主要方法   java中的正则表达式正负双精度   接口对于我试图解决的问题,有Java设计模式吗?   java在创建bean时获取异常   java如何创建<?使用JCodeModel扩展子类型>?   java在javafx中制作搜索栏   java Compare Hashmap with List=new Arraylist()   java接口与具体类