跳转到主要内容

未提供项目描述

项目描述

有时您可能需要限制网站可以拥有的特定模型数量。例如,活跃用户数量、每个用户的帖子数量或活跃页面的数量。

此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,但您可以根据需要覆盖此类的大部分内容。

最简单的限制器只是这个类的继承,其中类属性定义了限制规则。一组规则是一个字典,其键是一个模型类,而关联的值是一个下面描述的字典或字典列表,如下所示

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(必需 - 允许的给定模型总数,如果有查询集,则为该查询集允许的总数

  • 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 limits为每个模型安装一个 pre_save 信号,并检查规则,如果防止保存完成,则抛出 LimitExceeded 异常,该异常被中间件捕获,从而渲染一个带有HTTP 403错误的页面。

向Tina Turner道歉。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

django-limits-0.0.6.tar.gz (19.6 kB 查看哈希值)

上传时间

构建分布

django_limits-0.0.6-py3-none-any.whl (21.5 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面