未提供项目描述
项目描述
有时您可能需要限制网站可以拥有的特定模型数量。例如,活跃用户数量、每个用户的帖子数量或活跃页面的数量。
此Django模块允许您轻松设置预定义的、硬编码的限制以实施这些类型的限制。
从PyPI安装django-limits
pip install django-limits
将django_limits添加到您的INSTALLED_APPS
INSTALLED APPS = [ 'django_limits', # All your other apps ]
创建并设置您的限制器类(见下文)
MODEL_LIMIT_CLASS = ‘limiter.MyLimiter’
添加限制器中间件以正确渲染模板
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道歉。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。