为内容提供不同访问级别的代码
项目描述
为Armstrong内部模型提供限制访问的机制。
用法
确保在您的环境中安装了armstrong.core.arm_content并将其添加到您的INSTALLED_APPS中。您还需要确保模型已通过armstrong syncdb安装到您的数据库中。有关更多信息,请参阅“限制内容”和“用户成员资格”部分。
限制内容
内容对象可以通过继承自 armstrong.core.arm_access.mixins.AccessMixin 类来限制访问权限到特定级别。这将允许关联 armstrong.core.arm_access.models.Assignment,该关联指定了在特定时间段内授予对该对象的访问权限的级别。
对于基本的付费墙场景,其中一些故事始终为高级别,而其他故事始终为公开级别,创建两个 armstrong.core.arm_access.models.Level。一个将是您的付费级别,其中 is_protected 设置为 True,而另一个将是您的公开级别,其中 is_protected 设置为 False。发布文章时,将其中一个级别分配给内容。
对于一段时间后变为公开的内容,与前述方法创建两个级别。将新内容分配给付费级别,并设置立即的 start_date,同时也要将其分配给公开级别,并设置一个 start_date,以您希望内容免费可用的日期。
要仅允许付费订阅者访问存档,您需要将内容添加到公开级别,并设置立即的 start_date 和您希望停止提供免费访问的日期的 end_date。然后您需要将内容添加到付费级别,并设置立即的 start_date 和无 end_date(默认为 datetime.datetime.max)。
用户会员资格
用户通过 armstrong.core.arm_access.models.AccessMembership 被授予访问级别。每个会员资格都有一个 start_date 和 end_date,它定义了会员资格有效的时段。每个会员资格还有一个 active 布尔字段,可以将其设置为 False 以使会员资格失效。可以使用 user.access_memberships.current() 查询用户的活跃会员资格。
付费墙
阻止用户访问特定内容的实际过程由 armstrong.core.arm_access.paywalls 包中的付费墙处理。目前提供的唯一付费墙是 armstrong.core.arm_access.paywalls.subscription.SubscriptionPaywall,该付费墙检查当前会员资格。SubscriptionPaywall 仅在返回 TemplateResponse 的视图中工作。
要在演示应用程序中使用 SubscriptionPaywall,您将使用以下代码
... paywall = SubscriptionPaywall() protected_detail = paywall.protect(object_detail) ... url(r'^article/(?P<slug>[-\w]+)/', protected_detail, { 'queryset':Article.published.all().select_subclasses(), 'template_name':'article.html', 'slug_field':'slug', }, name='article_detail'),
任何用户访问受保护的文章,但没有相应的访问级别会员资格时,都会引发 AccessDenied。SubscriptionPaywall 还接受一个额外的参数 permission_denied,它确定在失败时采取什么行动。该参数必须是一个接受一个参数(一个 TemplateResponse)并返回表示在访问拒绝时采取的行动的 Response 对象的可调用对象。例如
# to redirect to a new url entirely from armstrong.core.arm_access.paywalls import redirect_on_deny redirecting_paywall = SubscriptionPaywall( permission_denied=redirect_on_deny='/membership/signup') # to render the request's context with a new template (to provide teaser # content) from armstrong.core.arm_access.paywalls import render_on_deny rendering_paywall = SubscriptionPaywall( permission_denied=render_on_deny='/membership/upsell.html')
如果您只想为没有高级访问级别的用户渲染广告,则可以使用默认不渲染广告的模板和 render_on_deny 来使用 SubscriptionPaywall。
如果您只想允许匿名用户查看一定数量的完整文章,然后显示付费墙,则需要构建自定义的付费墙实现,但 SubscriptionPaywall 应该提供不错的模板。如果您实现它,它将是这个包中一个非常好的候选。
安装和配置
您可以使用 pip 安装 armstrong.core.arm_access 的最新版本。
pip install armstrong.core.arm_access
请确保将 armstrong.core.arm_access 添加到您的 INSTALLED_APPS。您可以根据需要添加。这是一个复制粘贴的解决方案
INSTALLED_APPS += ["armstrong.core.arm_access", ]
安装完成后,您必须运行 syncdb 或 migrate(如果您使用 South)。
贡献
项目状态
Armstrong是一个开源新闻平台,任何组织都可以免费使用。它是德克萨斯州论坛和Bay Citizen的合作成果,以及约翰·S·和詹姆斯·L·凯斯勒基金会提供的资助。
要关注开发,请务必加入Google Group。
armstrong.core.arm_access是Armstrong项目的一部分。你很可能正在寻找这个。
许可证
版权所有2011年Bay Citizen和德克萨斯州论坛
在Apache许可证2.0版本(“许可证”)下授权;除非适用法律要求或书面同意,否则不得使用此文件,除非遵守许可证。您可以在以下位置获得许可证副本:
除非适用法律要求或书面同意,否则在许可证下分发的软件按“原样”分发,不提供任何明示或暗示的保证或条件。有关许可证的具体语言,请参阅许可证。
项目详情
armstrong.core.arm_access-1.0.9.tar.gz的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 00545e87d9eaeca8bce1563b61492bde0943f7a1f30eaee539cc9d5f0affcccf |
|
MD5 | 5e42d633116b485a1a3f660b2006fa70 |
|
BLAKE2b-256 | 2dbf2c46dbbd11b6766d36b4bf855aaa9d9ad0e161c42e28759a2e1bc4e0b3c4 |