没有项目描述
django-limits的Python项目详细描述
有时你需要能够限制一个站点可以拥有多少个特定的模型。 例如,活动用户数、每个用户的帖子数或活动页面数。
此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,但是您可以重写这个类的大部分 根据需要。
最简单的限制,就是这个类的继承,用一个类属性定义 限制规则。一组规则是一个字典,键是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错误的页面。
向蒂娜·特纳道歉。