0

我的情况如下。

我有一个 django 应用程序,它是一个 CMS,这个应用程序生成页面内容和菜单。

存在生成所有页面内容的“默认”视图。主要模型的字段之一旨在根据设置限制页面的可见性:

  • “内部”(仅限于我们网络上的用户),
  • 'worldwide'(通过 www 可见)现在,我想添加一个额外的值
  • “安全”,这将仅限于登录到该站点的人查看。

我不认为@login_required 会起作用,因为它只适用于整个功能。

我们希望作者或编辑能够设置此标志,而不是编写特殊功能;并且会有页面从“内部”迁移到“安全”然后迁移到“全球”的情况 - 所以理想情况下,网址应该保持不变。

解决此问题的最佳方法是什么?在此先感谢...帕特里克

4

1 回答 1

0

由于您希望在对象上设置标志,我假设在您已经在视图中之前无法读取该标志(即,您不会将其存储在请求对象可访问的东西中,例如会话) ,因此排除了自定义装饰器。您可以选择使用一些有点粗糙但可行的东西,如下所示:

if (val=="internal" and inrange(request.META['REMOTE_ADDR'])) or (val=="secure" and  request.user.is_authenticated()) or val=="worldwide":
     return render_to_response .... etc.
else:
     return HttpResponseForbidden()

替换您的模型值,并自然地编写 inrange 函数。

不过,更复杂的方法是编写自定义中间件并使用 process_view() 函数。有关更多详细信息,请参阅文档。

于 2012-10-11T06:56:38.563 回答