没有项目描述

django-limits的Python项目详细描述


有时你需要能够限制一个站点可以拥有多少个特定的模型。 例如,活动用户数、每个用户的帖子数或活动页面数。

此django模块允许您轻松设置预定义的硬编码限制 执行这些限制。

  1. 从pypi安装django-limits

    pip install django-limits
    
  2. django_limits添加到INSTALLED_APPS中:

    INSTALLED APPS = [
        'django_limits',
        # All your other apps
    ]
    
  3. 创建并设置限制器类(见下文)

    MODEL_LIMIT_CLASS = ‘limiter.MyLimiter’

  4. 添加限制器中间件以正确呈现模板:

    MIDDLEWARE_CLASSES = [
        'django_limits.middleware.LimitExceededMiddleware',
        # Your other middleware
    ]
    

定义限制器类

要正确限制您的模型,您需要一个限制器类。这不是自动加载的, 所以它可以在任何地方,应该放在limiter.py文件或您的models.py中。

所有的限制器都继承自django_limits.limiter.Limiter,但是您可以重写这个类的大部分 根据需要。

最简单的限制,就是这个类的继承,用一个类属性定义 限制规则。一组规则是一个字典,键是model类, 关联的值是下面描述的字典或字典列表,如下所示:

from django_limits.limiter import Limiter
from django.contrib.auth.models import User

class MyLimiter(Limiter):
    rules = {
        User: [
            {
                'limit': 20,
                'message': "Only 20 active users allowed",
                'filterset': Q(is_active=True)
            },
            {
                'limit': 10,
                'message': "Only 10 staff members allowed",
                'filterset': Q(is_staff=True)
            }
        ]
    }
<>上述限制器只允许最多20个活跃用户,10个工作人员。

定义规则字典

规则字典可以包含以下键:

  • limit(必需-允许的给定模型的总数,如果存在queryset,则为该queryset允许的总数
  • message-当用户试图超过此数字时显示的消息
  • filterset-定义要限制的模型类型的django q筛选器,如果未设置此筛选器,则使用数据库中模型的总数(例如Model.objects.all()
  • template-用于呈现解释限制的页面的模板,默认为django_limits/limit_exceeded.html

下面是小部件的示例规则:

Widget: [
    {
        'limit': 10,
        'message': "Only 10 staff members allowed",
        'filterset': Q(color="Blue")
    },
    {
        'limit': 10,
        'message': "Only 10 staff members allowed",
        'filterset': Q(color="Red")
    },
    {
        'limit': 30,
        'message': "Only 30 widgets allowed",
        'template': "widgets/totla_widgets_exceeded.html'
    }
]

在本例中,最多允许10个蓝色、10个红色和总共30个小部件。

工作原理

django limtis为每个模型安装一个pre_save信号,并根据规则进行检查,并且 若要防止保存完成,将引发LimitExceeded异常,该异常由 中间件,它依次呈现一个带有htp403错误的页面。

向蒂娜·特纳道歉。

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

推荐PyPI第三方库


热门话题
java PUT请求提供415不支持的媒体类型   JavaMockito:如何在不模拟所有参数的情况下轻松地存根一个方法   java如何将NameValuePair传递给安卓中的另一个活动?   servalet java中的tomcat错误   java Android手机无法连接到eclipse   nullpointerexception在Java中如何将null转换为false?   Java中的http代理身份验证   java如何确保最新版本的JAR与JNLP应用程序一起使用?   简单Java代码上的性能大内存占用   列出AWS EC2实例上运行的服务上的对象时,java 403访问被拒绝   java创建一个类,当创建一个新实例时,它会被添加到一个hasmap中   LookupService中的java getLocation方法返回null   java获取要在ListView中显示的ArrayList字符串编号/位置