内容访问级别不同的代码
armstrong.core.arm_access的Python项目详细描述
用法
确保您的 环境,并已添加到您安装的应用程序中。你还需要 为了确保这些模型已经通过 armstrong安装在您的数据库中 同步数据库 。有关详细信息,请参阅"限制内容"和"用户成员资格"部分 信息。
限制内容
内容对象可以通过使其具有特定级别的访问权限 继承自 armstrong.core.arm_access.mixins.accessmixin 类。这个 将允许 armstrong.core.arm_access.models.assignment指定 在特定的时间范围内授予对该对象的访问权限。
对于基本的付费墙场景,其中一些故事总是溢价的,而其他故事 始终是公共的,创建两个armstrong.core.arm_access.models.level 将是您的"特优"级别,它将被设置为"真"。 另一个是您的公共级别,它将设置为 至 假 。发布文章时,将两个级别中的一个指定给 内容:
对于在一段时间内是付费的然后成为公开的内容,创建两个 和以前一样。使用 立即 开始日期,并将其分配给公众 当您希望内容变得自由时,请使用 开始日期 可用。
若要将对存档的访问限制为只允许添加高级订阅服务器 以立即 开始日期和 您不想再提供免费访问的结束日期。你会的 需要使用立即 开始日期将内容添加到高级级别 并且不 结束日期 (默认为 datetime.datetime.max )。
用户成员身份
用户可以通过 armstrong.core.arm_access.models.access membership 开始日期 和 结束日期 定义 会员资格有效。每个memrbership还有一个 活动的 布尔字段 可以将其设置为false以使成员资格无效。用户的活动 可以使用 user.access_memberships.current()
查询成员资格付款墙
阻止用户访问内容的实际过程是 通过 armstrong.core.arm_access.paywalls 包中的Paywalls进行处理。 目前唯一提供的付费墙是 armstrong.core.arm_access.paywalls.subscription.subscriptionpaywall 哪个 检查当前成员身份。SubscriptionPayWall只在视图上工作 返回一个模板响应。
要在演示应用程序中使用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'),
当用户访问 使用他们没有成员资格的访问级别进行保护。 subscriptionpaywall接受一个附加参数 permission\u 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')
如果您只想为没有高级访问级别的用户呈现广告,则 无法将SubscriptionPayWall与未呈现的默认模板一起使用 广告和渲染否认这一点。
只允许匿名用户查看一定数量的完整文章,然后 显示paywall,您需要构建一个自定义paywall实现, 但是subscriptionpaywall应该提供一个不错的模板。如果你这样做了 实施它,它将是一个很好的候选n这个包裹。